How To Encourage a Young Teen To Learn Programming?
Anonymous Hacker writes "I'm in a bit of a bind. My young teenage son is starting to get curious about computers, and in particular, programming. Now, I'm a long time kernel hacker (Linux, BSD and UNIX). I have no trouble handling some of the more obscure things in the
kernel. But teaching is not something that I'm good at, by any means. Heck, I can't even write useful documentation for non-techies. So my question is: what's the best way to encourage his curiosity and enable him to learn? Now, I know there are folks out there with far better experience in this area than myself. I'd really appreciate any wisdom you can offer. I'd also be especially interested in what younger people think, in particular those who are currently in college or high school. I've shown my son some of the basics of the shell, the filesystem, and even how to do a 'Hello World' program in C. Yet, I have to wonder if this is the really the right approach. This was great when I was first learning things. And it still is for kernel hacking, and other things. But I'm concerned whether this will bore him, now that there's so much more available and much of this world is oriented towards point-n-click. What's the best way to for a young teen to get started in exploring this wonderful world of computers and learning how to program? In a *NIX environment, preferably."
Whether or not you have suggestions for generating interest or teaching methods, there was probably something that first piqued your curiosity. It seems like a lot of people get into programming by just wondering how something works or what they can make it do. So, what caught your eye?
I thought geeks didn't have sex ...
Problem solving ability grows only by tackling small small challenges at first.Again, u build that ability by slowly advancing your level.Not to mention that, you have to burn out to really learn something. To write great code, you have to go through great code that others have written. In short,there are no shortcuts .
Teach him python (or ruby, or whatever else that is high-level and easy).
It's the same as basic was twenty years ago, just much more powerful, easyer to learn and more fun.
Tie two birds together: although they have four wings, they cannot fly. (The blind man)
Your approach is still correct. The point and click gives results fast, but doesn't actually teach you anything. If he find the basics, boring, don't even bother anymore. Programming isn't for him.
Heck, I can say that programming for me became boring the day I started doing it professionally. I would rather direct my son in a completely orthogonal direction.
I don't know what your family situation is (indeed, I don't know if your his mother or father) but is the other parent any good at teaching?
I'd say let him try out a few high level languages where he can build simple programs that at least do something quickly - he could get bored with the details of C - and see which suits him. Help him out if and only if he gets stuck. If he reaches the limits of that language then maybe it's time to indtroduce C or assembler.
Confucius say, "Find worm in apple - bad. Find half a worm - worse."
Write a game, perhaps based on a favourite book. Or something that involves a subject he's already interested. Doesn't matter if it's a simple text game. Let him write it on his own. Then when he's finished suggest a few improvements. Repeat. Once he's bored with that, start a new project.
That's how I learnt.
And for pity sake, do not ask him to kernel hack. It's way too abstract. You need something user-level with immediate and very visible results.
I recommend having a look at SDL. It's an easy-to-use multi-media library that is suitable for 2D gaming. Graphics and sounds are very encouraging and game programming can be technically challenging, too. If SDL is mastered and enjoyed, there is always OpenGL.
XNA is also something to consider.
Teach about game programming. E.g. show how to draw simple graphics using libSDL and then perhaps give hints how the graphics could be moved etc.
I started programming myself, because I wanted to write games. I've been programming for 10 years and I still write games on my free time.
...or "toys" like Lego Mindstorms, Robocode, etc. are perfect, if you are willing to invest some time setting him up.
http://www.alice.org/
Nice 3d programming tool, and useful too.
he'll amaze friends!
Tell him that if you can program you can create games. (Don't mention how hard it is to pull off creating a 3D-game for one person. ) By the time I realized that my father didn't mention how hard it was to create really cool games I was allready interested in programming. ;)
btw. You might want to suggest a language for him that more easily makes him able to get instant results. People are going to shoot me for this but something like Python, Java/C# or even *gasp* VB.
(On the other hand, if he's enjoying C that's great as well.)
C++ primer plus by stephen prata.
http://www.amazon.com/Primer-Plus-5th-Stephen-Prata/dp/0672326973/ref=pd_bbs_sr_1?ie=UTF8&s=books&qid=1216718603&sr=8-1
It is one of the best ways to learn programming from absolutely knowing nothing! Because it explains in very accurate, precise and simple language that is very well expressed.
This is where I learned to program years ago, and I'd challenge anyone to find a better place to bring an absolute know nothing about programming into the fold.
It explains all the simple functions and whatnot for console programming, etc, if he can't dig that then he's not fit to program, the book makes C++ as easy as something as python, or the old visual basic.
The old visual basic 6 is not a BAD place to start if you can find some good programming books, because the old VB gave "immediate" results that kids often look for.
I would suggest finding something that interests him and setting it as goal for some small programming project. When I started programming I was really interested in playing games (or more like creating them from scratch). I ended up coding simple games like PacMan. At the end I had learned some things in coding and had something to impress my friends. So, find an interesting project as a goal, learning will follow.
I taught myself BASIC on an Apple ][e when I was eight or so from books I checked out at the library.
It's fairly easy to read, i.e. TO, FOR, LET, GOTO etc, are self explanatory.
The most important thing to get through to him is program flow, learning other languages is cake once you understand how to efficiently break a task into parts.
A couple months later I found out about javascript and bought a book about it. Then it was Perl and the Cammel, then C.
I think you should try to show him skills that seem valuable to him, maybe because he could brag about it to his friends, or (if he admires you), he could get some recognition from his pop, or even try to make a little money creating a website.
Anyhow, the bottom line is that I think you should give him what he will find valuable and useful. I'm sure he'll find his way to unix soon enough, I did.
In common with (I suspect) a lot of Slashdotters, I started out on computers in the Spectrum/CBM64/BBC days when you had to program, in BASIC, to get anything done and that's what got me going.
I stayed in computers, eventually doing a Computer Studied degree and worked for several years as a programmer for an IT consultancy company, using C++, Visual Basic, Java and C#. In the end (about five years ago) it seemed that all there was in "programming" was SQL. Now I'm not knocking database developers, but that didn't float my boat, so I moved into business analysis.
It seems that now, the majority of big programming is done off-shore, in India for the most part.
I'd suggest something web-oriented to get someone interested, but maybe teaching the basics of variables, looping, procedure calls and such-like in something like C++ or (dare I say it) Visual Basic would be a good place to start.
simon
http://hacketyhack.net/ is the answer!
You can write blogs, mp3 downloader/reader and basic graphical interfaces in a few (Ruby) lines. :-/
I wish I had it when I was a kid... GWBasic wasn't so glamour
Basic "Hello 3D" with triangle rotating can be done in ~ 20 lines.
It takes a while to grasp, but it encourages and rewards experimentation.
First they will fiddle with numeric constants and see what it ends up, then they will add lines to add more objects, eventually learning cycles and arrays for some animation ...
Just don't bore them with background stuff unless they want to know it.
-- Technology for the sake of technology is as pathetic as eschewing technology because it's technology.
Based on personal memories
My father was into it, working on IBM 390 systems and I was eager to get my own computer, to see how it worked and to know how people could program it.
When we received the beast (ZX81) my father just spent a few hours showing me trivias about variables, for-loops and simple input / outputs. That was it.
Then it was just a question of personnal interest, that turned into passion, finaly. Later then the adult can help from time to time or give tips, perpectives, etc.
So my idea is that plain simple basic might be enough. May be just an old VB or a simple PHP sandbox. OOP, web technos can wait a bit. Just start with the 101 and look how your kid responds.
Hope this helps,
F.
Show him how he can solve some simple problems for school, so he can later try to solve some more complicated problems. I have started this way when I was 12.
Extreme Programming - Redundant Array of Inexpensive Developers
Being able to produce pretty pictures is always fun. I learnt programming by spending all my time drawing bouncing balls that changed colour in 320x200 VGA. Of course nowadays kids can use a lot more powerful graphics libraries like the aforementioned SDL, which can let them make a lot cooler stuff.
If he gets the hang of it, you could even teach him how to write a raytracer. That would also be good for his math, and be a nice project where more advanced programming techniques (e.g. data structures, recursion) and more advanced math (calculus, 3D geometry) have practical uses.
There are tons of old emulated and new robot programming battle games... of course, you might have to play the game with the Teen yourself just so he can beat you at it...
Get him on a typing tutor first. It'll come in handy regardless of whether he sticks to programming. As he's learning to type, print out some interesting program listings (or get a book). Have him type in the programs (don't let him just cut and paste). Once he has the programs entered and debugged, have him modify or customize them.
Once he's done a few of these, he'll have experienced the rewards and tedium of programming and should be able to decide if this is the right path for him.
Javascript is not really a best first language to learn, I don't suppose. But my teenage son was more interested in it than in the C 'hello world' example I showed him, because he was familiar with web pages and web browsers and he could immediately see the implications.
My guess is that if you do a simple script that moves something around on the screen and then let him play around with it some, that this will spark his interest.
Good luck
FAQs are evil.
Start em from scratch. Take away the OS! :-)
Donkey.bas was an example BASIC game that came with old ibm personal computers.
one of the first things i remember doing is hax0ring DONKEY.BAS so that instead of missing the donkey with the car, the goal of the game was to hit the donkey with the car.
fun fact, years later i learned that bill gates actually programmed this game.
anyways, its a lot easier to hack up an existing game, do something funny, and use that as an intro to programming.
Maybe game maker is nice way to get his interest.
It might not be the best introduction to programming, but it is fun and beats surfing the internet and dull programming in a true language.
As a kid I played the ZX-Spectrum for a few years. At some point (probably a year after I got my hands onto this computer) I got interested in how people do the games, literally how they draw those nice pictures, pseudo 3d games, animation, etc etc. That made me learn Basic and Z80 assembler a bit later when I realized that I could do everything in Basic (at all or at a decent speed). I didn't do much game programming with the Spekky, but I did a lot of related programming on x86 PCs (3d graphics primarily) and actually had a few simple (almost playable) games prototypes written.
So, trying to understand what's behind a game and implementing simple games can be a good start with a lot of fun.
Then, when I was in my last grades at school my dad offered me to write a few simple applications (mostly text and numerical data processing) for him for some money. I was happy to do that as that made me learn some more cool stuff and I earned my first money. I continued doing that and learning everything I could and I'm now somewhat like what you describe yourself (maybe just not that long time and with less Unix experience).
So, do games and give work for which you'll pay. That'll teach him the stuff and you'll have fun. And at the same time it will let the kid see what he can do and how he can earn for real.
Would you turn down fun and money? :)
If you have any electronics knowledge, learning to program a PIC to do fun stuff using JAL is a good way to go - I'm doing this with my 13 year old. Here's a good reference: http://www.voti.nl/swp/
I started with the Atari 800XL/ Amstrad CPC basic and I think visual basic it's way too complicated because it uses many things of windows that can obscure the learning process. That said, if we learned with older machines, why not give a try at some emulators and let him start doing things in pretty plain old basic? You can find most basic manuals for old computers quite easily and he won't be frustrated if a dll is not found or if he cannot guess why a weird event does not happen.
Most programmers started out teaching themselves. Only mild support is necessary. Either he has the interest or he doesn't. Chances are if he's not especially moved by a hello world program he's probably not going be that motivated to stick with it.
I record my sleeptalking
Give him nethack (or any other OSS game) to play. After a while when he will get interested - give him the source code for it.
Programming games is probably most engaging activity. I'm 31 now - but still on it ;)
All hope abandon ye who enter here.
Why not start with PHP where he can see the result instantly?
The best language to teach him is $trendy_language_of_the_moment. If you don't teach him that then he'll never get anywhere. How can people hope to encourage people to learn when they're using $formerly_trendy_language? It's just so horrible that I'd rather gouge someone else's eyes out with a spoon that use it instead of $trendy_language_of_the_moment!
When I was 14-ish, I liked to futz-around rather than program seriously. If he is like me, and has a short attention span, buy him 3-4 books on programming, and point him to as many free source code websites as possible. Ebay has some cheap books I'm sure. Ideally, get him books on 2 different languages, and find ones that are moderately comprehensive.
The other 2 should be like coloring books for programmers, although I didn't understand nearly enough of the math at the time, DirectX in 24 hours was cool.
No, really. That way he can share his games or whatever with his classmates, simply by sending them a link.
Of course it'll be a longish road to get to that point, but it might be a goal he can relate to - and I know I simply wouldn't learn anything unless I could see the point. Still don't at 34, come to think of it :)
First off, I think you should start with a language such as Python or Ruby. I started with BASIC which was easy to grasp, and more modern languages are easy yet more powerful.
Second, when I started programming I was first looking at my brother, writing really simple BASIC programs on the C64. Later, I was interested in fractals and wrote algorithms for drawing fractals. I had a book with code examples for different fractals, but in some other language (I don't remember which). The process of interpreting the algorithm in the first language and translating it to BASIC was very good for learning. Tweaking and extending the algorithms and seeing the changes visually was very encouraging.
Today, if I were to teach a kid programming, I think I would look into Lego Mindstorms. It helps if the kid is into Lego or robotics, of course. That's a contained environment with a powerful and easy language, which is also part of something else, with immediate feedback on the changes. You can program it in either the Lego-supplied RCX Code (BASIC-like) or ROBOLAB (LabView-based), or any of a number of languages supplied by the community (C, C++, C#, Java, Lua etc).
:wq!
When my mom was learning, she thought it was fun making things and putting them on the screen, then changing them and seeing what happens. Just today, I tried to see what happens if I change all me velocity vectors to integers and it was fun to see everything stop moving because their velocity was always less than one to begin with.
Teach him how to play with code.
Also, whether or not you'd bore him is a level of his determination. I've been programming since 16 and I made worthless, unimpressive code until I was 18, but I kept on because I knew I'd some day make games. All that experience made it so that with one semester of C++ and an SDL tutorial, I could make a sweet and simple game.
On the other hand, many of the people who graduated for a degree in computer science claimed they never wanted to program again. Determination will decide whether he programs or not. He can have all the knowledge in the world, but not touch a computer again if he lacks determination.
That's THE way to get ANY teenager to do ANYTHING.
IMHO the answer is don't. If he is really interested in programming, he will not need much encouragement, in fact the problem might be how to keep in away from the computer long enough to have social life. If he loses interest or finds it too hard, then you might unintentionally put him under pressure to keep going just to keep you happy or to prove he is smart enough, and that ain't no recipe for happiness. Be prepared to deal with a possibility that he might decide programming is not for him and that he really wants to be a male ballerina or something, because that's fine too if it would make him happier in the long run. As for the teaching methods, that's a tough one. I kind of lean towards getting them immersed in one thing, language for example, until they understand it in some depth and then using that as a base to learn other stuff. But then different things work for different kids, so there is no one correct approach
Negative moral value of force outweighs the positive value of good intentions.
Ruby (maybe Python) is one of the last 'frustrating' and 'discouraging' languages out there. To make it even more interesting, give him Qt to play with. With Ruby/Qt or PyQt you can open up a window in just a couple of lines. Even 3D stuff can be done with that combination and that keeps him entertained for quite a while. Bonus: object oriented programming from the beginning.
Take a look on the Alice project. http://www.alice.org/
This is kind of movie-making Java environment.
I think logo was my first programming experience and I enjoyed it. It's great to see the fruits of your labor instantly in graphical form.
was to use something I learnt while lecturing. People like to do things. Teach them 'sh' and the unix utilities. This allows them do do things. People learn by doing and love doing simple surprisingly powerful tricks.
I don't see that not having a flashy GUI means anything. I grew up in a world where I saw flashy GUI's for exactly what they were. I was much happier hacking DOS to get that extra few KB of base memory than I was playing about in Windows 3.1.
The problem is that you can't foster curiosity, which is the main driver here. Nothing will make you sit down and learn a programming language more than curiosity for what you can make the computer do, whether you can do something better than Microsoft, etc. You can try very hard to keep interest, though, and there practical results tend to have greater effect - this is why most basic ICT in schools is based around roaming turtles, Lego RCX, "traffic-light" kits etc. Computer-controlled with visible, physical effect.
Personally, I think the best way to foster the right computer skills isn't to use a computer much at all (this is a philosophy I've held for most of my life - the best way to program is in your head, not a machine - the best way to write a story is on paper, not a word-processor, etc.). The best things to use to learn are simple gadgets. I'm not a gadget person. I'm not even very good at electronics but I struggle along and get a lot done.
Wire your house for a burglar alarm, controlled by a computer, and involve your children in every step. If your practical skills aren't up to scratch (good, you can "learn" by your mistakes together and your child can try to "out-think" you when you both hit the same problem), you can get X10/DMX-style equipment that makes it a cinch. But there's nothing like a bug that'll scare the crap out of you when the alarm goes off because you didn't cater for a niche-case (opening the back-door while the power was out etc.). It only needs an ancient "sacrifical" computer that doesn't matter if you blow its parallel port, and it introduces every single reason behind having computers - automate tasks that a human could do using simple, cheap components.
You can learn programming, you can learn embedded programming, you learn about the importance of bug-checking and clean code, you learn about interfacing, buses, serial/parallel data transfer, physical and real-world effects and how to counter them in software (e.g. switch debouncing). You even get to learn how the damn computer does its job so that it's no longer a magic box that does stuff. You get to interface with all types of cool gear. You get to bring practical, real-life skills into the learning environment which can help immensely if your child learns better that way. (And I don't count "how to write a letter in Office", I mean REAL life skills, like practical problems, electricity and electronics, wiring, why the bloody ladder won't stay still and why Daddy put his foot through the roof).
The rewards are instant, visible, practical, extendible and "show-off-able". The "reward" of having the whole family laugh at a a doorbell that plays a WAV when someone presses it is very rewarding especially when "it was all my son's work". My particular favourite is a doorbell that goes "knock knock" when you ring it. I also bought an old-fashioned door knocker which has an integrated switch in it and want it to set off a "ding-dong" sound, just to see the postman's face. I'm doing it with simple electronics and one of those recorable greetings-card chips but you can do it with a PC easily. Ten minutes of very basic wiring to an old-fashioned joystick port (ancient laptops are great for this sort of thing), a WAV file off a free website and a twenty line program. You can see exactly where his skills lie. Is he a better programmer? Is he a better thinker? Is he better at practicalities? But no matter what he is, it's so simple to do that you can have great fun wiring it up (probably with Mum in the background tapping her feet because she's getting sick of "Yankee Doodle" every time the neighbour's call).
Then you need to get to the point, as quickly as possible, where he can *think* of new stuff to do himself. You started with a doorbell
When I started getting into programming, I was naturally interested and I think that's one of the important things, to be interested in technology from the beginning.
Now my teacher noticed my interest and showed me some cool stuff. (Well it was cool back then). Like how to use graphics in Pascal. Handle keyboard. Showed me how to make some tiny games and then I used to look at the code, try to understand and write something myself.
Or he gave me some books on the matter. Like assembly, it was hard to understand at that moment, but I had use for that knowledge later (in the University).
So the thing is: just show some cool thing/idea if he's interested he will explore it himself.
I started learning programming with QBASIC (on my own, wth some help from google).
It's simple to understand (a kind of...), and if you show him some the graphical stuff (different resolutions, on text mode, graphical mode) it think will be courious to learn. (make sure that your windows/dosbox emulator supports that graphical modes)
At first some "Guess a number" (with the output from the computer "lower"/"higher"/"right" or "cold"/"colder"/"hot"/"burning").
Next maybe a pong game (but be attent at the geometry/phisics stuff, which may be a bit hard if he's so young) or a simpler space invaders, or even a tic-tac-toe (with random chooses, later a very weak AI).
anyway, keep it simple!
(Bonus points if he knows about text-mode games like nethack or will code a "Hunt for Wumpus")
(Posed as AC beucase I don't have an account here)
Video games are fun, and making your own video games is fun too.
Start by making him learn text game programming, like the price is right. That's both on the very basic level of programming, and a quickly gratifying game to learn.
Then, maybe I suggest low level game program. And by low level I mean no SDL (well, maybe a wrapper), but writing your own pixels to a frame buffer is more gratifying. As in, teach him how to make a function that write a rectangle on a frame buffer depending on the rectangle's size and the coordinates of its center, then make him move the rectangle around by pressing keys.
Build on top of that by making he do a very basic game like pong. My first graphical video game was a pong and I coded it in two days, that's how easy it is.
From that point on, he will probably start to get ambitions. As in, he'll want to draw lines, load sprites, rotate them, use physics, learn about tcp/ip network, signal processing theory and techniques, etc, to achieve a precise purpose. All of these things will fuel his interest towards mathematics and physics, and give him a good reason to learn about and understand these things.
Finally, introduce him to more "real world" type of programming, by giving him some of the stuff you have to do at work, for uhh.. the sake of his education!
You just got troll'd!
The whole IT bit me because al of a suddon my dad came home with an Atari2600, without asking for it. I was so completely overwelmed by it, that I was interested in computers ever since ending up as a systems engineer, what I personally like.
Bottom line: In order to inspire young people by showing them the big picture first, and then let them find their way down to whatever interest them. If you start bottom up, little chance you'll catch the attention of a teen because it might be conceived as boring and not cool.
Processing is a java subset (but you can use full java if you wish) geared toward "visual computation". You can see some great examples here http://complexification.net/gallery/ or on flickr (just search for "processing" tags). Project home page is here http://processing.org/
I already used it to teach something to my nephew (12yo) and he finds it great, mainly because he can have some "cool" effects and stuff on the screen and can instantly see what his code does.
C is a great and powerful language, but maybe it's not so good for a teenager to begin with. Myself, I began with QBasic, which was on DOS on our computer. I only started learning C at later. QBasic was a great language to begin with because, it being a scripting language, had very helpful error messages if something went wrong and was very easy to debug. QBasic also had a quite nifty documentation. And there were two example games included which could be modified to start seeing the effect of changing code. I also loved it because you could do graphics with it - had I started with C back then, I'd have been bored by text input and output very soon. Of course today DOS and QBasic are less relavant today, and also not *nix as you asked. But maybe another language that is also a scripting language like QBasic, such as Python or Ruby, could be helpful?
I would start with netbeans ide for the kids.... :P
you can c/c++, Ruby, Java and Fortran
it's made in java and uses the gcc and g++ compilers if installed.
it's a bit VS Studio in java wich you can run under *NUX or *NIX-like
good luck
I would suggest you start off with some basic C to demonstrate variables, functions and then some more advanced but very important stuff such as pointers and structs. Structs are an easy concept for the introduction of classes, for which i would suggest some scripting language such as ruby (to ease experimenting on his own). This way he may appreciate the use of classes and the avoidance of pointers more than without knowing the dirty origins.
Show him the concepts of how information is worked on with. Show him your work and what you do.
Show him the simple steps what happens when you listen to an MP3 (filesystem, reads, put data to the soundcard) etc.
He first needs to establish a notion of how information flows in a computer and that a computer essentially cannot do anything besides addition (and stuff).
You give them a computer, if they're the kind that's built for programming they'll do it themselves.
I started programming when I was about 12, and I am completely self taught. My parents knew nothing about computers, and still know nothing now despite my efforts. Anyway, i started with javascript, html, and php. (This was around 6 years ago). I think it was much easier to start learning the basics of this kinda stuff when you don't have to deal with all the boring (to a 12yo) details of memory management, libraries, and compilers etc. Web programming is something were you can get the instant results and action, you can just keep tweaking the source file and hitting F5 until you get something that works and looks vaguely like what you're after; this is especially useful when you don't know what you're doing. :)
I had a few books which taught me the basics, a javascript book and a html book. They only covered simple things, (I think the js book was a For Dummies..., actually), but it was enough to get me started. After that I found the php.net docs and a friend showed me loads of his php code and i picked that up fairly quickly.
Being a website, it's something easy to show off too, it was kinda cool to be like "dude, the whole world can see my webpage!". Following that theme, i got started on irc bots, eggdrops are written in C, and you can script em with tcl. Be careful tho, tcl is kinda quirky and weird (at least, that's how i remember it). But it's great for simple stuff, get the bot to parse some text and reply etc. This might also be a good time to learn some networking stuff. Also since eggdrops can also have C modules written, this is a possible path into C, although I didn't go that way so I don't know how good it is.
I eventually learned C(++) from some online tutorial, http://www.cplusplus.com/doc/tutorial/ I think. And I wrote a load of code for manipulating some large binary files (game resource files, from Halo). I certainly don't recommend letting anyone learn C solely from some tutorial, since I had rather large gaps in my knowledge at this point (that code i wrote is terrible), but it was some great experience anyway. I played around with some .NET (ugh!) gui stuff, because I didn't know how else to make a gui program at the time (seriously, I don't know how I was meant to know about qt, gtk, or win32 etc at this point) and a program that just prints text on the command line got boring real fast.
Hacking at computer games was what really drove my interest in C at that time. Reverse engineering of the file formats was fun! Even if I did kinda suck at it and just found most of the info on the web.
Looking back, I'm thinking I probably would have liked someone to show me python (and maybe perl) much earlier than when i eventually discovered them. php sucks as a general purpose scripting language and C gets tedious for those little tasks.
Sorry that was all probably a little incoherent, I spent the time I was meant to be doing english homework programming ;)
Programming? We need plumbers! Good plumbers, and builders, craftsmen... not another mediocre programmer.
With python or something else you could easily do a text adventure game.
a bi-dimensional array of objects. each one a room.
good luck.
Get him to program stuff like mini-robot, with PIC-BASIC or something similar. Programming electronics *is* funny. This way, with some luck, he wont end up as a pure software geek, useless nowadays in your country !
First, like the other poster said, start him out with an easy to learn language like Python. Then as he gets more experienced, he can use the innumerable Python add-on packages to do all sorts of things. Remember, the O'Reilly Python quick reference book is the thinnest of all of them. I use Python and various incarnations of Numeric Python as the language doesn't get in the way of prototyping algorithms. Later they can be ported into C or FORTRAN.
You don't say what age he is but do ask for the opinions of those in high school so I am assuming he has already learned quite a bit about math (although this is 2008, not 1975, so who knows what crap they are teaching kids?) I was always bored with math especially in high school. Thus he might be at a stage where he could find out where applied mathematics is really done- on a computer.
The real world doesn't boil down to simple closed loop equations, as many simply cannot be solved in practice on a piece of paper or an exam. They require iteration to some tolerable error function, so that a very close approximation of the answer can be found. That requires the very high speed of the computer in order to do the iterationa in some reasonable amount of time.
Moreover, topics like integral calculus are very easy to explain on a computer, since the computer performs it just like is done in the first week of classes, by breaking the area under a curve into very small parts, and adding up all of the resultant parts of the function. Thats a lot more intuitive than some obscure looking equation.
I could go on and on, but I think you get the general idea where math is concerned. In science, where many calculations might be needed to solve a problem, he could just write a simple program to do the same in a microsecond. A great example of how a computer can speed up productivity and research. It would probably be great for homework, although he would still need to know the curriculum of the class in order to pass an exam- unless they now use computers in math exams, which I doubt.
I really wish I had a computer in high school, as I was already doing quite a bit of electronics. But alas it took a few more years for the PC to be invented. In my days, just having a hand-held calculator was quite a luxury.
Don't try your to encourage your child to do anything for which they don't have a natural inclination, they will end up hating anything you try to push them towards to forcefully. Give them a well rounded education and make programming one of many things you expose them to, this was what my parents did and I am thankful for it. I lost count of how many people I met in college whose parents had enthusiastically encouraged them to learn one topic or another, especially the children of professors. Some people took off with whatever topic their parents introduced to them but most of them ended up switching majors 4 or 5 times and spending years and many dollars on undergraduate education. Demand excellence in whatever your child has interest in, with the caveat that as they get closer to 18 they have a plan on how they will feed themselves (so you want to be an actor Johnny? Great, better double major in something practical otherwise you'll be waiting tables cause I won't be paying your bills).
I think the invisible hand of the market has its middle finger extended
--A wise old fart named SC0RN
Bigges geek producing machine ever. :)
Draw upon the extensive knowledge of the GNU/Linux community, for example:
If he actually does find a bug, here are some of the basics you should tell him about bug reporting:
Now this post may seem like a troll, but if you do exactly the opposite of what I advise, he should do well.
I'm going to transform myself into a mighty hawk. Either that or I'll just go and work at Dixons, haven't decided yet.
... then show him something *you* made that builds on his interest, making it even cooler. Robots, tanks, helicopters, police cars, whatever it takes. That will pique his interest like nothing. Encouragement, explanation, even bribery (reward coding something specific with money - worked for me). Both of my parents were developers back in the early days of mainframes, and that's how they got me hooked. I've been coding since about 6 or 7. I say "coding" - back then it wasn't much, but it sure was excellent fun.
There's a GUI programming environment called Greenfoot, well suited to 2D games, specially written to get children and teenagers coding. It's similar to Java/C, and is free. (I think it's Windows only, though.)
My father worked at a chemistry research lab and they had a small computer room with 4 486 computer (it was 10 years ago).
I went there with my father wanting to play Mario but one of the people there started Pascal and showed me how to draw lines and circles in it.
So I started drawing houses and trees and I got hooked.
Buy him some uber-cool hardware which doesn't have *nix drivers, and delete his only copy of windows.
http://cafepress.com/spankymm - for the Masturbating Monkey in you!
when i was young (12ish), i had a magazine subscription that had a section in the back of every issue called "basic training" where it gave you the code for a simple game that you could program yourself.
i sat myself in front of my IBM PS/2 (which i still have, and it still works) and typed in the BASIC code, only to discover that QBASIC does stuff differently than whatever version of BASIC the magazine used. but i had spend hours coding, i refused to let that go to waste, so i read the error messages and help files, and eventually got some of them to work. then i modified them.
then i started making my own games, (including that RPG that every single programmer in the world is working on yet never finishes.)
i was playing a lot of command and conquer around this time, and i discovered the awesome power of the "rules.ini" file, so i started making games with separate text files to control the variables, so i could tweak them game more easily.
then i finished elementary school, and got stuck in high school with the crappy workload, making coding impossible.
high school programming class was a joke, but then when i went to art school, i got really excited about micro controllers, and the BASIC stap let me use QBASIC again, and i was happy.
then i discoved the picaxe system, which is an even easier form of basic, and way less soldering.
i would have to say, working with BASIC powered micro controllers is the way to go. BASIC is so easy, even I can do it, and when you finish, you have something that you have built yourself, and it actually does something! its a damn good feeling.
-I only code in BASIC.-
Tell him if he does it right he'll make tons of money and then all the women will want him.
If Google really cared they would fix Android Chrome to reflow text, instead of discriminating
My lad started coding when he was about 10, but it took a few false starts. In my experience, compiled languages like C aren't a great place to begin, as the need for compilation really gets in the way of the learning experience. I also had a failure with PHP - I thought that he'd enjoy web hacking as he was comfortable with HTML, but I found that cookies and sessions - without which you can't do much in a web environment - were a huge conceptual problem for a young mind.
You need to start with something that's simple, rewarding, well documented and with good community support. A language that permits procedural code and dynamic typing is also much easier to teach. I suggest Python for the language as it has a great beginner's IDE on Linux (DrPython) and, importantly, it produces comprehensible error messages (Ruby on Rails: I'm looking at you). It also produces clean, legible code.
You need to move beyond text-based programs pretty quickly: no-one wants to show off a terminal session to their mates. GUI interfaces aren't very teenage, so I suggest you check out PyGame for graphics and sounds - simple to learn with quick rewards.
Finally, enter the next PyWeek competition with your lad - he'll never win, but it'll help him to see how a more complex project fits together and give him a gret sense of achievement.
Start with SML (moscowML is a nice one), teach him what recursive functions are and how to solve problems. Teach him about datatypes and how to define your own, show him how to make trees and how to traverse them (go look at the curriculum, run the same thing with him - heck as a C programmer chances are you will learn something) If someone is used to programming ML can be quite hard to understand and very frustrating, however as a language for someone new to programming its easy to get started with and it wont teach you bad habits like PHP.
Next is usually Java, its a nice object oriented programming language for newcomers to learn about objects and its a safer way to program compared to C/C++. If the interests in programming still persists at this point show him C/C++ and the work you are doing.
Also remember, while doing all this you should gradually introduce stuff like algorithms and advanced math, they go hand in hand with programming.
Whether you teach him programming or someone else does, the most important thing you can do for him is to show your enthusiasm for programming and demonstrate why you love it. Those kinds of things are infectious. If he catches the bug then he'll learn it, one way or another.
-deane
Help him to find a project he's interested in, in a language/environment where he can get damn-near instant results, and then let him run with it, offering guidance only if he asks for it.
Hell, I got in to programming when I saw my brother playing on a BBC Micro, and asked him to teach me. I was 8 at the time. He helped me draw a picture of a door (using grid paper to sketch it out, and then copious LINE() or whatever statements). It was the coolest thing I'd ever seen. Next I drew a space-ship (and a pretty piss-poor one too ;-)
No-one needed to teach me after that. I read all the programming books I could find and old Micro World or whatever it was called magazines... And, I still love programming :-D
Get him started with Javascript. It's an awesome little language that scales up to all sorts of useful programming concepts, but best of all, you can get visual results reeeally quickly. There are lots of tutorials on the web, even if most are shitty. If he's still on it after a week, buy him the ORA book.
-P
Score:-1, Funny
1. Take some good porn.
2. Encrypt it with a simple algorithm, ROT13, something like that.
3. Give him the algorithm and the encrypted porn.
Voila!
Put slackware, gentoo or another advanced distro on it, but don't install a gui (the next step is games, which burn away a kid's time).
Let him figure things out by himself and make sure he's got easy access to the basic information, the rest he should be able to figure out himself.
Make sure he's got complete access to all information about his machine (so he can maintain it by himself).
a teenager is not supposed to do any programming. Let him hang out with friends otherwise what you get is a geek.
He can discover the joy of programming when he is older.
Hello World is C? Sweet Zombie Jebus....
We all started on something easy like Basic, or tapping something into a TI calculator, or what have you. It was the almost instant gratification that got us hooked.
A little typing, tapping, It Ran! oh wait, that's not quite right....
A little typing, tapping, It Ran! oh wait, that's not quite right.... and a few years later you look up to discover you're a Nerd.
Now granted that's horrible coding practice, but it's what we started with. We all programmed little games. Who among us didn't try their hands at tank wars or Pac Man, and of course most of us tried to write a character generator for our favorite RPG. The point is we didn't start programming, we had other interests that programming could help us with in a cool manner.
Don't start with anything low level. Don't even think it. C? Seriously? Please do introduce good practices. Write out a flow chart, do your pseudocode!
Find a little project for him. Start with something small. Show him how to tweak things. You'd be amazed at how cool it is to change a little bit of text on some program. Do something related to something in the real world that he enjoys.
And don't be peeved if he decides it's a giant PITA, 'cause we all know it IS. :D
-T
Give him a copy of VS with C# as primary language and set him some simple challenges to do. Perhaps start with something like "make a basic calculator" all of this can be done in the VS GUI without him having to go in depth for all the framework and structs of the project all he'd have to do is create the onclick events to take the 2 inputs and the action fairly simple and yet should be challenging enough to get him interested. If he can manage that kind of task in something simple like VS then you'll find it'll really get him interested and he'll then start poking around at the more complex stuff. Alternatively give him EditPlus and tell him to make you a simple signup and login website in something like PHP and MySQL again simple enough but with enough challenge he'll have to look up some stuff and read some docs etc.
A good and appropriate project is the way to go. Then choose which tools are most suited.
Write a rehearsal application, a database for his music collection, program Lego Mindstorms, whatever. A project automatically set both short-term and long-term goals, your kid will inituitively pick up quickly how things work, and it is easier to think about the problem encountered.
You can always go more low-level afterwards, according to the developing interests of your child.
Not NetHack! It was written by the evil Wizard of Yendor with help from his idiot minion Eric S. Raymond; consequently, the source is a horrifying abomination worthy only of the renegade god Moloch. It is not a good learning example. You should be at least a level 20 Kernel Hacker to venture inside.
Can I suggest instead that you look for a simple game written in Python or Ruby. They are likely to have source that is possible for level 1 Noobies to understand.
You need to show him something that will quickly show results, preferably something that can display a UI and I guess these days that would be best done via a web browser. Try to teach him some PHP so that he can quickly see the fruits of his work on the web, and from there move to Javascript, mySQL, and then to AJAX. With that knowledge teach him to learn for himself by developing a facebook application by reading the facebook api and going from there. From there you can move him onto some of the C/Java code at which point he should have a strong understanding of the logic and will have picked up some useful SQL skills.
Quick results are what got me into programming. Seeing that I could code a small, higher or lower game in about 10 mins for the BBC Micro or an Acorn and then show that to anyone who was interested was almost instant gratification. These days a web based project would be more impressive and easier to distribute.
Don't know of any english equivalent, but if your son speaks french (or is learning french), you can get a copy of "Apprendre à programmer avec Python" (1).
Freely downloadable from the internet (google it), it's a great book used in schools (from age 14).
It quickly gets into graphics programming, this way the student produces something graphical very fast.
1: http://www.cifen.ulg.ac.be/inforef/swi/python.htm
Chuck has been covered before on /.
http://ask.slashdot.org/article.pl?sid=07/01/20/0434210
Although the syntax *might* be a little too advanced at this stage ... being able to get real time audio feedback from method calls etc. will provide a certain fun factor that could spur his interest more than simple text output on a terminal screen (and could double as a great debugging aide).
There is full documentation with the install, and a lot of example functions and classes to get started. The separate GUI environment miniAudicle - currently in beta - allows Chuck programs (Shreds in Chuck speak) to be started and stopped in realtime, making it very easy to use.
It's a little like the old days of "Logo" but with sound :)
http://chuck.cs.princeton.edu/
http://audicle.cs.princeton.edu/mini/
(not sure why but the server is currently unavailable).
More info here:
http://en.wikipedia.org/wiki/ChucK
Peace,
Andy.
Teach him about software exploits, but tell him in no uncertain terms that this is illegal. But that's why it'll be cool, and he'll be able to impress his friends. :) And if he makes this a career, he might turn out to be one of the few who actually understands that security is important, everywhere.
There is a very nice language for learnig to program.
Euphoria
www.rapideuphoria.com
As easy as Basic, with all the stuff a programmer needs, without the need to use object-oriented methods.
Very, very nice and clean syntax
A teenager can learn all the stuff he needs to start writting his own programs in an afternoon.
It has a VERY friendly mailing list, discussion forum, 1800 programs submitted by users,
on Windows it has a nice clicking IDE - submitted by some user and written in Euphoria itself.
It also runs on Linux and has even FreeBSD binary available for download.
There are quite a few graphical games written in Euphoria, Euphoria Editor (with syntax highlighting that works as an "IDE" written in Euphoria), many, many libraries, lots of stuff. Ready for download and tinkering.
I know there are quite a few C programs (or python, or perl, or [insert the name of your favourite language here]) available, but majority of those 1800 programs written in Euphoria are readable (and understandable) by an absolute beginner.
I personally have learned how to program with "raw" Windows API using Euphoria and their win32lib. I have created a simple Windows graphical game. By writting code, not by clicking on fancy buttons.
It is a simple interpreter with a GRAPHICAL debuger (by graphical I mean running in color terminal in text mode, resembling the very old Borland C you remember from 'good ole DOS days') that can be used to step through the program ((this is one of the most important tools for a beginning programmer)) and display variables, and ... ... surprise, also written in Euphoria.
The debugger is surprise
When you have program debuged and you want speed, you simply "compile" your into a C source and run that through a compiler of your choice.
The newest version is OpenSource (used to be shareware, nagware, free for non-commercial use)
I'd start here http://www.squeakland.org/ the environment is based on smalltalk 80 and is pretty pure OO, so even though it looks like a toy they will 'get their mind right'.
On the surface it has a fantastic drag'n'drop tile based scripting layer that allows kids to quickly get toy and demo things working - building both familiarity with concepts, confidence, and interest. This http://www.squeakland.org/school/drive_a_car/html/Drivecar12.html jumps into instructions for a 5 minute draw a car and write the program to bind it to a drawn steering wheel. You can quickly progress to programs with sensors doing track following. I've used it to make flocking games (like herding cows etc) for the amusement of my kids.
It is intended that you can drop under the scripting and start using the full OO smalltalk (http://www.squeak.com) classes, inheritence, coding while you debug while you run. OS integration, OpenGL bindings, links to DBs, multimedia, a whole host of good stuff.
The idea is to give them something it's easy o come to grips with but that is OO, open, and as deep as you want to go.
I started with LOGO, drawing lines, circles and squares. Even learned the basic concepts of polygons there. I didn't get variables yet, bu that came soon after. Turtle drawing was a good experience for me!
Such as chasing girls? Seriously, programming can never be good for a kid.
Beauty is in the beholder of the eye.
Don't encourage. Let them have happy and social life.
No, I didn't read TFA.
The one thing Id suggest you try to impress on him is the importance of selecting the right language for the right job. Too many people these days use for example Java for apps that would much better be coded in C for the sake of performance, or C when Perl would be much simpler and performance is not required.
And for the sake of the gods, dont let him anywhere near C#/.NET or any of that single platform shit.
As a teenager I liked the simple putpixel to draw on the screen.
You can see immediately what changes you are doing by changing x and y position and/or color. And ofcourse create your own line/circle/polygon routines.
When you can see what you are coding it makes it more fun.
Just my two cents.
When I learned to program (I was 8), it was DOS and text mode and BASIC. The programs I wrote were simple "enter some text or numbers, get some response". It doesn't have to have fancy graphics and the like to be interesting.
And I'm not saying that because I'm an old fart. Everybody I know who programs started that way, although the younger folk usually started with GNU or BSD and Perl or Python, rather than DOS and BASIC. They do stuff that looks pretty uninteresting to non-programmers, but is very valuable to them. Usually, they start by automating something that they do often. Sometimes, they've found something they found cool (e.g. a script found on the web) and started tinkering with it. I had a book from the library with source code for a couple of simple games.
Another approach that can be very rewarding is web development. You can get impressive-looking results relatively quickly, and it scales all the way up to what the big guys are doing.
In the end, though, I think programming is something you have to want to learn. You may want your son to learn to program, and your son may be dreaming of making his own great game or operating system, but that's not enough. You need to develop the way of thinking that allows you to break down your idea into what you can express in your programming language, and that takes time and effort. It's going to be frustrating until you get it. Most people aren't really motivated to work through that, and will give up after a short while. That's ok. You can still learn to program when you are older, and you can be happy in life even if you don't ever learn to program at all.
Please correct me if I got my facts wrong.
... and let him learn on his own. Many of us learned programming from reading books and tutorials, and most of all from just trying stuff.
So if he doesn't have it on the machine, install a compiler or interpreter for the language he tries to learn, give him a link to a good tutorial, and then just wait and answer his questions.
If his geeky farther isn't available, it might be good to know where to contact the community for help (relevant web forums (like perlmonks if he choses perl), mailing lists or the like).
If he (or you) doesn't know which language to start with, be sure to pick one where he doesn't have to bother about memory management first. That kills the fun at first, and segfaults are hard to debug.
Try Hackety Hack.
Personally I got into programming after reading those strange books you used to have as a kid where depending on the decision you made you had to switch to a certain page in the book.. I tried to program my own story-game that way. Basically it was just a load of simple IF statements, but it is what got me into programming.
I also made a few simple scrolling graphics projects. Mostly huge "spaceships" which scrolled across the screen, made with ASCII blocks hehehe..
This was when I was about 10 I think.
Hi
I grew up with a software developing father who cannot teach, and gets irritated with someone who does not grok the concepts he is trying to communicate in 5 nanoseconds.
He was teaching me Boolean logic at the same time I was learning to add and subtract at school, taught me about how CPUs work, made me memorise the ASCII table and then how to program shortly after. He gave me Logo to play with on and Apple IIe and then later Basic.
Although I now wish that I had been given an introduction to C from a young age this could not have happened as my Dad is a business application developer so he sees all that nitty gritty as a waist of time. He has the same attitude toward computer games. I on the other had would have loved to learn some of that stuff but growing up on the southern tip of Africa didn't have access to that kind of stuff till I was as tall as I am now.
However the main thing that my Dad passed on to me that I am grateful for is a passion for using computers to solve problems in a practical way. I have found that this translates into any programming language.
So my advice would be show him what's out there and that there are no boundaries. There is nothing that is "too difficult" or for him to write. (I was well into my 20's before I realised that although I was not the best kid in the class at maths I could write OpenGL games if I put my mind to it.) It also sounds to me like you are in a good position to introduce him to the community of developers so that he can find answers to his questions and inspiration from things that you might not have an interest in.
As far as languages are concerned show him why there are different languages. If there is a problem that can be solved easily and elegantly with a high level scripting language then use than. If assembler is required to squeeze the last little bit of performance out of the CPU then he should feel confident enough to dive straight into it.
That, I feel, is probably the best you can do and your son will have to do the rest himself.
Back when I was about 13, I asked my dad to teach me programming. He pushed a visual basic beginner's book and the visual basic 3 floppies into my hands, and wished me good luck. In retrospect, I don't think this was such a bad approach.
What you'll need first and foremost is an environment with immediate visual feedback, that you can do one-liners in that gradually grow into larger programs. Visual basic fit the bill at the time, but these days I'd look more towards adobe flex (the gui tool, not the sdk), or if you get the heebie-jeebies from commercial products, just use html + javascript.
What's important is to recognize that there should be some measure of reward right at the start. The kid should be able to build stuff that does "something" his first day, and be able to grow that into building programs that he designs himself.
Don't try to push him in any way, let him discover things on his own pace. And don't try to enforce your "standards of work" on the kid, because it took you years, or even decades, to build up those standards, and it would be too off-putting to require him to "do it right" the first time around. Following from that sentiment, avoid pushing tools because they're "correct", but instead choose tools that have gradual learning curves, even if you wouldn't use them yourself necessarily.
http://hacketyhack.net/
I can't tell you how to teach, but I can tell you how I started to learn.
My father bought a MicroBee with a tape recorder. He bought games, and I played games. I wasn't interested in programming. He did however code together some small text games, from magazines.
I played those too.. we solved adventure games together, and when we couldn't progress any longer, we looked at the code.. but neither of us understood it.
Ofcourse this didn't teach me to code.. what it did was to teach me that there were code, and that computer programs was code.. and could be reed, modified at choice.
Then I got my own computer, a Commodore 128, with basic.. I didn't touch basic for a long time.. I played games.. but when I got stuck in a game, I did know.. that the games code somewhere did hold the solution for my problem.. I coded a few hundred lines of basic on that machine..
I got an Amiga, and with that came AMOS, a basic. It was coding in a secure environment. You couldn't touch the hardware (well maybe you could). And I started to do some coding for fun in it.. After all I did know what all computer programs was code :-)
After that I was self going, and installed Linux and reed C manual pages. I bought a C++ book and started to learn how to really code.
--
I guess that todays version of this would be to show him games, and from his age I guess you already have.. So I would get him VisualBasic. Powerful for the beginner, yet no need to peek and pook memoryaddresses :-)
Get him access to a small bundle of O'Reilley books... make sure he's a bit bored or at least doesn't have any other distractions, and leave him alone.
Also might consider eventually getting him a little Eee PC or Nokia N810 or OpenMoko device once he gets into it a little more. Install Python or an compiler on it and let him find a creative use for it somewhere with a bit of hacking.
When I was young, we just had graphing calculators to play with, and we'd play with little programs on them in our free time on the school bus or wherever just because there wasn't all that much to do.
I've seen a few other people mention story writing, and I'd second that whole-heartedly. My friend and I first got hooked on programming when we started writing simple 'Choose-Your-Own-Adventure' style branching games in Q-Basic (complete with sqealing PC speaker musical soundtracks).
My friend even got more sophisticated and started creating simple RPGs - random number generators with modifiers for the attacks, variables for vital character stats, etc. They were alwasy *very* simple, but we had a great time, and learned a lot as a result of it.
You should consider using HTML to teach the basics instead of a "hardcore" programming language. HTML can be applied quickly to activities/hobbies that he already enjoys.
What's most important is that your son feels like he's learning a useful skill (being productive) that allows him to create a fun or functional "something" (gives a sense of accomplishment). You should look for ways to increase the positive feedback your son needs to stay interested. That way your son need not subscribe to a 3-month software development cycle to create his first "something cool".
Other options to look into include Flash, AutoHotKey, or other scripting environments.
I began programming when I was 16. First I made simple chatbots and console i/o to learn C and C++. Then I moved on to graphics programming because it allowed me to learn many useful algorithms and data structures. I remember the glory when I got my first pixel on the screen. I began coding demo effects and software 3D engines. Actually seeing self-made things move on the screen provided me with motivation to learn more. Now, at 25, I write ray tracers and little games.
Who is John Galt?
Processing is designed as a programming environment that allows you start producing visuals immediately. In a way it reminds me of 8bit home computers when you you type a line of code and get a line drawn on the screen. No fussing about including headers, initializing structures and callbacks it's all there from the start.
I remember having great fun at moving the tortoise on the screen. That way he'll step into LISP and have a good background.
There are so many reasons not to start with PHP, that I'm not even going to start listing them here. PHP is a HORRIBLE first language, and a horrible second, third or forth language. It corrupts minds, and makes it harder to learn other languages. It's a lot worse than corrupting someone by teaching BASIC as a first language.
You should be ashamed of yourself for suggesting teaching PHP to a kid.
-Don
Take a look and feel free: http://www.PieMenu.com
I would recommend staying away from the low level stuff to start. If he enjoys programming, he'll naturally want to learn that stuff as he gets more advanced.
I got hooked on programming a little different than most people did. I started to make programs for my calculator that did things that could help me out in my math classes way back in ninth grade, I've been hooked ever since. I've noticed in my academic studies that the best students were those that pushed themselves on their own. I believe that these students will be the ones that succeed in the field because they have a natural inclination to want to learn more. So, I recommend to start to get him interested in making a program that he thinks would be cool. Have it a little simple to start off, and then help him do some more advanced things in it. If he enjoys programming, he will want to do some of the more advanced things on his own.
It might be easier to have him start with a Basic-type language to start off with. A modern C-style language may be too difficult to learn the concepts at first, as a lot of beginning students really trip up on OO concepts/syntax. If he can handle the C-style language, why not teach him PHP. It is heavily supported by the open source community, meaning tons of examples and online help. This will allow him to move at his own pace. I would not recommend going with a Ruby or Python for an initial language. The syntax is so different than the C-style that is prevalent in the major languages, potentially not aiding him in his initial studies (also making it more difficult to move on to new languages as other languages do not share the syntax structure).
Provide him with a computer. Provide him with help when he asks (or not, figuring things out yourself is best).
Show him how useful it can be to write programs to make the computer do whatever you want.
If he wants to learn, he will. If not, bad luck.
gamemaker is what got me in to programming. it's very very accessible due to the drag-and-drop functionality, but every drag-and-drop action has an equivalent function in it's interpreted programming language (GML), which you inevitably want to learn when you need to create a more complex game logic than drag-and-drop accommodates.
the thing that makes gamemaker such a good choice imo is that you get some extraordinarily satisfying results after very little time, which for me was encouragement enough to keep using the tool for years and learning many programming techniques which could be applied to languages i have since learned.
I remember the first days of programming on a C64, I could program the heck out of it. Part of it was that you could start so easy, but then under DOS/Qbasic I did a lot less and under the Windows API it died completely. At the time it looked like you needed immense amounts of dark magic just to throw up a basic application. I'd probably go with C++/Qt since it's what I know and I think Qt makes C++ high-level, but no matter what I'd say use all the tools like a proper IDE, graphical dialog designers and so on. There's plenty time for learning the hard way manually later, but now is not the time to learn low-level semantics, memory allocation, programming a layout as code and all that. That's to learn when the interest is burning and he's asking to do things that go beyond.
Live today, because you never know what tomorrow brings
Programming is a means to an end. Ask him what he wants to program, then determine how to go about that, which may not be a direct route.
For (a really roundabout) example, there's a good chance he's interested in video games. Download Blender and turn him loose on that. Eventually he'll need some Python knowledge to put Blender's game engine to use, and probably want to make textures for his models, so GIMP enters the picture.
I started programming at 13, back in the '80s. An older brother had a Sinclair ZX Spectrum and after seeing some of the cool things it could do, I begged him to let me use it too.
The user manual was a reference as well a tutorial (with exercises at the end of each chapter) and I taught myself just by working through that. Admitted, modern languages can be much more complex.
I guess it will help if your son has some itch to scratch, likes to "build things" - even if it has not much value in the world at large. One of my first large projects (after the flashy screens and sounds) was to code an electronic version of a board game. I guess programming is much a solution in search of a problem, and finding a problem that interests your son and will keep his attention long enough to learn something useful is half the battle.
Problem is, with modern computers much has already been done, and a newbie programmer could possible get quite disheartened with what he is able to achieve on his own.
I did some part-time teaching too at a stage, and my biggest struggle always was to find some practical example to demonstrate the use of some or other concept, to try and keep the attentions occupied. Programming seems to be too abstract for many to grasp the usefulness of. When I had to give a small presentation at the start of one year to try to get more pupils interested in taking my subject, I used a Lego Robotics kit (yeah, Q&D point&click programming, I know) to try and get a more tangible demonstration of what programming entails. It certainly was less boring for the kids.... Perhaps also consider some robotics with good old solder and chips, when you son is old enough :-)
Free, as in your money being freed from the confines of your account.
Teach him JavaScript.
Set up Firefox and Firebug, and you have a wonderful console for programming right from the browser. You can do fun animations, effects, and various cool things.
And showing it to friends is as easy as uploading to a host...
I've always found the "SAMS Teach Yourself" books to be very easy to use. I'd say choose a language like Perl that does the memory management etc. Work through the "teach yourself" book, then choose a real life project to apply the knowledge. One can "study" programming as much as you want, but you only really learn when you are doing a project that has some purpose.
My son was bored with my attempts to show him how cool kernel hacking is and I began to despair. Some weeks later he came to me and asked if it would be possible to set up an 'auto-typer' to help in an online game that involves repeated typing of the same phrases. He was willing to get involved in putting the script together because he saw a use for it. He even agrees that our approach was better than just downloading one that does almost what he wanted.
When I was 15, I had never seen a computer, but I knew that I wanted to work with them. The _idea_ of computing, of writing instructions to make the computer do what I wanted, of playing with something that exhibited some of the powers of human mind, was terribly interesting to me. Getting my hands on my first PC, a thing with a BASIC interpreter and graphics! display in a TV monitor, was an intense experience, even if I cannot say why, what clicked inside me. The making of my very first BASIC program, unaided, reading a manual in a foreign almost-unknown language (English) was a triumph. The making of a program that draw a circle on the screen by calculating the distance to the center, was making mathematics come alive for me for the first time.
What I mean is that, in my case, no stimulation was needed, and probably difficulties just added emotion. The interest and emotional attachment to the computing world was immediate and intense. I don't know if I'm a typical case, but my anecdotal evidence is yours for what's worth.
Rome taught me patience and assiduous application to detail. Virtues which temper the boldness of great, general views.
I started by writing scripts for game engines, mods and such. Why? Because it was easy, the community would go "wow, cool" when you did something (ego++;). That taught me the basic concepts, and that it could be fun, then look where I am now, 4 years later, sitting in a room, writing programs all day.
No, second thoughts, don't teach him to program, drinking and sailing is much more fun.
I'm involved in an organization here in Zagreb, Croatia, which works with talented children, and during the last several years we have high success rates: Zagreb children's rankings in national competitions have significantly improved. We don't start with C, not even BASIC. Most of those children have started with Logo.
Why Logo? Simple. It's an interpreter, meaning it's interactive. It features a small turtle which draws on screen. Later on, it features interesting list-based processing functionalities.
When I was teaching, what were my first lessons to the children (as young as second grade of elementary school)? First, you show them how to draw lines. Then how to turn around (in the process teaching them what angles expressed in degrees mean). Then you show them that some commands are repeating:
FORWARD 100 RIGHT 90
FORWARD 100 RIGHT 90
FORWARD 100 RIGHT 90
FORWARD 100 RIGHT 90
So you teach them loops:
REPEAT 4 [FORWARD 100 RIGHT 90]
As you can see, Logo is even better for English-speaking children. Once your child can handle some basic problems in Logo, perhaps even code a small graphical game, try switching the child to something like Visual Basic 6.0 (yes, the fugly beast). I don't have any recommendation within GNU/Linux environment since I'm not aware of any simple enough WYSIWYG development environment like what VB6 provides. Mono and .Net are not simple enough for early teens, in my opinion.
A possible alternative for GNU/Linux might be Python for command line studying, but a child might be happier to develop a calculator or an addressbook, or a simple tic-tac-toe game, for a GUI. wxPython is ok, but only for later studies, when child is already familiar with command line programming in Python.
I've heard of Lazarus, a WYSIWYG GUI IDE for Free Pascal, but I have never had the opportunity to sit down and spend half an hour messing around with it.
And oh yea, Pascal is also a good post-Logo language. However don't run to C. A child has to be really talented in the early teens to be able to comprehend techniques in C. Besides, for a modern era child, there's no joy in scrolling alphanumerics. It was cool for children in 1980s and early 1990s, but today's children are used to GUIs, to Unreal Tournament, etc. If there's any chance of getting them to programming, you need to get them to work with graphics.
Avoid C! He's not ready for it.
scratch.mit.edu should be enough for introduction. It is visual and like building Lego. It contains the known parts of a programming language (loops and tests and stuff).
Insert `fortune -o` here
FWIW, I started by learning Visual Basic in 2000 (I was 18 at the time). Although it's Windows-based and pricey, I was then able to use VBA to write Excel and then Access macros for the company I worked for.
I think I remember Python being used for macros in OpenOffice. If that's true perhaps Python's a good language for those around 18-20 years old who want to stand out in their office-based part-time jobs.
I've recently completed a degree in CompSci and now use Java as my language of choice. Now I have more time on my hands I'm thinking of buying a Lego Mindstorms kit and using Java to make some robots - I'd imagine any early teen would also find that quite interesting! Maybe building the robots described in 'Experiments in Synthetic Psychology' would be provide a fun set of projects?
I'd agree that starting with something providing visual feedback would be a good way to spark and maintan interest.
Craig
C, Lua, and Assembler :-).
But, it may be wise starting him on some XHTML 1.1 first. I started my computing journey by learning HTML in Neopets ages back :-|.
I would like to suggest Ruby and Chris Pine's book "Learn to program"
Curious about PCs, eh? I started crashin 'em when I was 13. In the grander scheme, I'll still a youngen in my mid 20s, so compared to all those sysadmin gurus, I know squat. :P
What did spark my interest around that age was HTML. HTML is an easy language to learn and gives those instants results so many before have suggested. It lays a foundation for your child to build on but can also introduce him to so many other concepts (proper coding standards, other languages to build on such as PHP or Javascript, proper tag closing, browser interpretation, etc) of programming.
Really it'll depend on both what you and your son are comfortable with. HTML is a rather easy language to pickup and has many avenues you can venture down. However, if he doesn't want to be bothered with anything to do w/ the web AT ALL you may try something else...
When I was a kid my mother taught me my first lesson in programming a computer. Back then they used to have these books that has the source code to simple BASIC games printed in them. She said that the secret to successful programing is in typing the program exactly as printed in the book, otherwise it might not work. Of course, I soon noticed that some typos didn't break the program... they just made it do something different. In time I was writing my own programs by recycling and recombining elements from these programs while still thinking of them as somewhat magical. I think this basic approach is quite sound as it parallels the way we learn natural language. We mimic others and learn in a very stimulus-response oriented way.
I would suggested to anyone wishing to learn programming that they start by taking an available opensource program and learn the steps needed to build it from source. Then experiment with tweaking the source and seeing if it will still build/run. Games are perfect for this because the the bug/feature distinction can be very arbitrary.
If a beginner is determined to write programs from scratch, I would recommend learning basic HTML and then PHP. It's relatively easy to write programs that do interesting things in just a few lines with PHP. Also, writing for the web lets you rely on the browser for I/O which spares the beginner a lot of tedium. PHP, like BASIC, may not be the most robust language, but I think that may actually make it a better language for a beginner. It takes years to learn programming anyway, so why not start with something easy?
+1 Funny for you, sir.
Patrick Doyle
I mod down every jackass who puts his moderation policy in his sig. Oh, wait a sec....
I think the right approach is to start with teaching him how to configure stuff himself. Linux only, of course.
Then throw him the Gentoo-bone.
Make sure that you give him a new cool distro, with some cool stuff - that just doesn't work straight out of the box. Something he wants to use, but that quite simply doesn't work as it should. Make sure it's easy to fix, though. Make sure you don't have time to help him more than by pointing at the documentation.
And of course, the kid should have root.
Make sure that each new cool thing is always 'one step away' from not working, but always in different areas.
Kind of fun how quick kids are to learn how to fix stuff, when they want to get something to work.
"Rune Kristian Viken" - http://www.nwo.no - arca
http://www.spacebarcowboy.com/ascii/a-z/a-z.html
and also
http://www.ljudmila.org/~vuk/ascii/deep.htm
That should get him up to geek level in no time.
The lunatic is in my head
Try Alice. It's the 21st century version of turtle:
How young a teen are we talking here? I started on VB in 10th grade and found it to be very easy to get the hang of. I am now a full-time professional programmer, so VB must have been worth something. If nothing else, fundamental structures become familiar in it, and it gives the programmer a chance to quickly see, graphically, the results of his/her work.
I am currently 14 years old. I started my programming days back in windows 3.11 land. For Christmas I got a crappy old laptop that had a broken screen, so I had to hook up a CRT fishbowl screen (why are you wincing?). From there I found a DOS 6 manual and started screwing around with colour boot menus (AUTOEXEC.BAT FTW!). From there I learnt the ins and outs of windows by 'fiddling' (In windows 3.11 I completely screwed the hard-drive during a disk compression error). I only just discovered Linux in the form of an ubuntu tutorial in the Aussie magazine Atomic MPC. This year I started IT and got my first real taste of programming with VB Express, but I had a teacher to aid with that. I'd suggest buying him a 'Programming for Dummies', 'The Complete idiots Guide to Programming' book or something like that to get him started. The original ubuntu tutorial is not on the Atomic website, but there is a new one, Linux for windows users. Look it up at www.atomicmpc.com.au
I took a summer course at a local school. I learned the basics of programming and how to write simple programs in FOCAL (sort of like BASIC). This was in the 1960s. I was 13 or 14.
I would recommend something like this -- a class for beginners that's not part of "regular" school time (and so, not graded or affecting the time he needs to spend doing homework). Summer or winter break would be a perfect time.
There are so many reasons not to start with PHP, that I'm not even going to start listing them here. PHP is a HORRIBLE first language, and a horrible second, third or forth language. It corrupts minds, and makes it harder to learn other languages. It's a lot worse than corrupting someone by teaching BASIC as a first language.
You should be ashamed of yourself for suggesting teaching PHP to a kid.
-Don
To be quite honest, you are terribly wrong, PHP looks alot like C or C++ is syntax, it has somewhat OK OOP (will be even better with php6), yet provides alot of functions for most things, it has tons of interfaces to UNIX-like enviroments and is easy to grasp.
Ofcourse like most languages intended for webdevelopment, it is not optimal for system programming, even tho it provides alot of functionallity for it. I have no idea why you think its horrible, its really not. Want languages that will make it hard to learn other langugages if you learn them first? Look into Visual Basic or Python.
Speaking as a 23 year old who's largely self-taught in programming...
Find out what he'd like to do, give him direction if he doesn't know. I find the greatest hurdle to learning, for me at least, is lack of ideas. Often, I end up programming the same thing first in new environments and languages: a dice roller. It's sort of my "Hello World." That said, while it's a good way to just get something done, it doesn't help me learn much. I learn best when I try to tackle something that's just beyond my level of expertise-- too far beyond, and I just can't do it. Too easy and I'm not learning anything.
Just as an example, say he was interested in writing a program for his favorite game. The first thing I'd suggest to him is working on a functional GUI using the tools of an IDE. There's really nothing quite so satisfying as a really nice GUI; a command line app is often more functional, depending on your needs, but it's just not as satisfying.
Next, you might suggest that he learn some of the I/O tools and add save/load functionality to his program, using simple text files. After that, you could show him some more interesting techniques for saving, like serialization or XML.
Another example: Teach him how to use a database. Start off with a simple database with a couple of tables, maybe a list of customers and a list of items. Then start introducing normalization, joins, etc.
I am 15. I became really interested in computers when I was 13, when I started writing HTML. I then did a lot of TI-83+ programming when I was bored in school, and now i'm learning C++, and basic shellcoding. Your son is already incredibly lucky. My parents take little to no interest in my geeky pursuits. If he can always come to you for help, and if he's already shown an interest, I bet he'll stick with it. It's addicting.
Javascript was my first programming language. It's something everyone's got simple access to, it's very forgiving (though it does set you up for some bad habits), and it's very simple to make GUIs and interact with the user.
You must have learned programming as an adult in college. Those of us that actually learned programming as a kid know what you just said is the exact opposite of what it takes to get hooked on programming at a young age.
Patrick Doyle
I mod down every jackass who puts his moderation policy in his sig. Oh, wait a sec....
Comment removed based on user account deletion
Once he has a solid knowledge of basic programming and if he's still interested in learning more of the basics of how computers work and if you are willing to dedicate quite a lot of time and effort to destroying the social life of your kid once and for all and turning him into a full blown geek I'd recommend that you take a look at a course that has been called "From NAND to Tetris" in which students are given a NAND logic gate and must construct their own (simulated) computer out of that by gradually building on top of that NAND gate. Eventually they end up implementing a simple game, such as tetris or snake in a computer that they build from the ground up.
Here are some links for this material:
A short introduction to the course: http://www.youtube.com/watch?v=JtXvUoPx4Qs
A long introduction to the course (Google Tech Talk) http://video.google.com/videoplay?docid=7654043762021156507
The course material itself: http://www.cs.rpi.edu/news/colloquia/December8_2005.html
Above all else I think you need to be sensitive to your kids needs and longings. Who knows, maybe he will not be interested in all about learning the internals of computers but more interested in the usability and design of interfaces (I know, your worst nightmare I'm sure). My point is, don't push him into a direction that isn't to his liking.
You don't think enough... therefore you better not be!
In college (in between school and Uni in the UK), they taught us Visual Basic 4, I taught myself JavaScript, PHP, HTML and CSS. Then got a job doing full-time VB6. Not only that, but VB6 COM objects loaded by ASP pages, now I do PHP full-time.
I hate myself. Occassionally I look at the Haskell wiki books, and try to learn higher things. In the end though, the British education system and private sector fucked me right up. That's just my experience with those technologies, YMindfuckMV.
Independent from the decision what language to learn, talk to him about artificial life (programming little animats that live in an artificial environment and have artificial genetics). It is such great fun to program little animals running across the screen. IMHO, this is a perfect approach to learn programming:
(1) You can start off simple (without any genetics or physics) and already have fun, then add more and more features to your animats and to your environment.
(2) The concept of object oriented design is very obvious here: each animat is an instance of a class and has methods and attributes.
(3) If you add genetics, your son will develop a natural view on evolution, which in turn will prevent him from becoming a creationist (god willing).
For me it was Basic on the Aster (CP/M), and not much later the c64. However, I remember getting really 'drawn in' after getting the 'feedback' of what my programs did. There's nothing that gives more feedback than Lego Mindstorms robotics; even the old sets (cheap second hands) will allow a very simple (GUI) start, and allow an upgrade path (NQC for example) which could later lead to *nix hacking.
I would not start with writing a game from scratch, many games such as Neverwinter Nights or Tremulous or what-have-you feature a scripting environment and sometimes even an IDE. Starting to write small modules gets you nearly instant reward as you can see the results in the game and teaches the basic concepts of control flow and APIs.
something clever to make me stand out!
I started programming in 8th grade when I learned I could write games on my TI-83 calculator. I found tons of programs written in BASIC for the calculator online and taught myself. Once I had mastered that I soon moved to Java, then C++, Python, PHP, etc... He can also share these programs with his friends at school. I remember at one point nearly half of my 8th grade class was walking around with a hacky sack game I had written (OK not the whole 8th grade class, just those of us in the "accelerated" classes, and don't worry, I never got beaten up or anything). Since nearly every middle and high school kid needs one anyways, it won't be any extra expense for you and it's a simple platform to learn on.
I started programmed calculators when I was in ninth grade! (Last year.) I am teaching myself C++ now, and you are absolutely right, the OO stuff is hard to get used to. I hope to learn PHP soon, (I might start looking into it next year) and as I'm going through C++, I'm starting to learn a little x86 assembly. I hope that I can get good at this, though I probably won't pursue a career in computer science. (Physics has always been my favorite.) I really wish that I had someone in my family that could help me. I think I'm talented, though. I often use programs on tests (mostly to beat the others ;)).
Tell him computers are for grown-ups, and that he'll be punished it you catch him programming before he's 18.
Stasis is death. Embrace change.
Is that when i was younger my dad was desperate to get me to learn to program. Unfortunatly i had better things to do at the time (or so i thought heh) and so never did. Fast forward a good few years and im now a sysadmin. My dad passed away last year and its always bugged me that i never took him up on it, i know virtually nothing about programming but really want to learn (for my own amusement if nothing else). So as a total noob and to tag onto this disscussion what would the slashdot crew suggest as good place to start learning/playing around in this field. Any guidence would be GREATLY appriciated thanks.
Well, Bart, your uncle Arthur used to have a saying: "Shoot 'em all and let God sort 'em out."
Like most others, I agree with starting out with something like Perl, Python or even PHP. If you got him on with HTML, CSS, PHP and SQL, then he could develop web sites quick and easily - what with the web being the most used thing now. The first language I started with was (dare I say it) Visual Basic, as you can make some "traditional" looking MS/Win32 apps very quickly, the syntax isn't tricky at all and the overall feel is very Micrsoft-y. Saying all of that though, I've been playing with C and Assembler for the ARM achitecture (using GamePark Holdings GP2X console) and trying to get involved with the Demo Scene. I've also been looking at 3D engines and low-level libraries as knowing how things work from the ground-up is what interests me the most. I think it took about 7 years of coding in general before I finally found the thing that interests me the most - so see if you can find out _what_ he would like to achieve from his code, and then try to direct him that way.
I've often found that by far the best way of teaching him to do this kind of thing relies on finding something he wants his computer to do for him.
:) )
This could be just about anything - if he likes sports, it could be a sports results and stats database, if he likes RC modeling it could be an interactive application for setups for his radiocontrolled cars. Your only real role here is to ensure he chooses something feasible in a reasonable timeframe (don't suggest writing Quake5
The thing I like about this approach, is that it will teach him far more than just "how to do it" - you can start it with a discussion about how he wants to go about it, to start with which language (pros and cons, quick GUI development vs. old school stuff - basically just see what ticks his boxes) and it'll then take you through the basics of data models, and the fact it'll be useful will keep him motivated. Help him break the task up into little bits, and use the first few to teach him the ropes, and then let him try some on his own.
Make it clear it's his project, that you're there to help whenever and wherever you can - but don't judge. If he wants to start with an Access DB - by all means point out the pros and cons, but it's his toy - let him do it, he should be old enough now to see for himself whether it's "right" or "wrong".
Try NetBSD... safe,straightforward,useful.
I'd recommend Real Basic. You can get really nice results with very little effort or programing knowledge. This gets them hooked. Then as they want to do even more with there programs they will then end up learning all the good messy stuff underneath.
Just show him what you know and show him that whatever you don't know is really easy to learn. He'll probably ask you things that you haven't got any experience in and then you'll figure it out together. He might even teach you something in a few years.
I'm too lazy too look for the source, but I read an article suggesting that the commandline is the best place to start learning. But who cares? The most important thing is that you don't discourage him by forcing him to take a certain path or hide complexity. Peer instruction works the best so if you have the time just sit with him and do something that is new to you too.
Show a man some news, distract him for an hour. Show a man some mod points, distract him for the rest of his life.
Greenfoot looks neat and all, but it definitely has a Java mentality of programming on top of a massive framework that's provided for you.
I'd think simple turtle graphics would be much simpler to grasp at first. The kids need to learn control structures (loops, if statements), variables, etc. before they tackle some huge object-oriented application framework.
It's admirable that they want to teach OO programming early, but let's face it -- there's zero motivation to use OO until your programs reach a certain size (say 100 lines). There's plenty they can have fun doing before they ever get to that size limit.
Patrick Doyle
I mod down every jackass who puts his moderation policy in his sig. Oh, wait a sec....
http://www.alice.org/ I heard about this almost a year ago in a talk by Randy Pausch from Carnegie Mellon University, but haven't had time to check it out. It is supposed to make the learning experience of programming better. Also maybe if you have some first programs written a bit of competition could do no harm: http://www.topcoder.com/ The series of Head First books from O'Reilly also made a favourable impression on me.
This could help you:
http://www.javalobby.org/java/forums/t94728.html
direct link is:
http://www.myflex.org/books/JavaKid8x11.pdf
He can start using strings right away and without learning about arrays.
I know when I was 16 having my friend type his name on the screen and have the computer reply back "Jason is a douche bag" really got me excited to learn the next part.
Tell them their parents hate it. Naturally, they'll rebel!
Professional computer consultant and big time hand holder in the corporate world...
Does your son have a hobby or play a team sport? If so then perhaps a good little project would be to write a program that keeps track of standings for the team. It could be really simple to start and add in complexity as his interest grows...
Something fun that's relevant to his interests shows its value as a tool, rather than a bunch of academic exercises.
While wanting to help your son in his curiousity, I think you shouldn't guide him too much but provide help when he gets stuck or something he tries to do doesn't work.
For me personally, I learned programming by experimenting, doing, my curiousity and drive to do something on a PC often brought me into different fields of programming. It's the curiousity and that geeky drive that made me want to discover more. Often, when I found a good resource on how to do a particular task, it bored me as the challenge got lost. The same goes with having a peer with "all the answers", it makes you shut off your own creative process.
Programming is to me exploration and experimentation, building on past "discoveries" and solutions you've thought up. If you'd want his curiousity sparked, allow him to be creative, think out new things to push himself further and constantly feeling a sense of realisation or achievement. Something that is "your own".
Wherever that's on Linux, some flashmovie, a "hello world"-movie, for some a HTML-page, a clever JavaScript, it doesn't matter.
I think we can keep recursing like this until someone returns 1
It was back in the 3rd grade. I wanted a Pokemon website so I had to learn HTML I did this by using View Source.
Later on I wanted to make an online text RPG. I then learned PHP and MYSQL this time by looking at scripts which I found with google searches and broke them down using php.net.
Now I for the most part have a handle on C++ which I learned both in college classes and with a little screwing around on my own time.
Personally I'd say the kid needs to decide what he would like to program then google the crap out of any problems he faces. If he doesn't know what he'd like to do I'd recommend web programming first. It's pretty fulfilling to be able to show a friend something more than a console program. Not to mention I found compilers, libraries, linkers and all that jazz really confusing when trying to learn C++ on my own.
There are so many reasons not to start with PHP, that I'm not even going to start listing them here.
I think you should, because this is a horrible way to make your case. Although it's true that PHP allows you to make hugely incomprehensible programs, that's no reason to write it off completely. C and C++ allow for even far more rancid hacks, and the only thing I've heard people say about those languages is that it's hard because of the compilation step...
PHP has come a long way since PHP3. Although the typing system is still pretty weak, PHP5 has a nice OO model and Exception handling interface. What makes it great as a first language is that you have very easy access to a visual interface system (html) and that it has a huge library that help you along on the more complicated stuff, with proper documentation. Oh, and it's definitely worse to teach BASIC as a first language than PHP. Let's talk evaluation strategies...
Assuming he already knows how to do "hello world" (in other words, he knows the basic syntax and structure of the language and how to make stuff run), then the next step is easy. I didn't read the other comments so sorry if someone already said this, but the easiest way is to find a project. Something that he'd like to make a computer do for him. Once he has a project, just turn him loose. Show him where help can be found online and answer any questions he has when he has them. Other than that, leave him alone!
Informing people about the scams, shams, and bunk that assault them on a daily basis. http://www.jeremyduffy.com
After weatching and at time helping hime build a few nothing boxes (neon ring counters of a sort) crystal radios etc, I got interested in electronics, that ultimately led to computers which lead to S/W.
I guess to start hime off, try some simple games. HILO Hangman or Towers of Hanoi (for advanced stuff).
All of those can be non-graphical at first using any language such as Perl.
Be sure to explain a lot. At 7, a Nothing Box was just flashing lights until I was told the properties of the neon bulb and a capacitor. Simple explainations will work if the kid has a bent for these things.
-- Many men would appreciate a woman's mind more if they could fondle it
Remember this is about an introduction to programming, not necessarily the nuances of particular languages. PHP may have a lot of 'flaws' from an experienced programmer's point of view, but in this case it would be fine to echo output, do some basic loops, functions, etc. I personally don't think PHP is THAT horrible... messy/poor programming is messy/poor in any language.
This is an interesting environment. You get a 3d environment to play in and prompted programming statements. Although not a "real" language, it would be a good introduction to programming and gives some immediate feedback to the beginner.
http://www.alice.org/
I think you have to want to do it. If he wants to program, he's going to learn how to do it and if he's self directed he'll figure out what questions he needs to ask.
This is my sig.
Force him to learn COBOL and then RPG/400 like I had to!!! That was honestly my first college classes...and this was in 2002 not 1962....hahaha. But the point is, like me, if he's interested he will be interested. Most people would quit if that is how they learned to program but I didn't because I was interested. I would just make sure he has the tools and let him go about it however he likes.
To be completely honest it doesn't matter too much about the language, it's a little bit like choosing the color of the bike when learning how to ride one.
The reasons for choosing Java:
* It's the most used language right now by far.
* There's massive online amount of tutorials and documentation.
* The language syntax is pretty straight forward to grasp.
* Java can be used for writing simpler command line stuff or more advanced complex GUI.
* Java can be used for mobile phones which he might think is cool.
* If he later chooses to study in the Computer Science field, chances are good that they will use Java for teaching.
* All the tools are free (as in beer) and it runs on Linux.
So all in all I think that Java is the most sensible choice, allthough as I said in the beginning it doesn't matter all that much.
Real programmers never comment their code. If it's hard to write, it should be hard to read!
y = sin(x) in Pascal (That was the language at school at the time)
From there, research in non-linear algebra and research support for a supercomputer and cluster - mainly code tuning, optimisation and parallelisation.
.
I would recommend looking for solutions with two key pieces, and an overarching theme. The stuff he is doing must relate to daily life in some way. This can be difficult depending on what he spends his day doing - but if he plays fantasy sports, he should be working up to a program that helps him manage his team / gives him an edge. If he collects rocks, he should be working towards something that helps manage his collection, pictures, etc. If it doesn't apply beyond the keyboard, good luck. Part 2 is similar - it should be something that can be shared easily with others. You put that much time into learning how to create stuff, and your going to want to share it. Impress people, help people, scare people...whatever. Those are the two big inducers though - its got to be stuff that can apply to your life or things that can easily be shared with other people. Thats the bit of heroin high you give him after he gets by the crossfire on the street and the giant rottweiler in the yard - if hes going to get good at programming, he'll be back. This points to web app type stuff usually - from my point of view, you'll get no where fast on the command line - he will find that stuff if hes interested, but the teenage social call will pull any reasonable adjusted kid away from anything so solitary pretty quickly. You have to sneak in some of this creation heroin before your car is out of the driveway for 6 hours every night - if your lucky, for every night he's shotgunning beers and chasing girls, there might be an hour of programming as he beats the hangover.
It might help to see how I was stimulated by my parents to take up programming at an early age.
At 12 years old I started programming at school on a VIC-20. BASIC of course. Although I was interested in computers to begin with, my mother pushed me to do a course. In that time (1984) she already had the foresight to tell me that it would be a smart move. I am still thankful for that after all these years.
Although BASIC seems a outdated choice now, in retrospect, the simplicity and the speed at which results became visible was important to keep me going at that age. This is the reason I would suggest to start simple. Perl perhaps. Also don't try object-oriented stuff yet. It will come later if the interest is there...
The next push was a challenge: A few months later (I moved on to a C-64), IBM was programming a piece of software for the company of my parents. I noted this when it was discussed some time during diner. I remarked that it didn't sound very complex and wondered about the enormous costs that seemed connected to it. They asked me if I thought I could do it. I said yes. My father then said to me: "If you manage that, you earned yourself a printer and a disk drive for your C-64". Around that time, this was a unimaginable wealth for an underage C-64 owner (at least it was for me). I started on it and a few weeks later it was there. It worked, I got my hardware (and my father a huge discount from IBM after he showed them my program telling them that he wouldn't pay that asked price for software that could be delivered by a mere child in his spare time in a few weeks LOL)
After this I went on on my own. During my studies I met some people with the same hobby and that completed my addiction ;-) These people also introduced me to higher languages like Pascal and C++.
At this moment I am a regular perl/ruby/RoR/C++ programmer and still having a lot of fun!
So a good approach seems to be:
1) Start out simple (script?)
2) Set challenges to overcome to keep stuff interesting.
3) Slowly move to higher generation languages.
Programming is a pure intellectual pursuit and can be learned at anytime.
If I could go back into time, I would have spent more time on those artsy and sports subjects instead of locking myself away with my computer code. I grew up to be a lonely and shy person, while the concert pianists, dancers, and athletes had plenty of friends, partners, and much more success in life in general - all because they were much more easy around people.
P.S. Many of those "dumb" jocks I went to school with are now Drs. and Lawyers and engineers; married to wonderful women and have a family.
Dark Basic, fantastic language, with the advantage that using standard BASIC syntax you can be off and writing 3D graphics and games within an hour or two of starting the tutorials.
I agree with the basic premise that a high-level scripting language is a great first tool. No explicit compiler required, and you can accomplish things in a pretty straightforward way.
Just after learning the basics of imperative programming, though, I would recommend a short primer in how microprocessors or microcontrollers work. Registers, limited storage, direct access to hardware, opcodes, and so on.
As it happens, a little while ago I decided I wanted to write a cheesy simulator for a six-bit microcontroller in python. The bytes are six bits, the address space is six bits wide. It all fits on a chess board. http://halley.cc/code?python/octalplus.py
[
Get him a microcontroller starter kit (The AVR is my fav). He's surrounded by computers- they're really not that interesting anymore. For me, the idea of making an IC do what I tell it to is far more rewarding and allows me to practice programming without having to learn a massive operating system environment. It makes a great baby step into programming.
That's what my parents did to me, and now I'm a l33t PL/SQL programmer!
My dad wrote me a multiplication test game for our C64 when I was young (much younger than this kid) and made the screen change colour when you got it right.
From then on I tried to figure out how to change screen colours, make stuff scroll, deal with input... it went from there. Soon I was trying to alter the code for games (the ones written in BASIC anyway, there were a good few) and see what happened.
Whatever it is I advise something that is simple but gets immediate results. That's what turned me on to computing at the beginning - making these wonderful machines do tricks for me, and doing things with them that other people can't or don't even think about.
Oh, you're good with computers because you can know how to use word? Well check *this* shit out!
Don't make him learn Haskell. He'll no longer be your little son but a grown man who can pick up chicks through long discussions about monadic transformers and polymorphic data types during passing period. Keep him daddy's boy -- no Haskell, no exceptions.
Teens have immense power over other teens. There is some sort of herd instinct that can be turned to your advantage. Get your son involved with other teens who are learning to program, hack etc.. There might be a formal teen computing club in your area but if not there may be a way to find avid teens who are computer junkies. Perhaps adults you know have teens active in computing. The garage band type of model for teens learning computing is hard to beat. His schools guidance councilor may be aware of teens involved in computing. Sadly a lot of Windows exposure will be hard to avoid.
Before getting into *nix systems or Windows systems, i think probably he shud be understanding first, 'bout programming paradigms. Rather than restricting somebody to some system or a particular language,the person should be taught on how to tackle a situation, no matter what language he is using.After all, computer languages are way of expressing how you tackle a particular problem and make the computer do it for ya.So,essentially, paltform to platform, the syntax might change, but of course logic remains the same.But to improve logic, he needs to see the problem in a 3rd person view..as in..what he has with him (language) and what he wants to do. Once he gets into that, (atleast, a fair idea of how he is gonna tackle..start by writing out pseudocode)logic will improve.Once he gets the logic,converting that logic into a particular syntax is not a big deal.He will learn the art of solving problems rather than a particular language or a system.
I don't know about your son, but I for one was so excited about programming that I didn't need much of a teacher. If you find the right instrument to get him excited about programming, he'll come to you with questions or figure out how to answer his own questions and lead his own learning path. Of course I'm sure he would still appreciate some ideas and guidance from time to time. Personally, I enjoy game programming. There are free game programming environments on Microsoft's web site if you're not too heavily anti-MS. The modern environments are, I suspect, much more entertaining to use for a beginner than the environment you're used to using. To get started, head to their "explore by intrest" page.
Also, I am working on a more visual (less coding) game development environment (Scrolling Game Development Kit 2), and trying to make it a bit more portable (it might work in Linux someday since I am almost done converting it from DirectX to the OpenGL-based OpenTK library). I think game development is a very rewarding way to learn programming.
For me, I was interested because of my dad, but I never learned any formal language. Instead, I followed music - now I teach Music Technology and am pursuing a degree in the topic for grad school.
Most of the 'programming' I do is through media-centric patching programs like Max/MSP and Quartz Composer - those are pretty light on syntax but still big on programming logic. They could be a good place to start!
While I'll aggree that kernel hacking won't get anyone interested in programming, I think programming web sites is somewhat lacking in motivation. As you were saying, you want it to provide some serious bragging rights.
Whatever you want to do on the web at teen level, has been done before and better. Publishing photos? There are a ton of providers which achieve the same thing. Forums? Ditto. All you need for a good guild web site are webmaster skills or maybe graphics design, _not_ programming. Approaching it from the programming side is the way to get the least bragging rights, with the most effort. Everyone won't go "woot, what an original forum you programmed!", but the more discouraging, "geesh, why don't you use PhpBB like everyone else?"
Personally, looking back at what motivated _me_ back then, I'd say start with games. That was my motivation. I could throw together a game as good as Psion and the gang made for the ZX 81 and later ZX Spectrum, and show it to my classmates and get some serious appreciation. The first game I wrote, when I invited a couple of classmates to see it, they ended up playing it all afternoon. Mind you, it was uber-simplistic by today's standards, but it was as good as anyone could possibly do on a 1K ZX-81.
It was motivating enough to get me started on assembly and converting it by hand to hex.
Nowadays I wouldn't advise anyone to write a game from scratch at home, but there's a _lot_ you can achieve as a mod. And mod-friendly games are getting rather common these days. I can think of a few where most of the game logic (i.e., minus the graphics and such) was Python, one even TCL, and one was scripted in Java.
So basically I'd say, show the guy how to make his own mods. Even if it's just for cheating it's a start.
And the distant carrot of making it big and famous is there too. Both Counter-Strike and Team Fortress started as mods, and ended up major successes.
A polar bear is a cartesian bear after a coordinate transform.
You get both a modern C# style OO language in Vala and a Delphi/Python inspired language in Genie. Both have assisted memory management and both compile to C code and from there to native code (valac can do it in one step). Runtime performance is about the same as for a program written in C++. .NET, java, perl, python, ruby... what's the point? Sorry fanbois, I'd sooner learn javascript than any of these.
I think the main thing is to get more interesting results. I hooked my son by designing the outline of a text adventure, that he had to program in LOGO. It worked. He is a professional now. I think creating an intresting subject is more important than the choice of a specific language.
Sorry for the polemic, but believe me, your son will stretch himself to understand you far more than he will even for the most gifted teacher. What I owe to my parents can never be repaid, and there isn't a day goes by that I don't miss them.
I've calculated my velocity with such exquisite precision that I have no idea where I am.
#include <stdio.h>
#include <stdint.h>
int main() { uint32_t x[] = { 544499015, 1768693857, 1931502950, 2190959 }; printf("%s\n", &x); return 0; }
Check out NetLogo -- http://ccl.northwestern.edu/netlogo/ -- and the book "Turtles, Termites and Traffic Jams". It's fun, it's got GREAT graphics, you get really quick gratification with just a few lines, and the GUI bits are easy and fast. Excellent.
I agree about encouraging the son to program in some high-level language (in which the father is also proficient), but I disagree with your dismissive "it's the same as basic was twenty years ago".
Twenty years ago, the computer had a kind of mystique which is now, if it still exists at all, much less strong. The way society relates to computers now, compared to twenty years ago, is really different. I have the distinct feeling that this is causing there to be less interest in learning about computers because they're much less exotic.
Or maybe just a different demographic is interested in computers --- perhaps the kind of kids who were interesting in computers then, might now be more interested in far-out stuff like nanotechnology, space exploration, particle physics, and genetic engineering, and the kids interested in computers now are more like the hot-rodders/car freaks of then (note: this is not meant to be judgmental of either group).
In addition, twenty years ago society wasn't saturated with exposure to computers running impressive programs like interactive 3D games, or with computer generated movies. A dreaming teenager today must be a bit more intimidated looking at all this stuff when he is starting out, writing "Hello world".
Games are what got me interested in programming. I used to read Creative Computing BASIC games compilations in bed as a youngin'. They had the source code of a game along with a couple of printed-out test runs. I found this an interesting application of programming that spoke to my hobby of video games.
Why don't you write a game with your son? A text adventure a la Infocom, or a slot machine or dice rolling board game?
They can learn Ruby quite nicely using Hackety Hack.
You could also try Squeak if you're Smalltalk-inclined.
What got me interested in programming was video games. I played a lot of Sega Genesis when I was a kid and eventually Doom on the PC. I really didn't start programming though until High School. I started HTML when I was like around 10 years old, but this is not really programming in the true sense. Though I guess it wouldn't hurt to start with something like that. High School I really didn't learn a thing. I learned most of the stuff I know on my own. It was mostly out of interest using books and the Internet. C/C++ and various Assembly languages I am familiar with. I am now in college majoring in Computer Science. I think a person really needs an interest in the subject to take it seriously. But I guess it still doesn't hurt to try. Buy him a book on C or another language. I learned a lot about pointers and memory management in C through an old book my stepdad had.
"Without curiosity and knowledge, the mind is a vast void. Without the mind, curiosity and knowledge are nonexistent."
1) C? Oh dear me no. You need too much understanding of computer science to get on with C - better to use a language that protects you from having to use pointers and the like. If the syntax for setting up an array, for instance, is complicated, he'll try to find a way to solve the problem without using an array, which will just end in disaster.
1)a) Fortran. Fortran is an awesome beginners language - it teaches good programming practice like explicit variable declarations (I'm looking at you, basic) and being absolutely damn certain that the code does what you think it does (I'm looking at you, matlab), whilst at the same time, not being hard and unforgiving like C. It's not case sensitive this means that you don't get into the habit of having a variable named 'i', and one named 'I', and since that's begging for hard-to-find bugs to crop up, not doing it in the first place is good.
2) Find something to do. I spent several years kicking about with QBasic and got nothing out of it. Why? Because I didn't have a problem to solve. Sitting down at the interpreter (or IDE) and not having a problem to solve just isn't productive.
Come up with a good list of problems to solve and algorithms to implement:
etc, etc, etc.
FGD 135
I went in that direction, I'm not suggesting that being the next step in the learning process ... although ...
.
A bit further down the line you might get a gameboy advance emulator e.g. VisualBoy Advance and devkitpro. Nothing beats banging the metal for sheer excitement. Before you know it he'll be writing *new* games for the DS...
Oh, and don't forget to set him some pretty programming tasks like the gingerbread man, mandelbrot set etc....
Andy
I've always found that I'm a terrible teacher, as I don't learn in the most usual way. If I'm given a fact I'll just forget it. Given a theory I can remember it.
Normally I find myself trying to describe why something is like it is (even though these days I consciously try and avoid doing it). I tend to get a lot of blank looks, and people wondering why I don't just tell them the 'simple' version. To me a list of facts is just useless as I would forget the lot!
What I'm getting towards is there is probably much similarity in how you and your son's brains work - especially if you're both interested in computing. Even if you're a terrible teacher for everyone else, you may find you are good at teaching your son. Or maybe not! - my brain works the same way as my dad's, but my brother's does not.
How is Python making it hard to learn other languages? (well, apart from showing how pointless semicolons and fancy brackets are)
WHY the hell would you want to do that? do you want to create a sociopathic asshole or some pathetic geek? in any case, you should be supportive but not a teacher, let him learn on his own. Oh and forget these assholes telling you to tech him basic or ruby. waht the fuck....?!
Why would you want to encourage a child to pursue a major that is being outsourced?
Get him good introductory math books. Get him the SICP book. Show him high order languages like Ocaml, Haskell, CommonLisp.
Just point him to Why's (Poignant) Guide to Ruby. That shouldn't be too boring. I enjoy reading just for its style, even though I already know Ruby :-)
I played with my kids using logo at 3 and 7
You don't have teenage children, I suppose?
The original post makes it sound like he's asking for suggestions on how to make things more interesting for his teenage son (and that he's already explained a bit about the "shell"). Unless his son is quite special, I doubt that formal programming is going to be more interesting for him than something with graphics and user interaction.
If you encurrage him he will automatically think that programming is not cool and stop learning it.
I agree games are a great motivator, lots of visual rewards. The most accessible tool I have seen is a mac environment called unity3d, it uses mono, or javascript, and gets delivers plenty of visual results very quickly.
i have been teaching 16 year old students for the better part of the last 5 years. after learning html about half of them started learning php on their own. (they had chosen an IT career path in the beginning)
it really depends a lot on age and personality, but here are the details that worked for me:
- find a project they are really interested in
- don't teach theory when you can point to possible solutions a kid can acquire on its own
- use the simplest development environment that fulfills the need (otherwise they have to learn to navigate that, too. e.g.: i start my html course with notepad, move to notepad++ after an hour and some move to dreamweaver after a week)
good luck
give them an editor that has boobs in it.
I've recently come across a useful book from someone that goes by the name of John Smiley. Its called "learn to program in C++", and rather than giving you pages and pages of code to type (hello world much?) its structured like a narrated classroom, and its good reading aswell as useful learning, it's helped me more than most C++ webpages have as when i'm normally confused about something it'll be explained in the form of a question from a student. sounds daft, but its useful (and as big as the yellow pages...)
The best way to get a kid's interest for programming is to program something he likes to use. Even though I deal with non-game programming now, that was what originally got me interested in computers at a teen. My father was typing in computer games from old Compute! magazines, and I wanted to learn how to do the same. I also remember a summer course that taught LOGO. BASIC might seem "evil" to a Linux kernel programming, but put Visual Basic on a Windows machine is a good way to do it, or Java.
--
Luck is just skill you didn't know you had.
I just recently started hacking RockBox, and it's a lot of fun. You can quickly go from having a boring MP3 player to doing something unique. It's portable, so you can show your friends, etc.
You're limited to using C, but that way he's got half a chance of understanding what's going on in the machine, unlike with high level languages.
I'd install it on a player, maybe a spare one that isn't actively in use (though it may be an upgrade to the existing firmware, it's pretty slick). Let him see the demos, modify them, and go from there. You could start with simple things like changing the colours or something in the existing programs.
He IS a teenager, isn't he? it is possible to ask him what he would like to be able to do with programming? ;-)
I mean, show him simple stuff, "you think is cool? how would you like to be able to do this yourself?"
But I second the game idea, I also started with games... the first ones being text games or simple graphic animations/stories etc
btw, Teenager?? nah, it's too late... us other here started much earlier than that! lost cause... :-P
When I learned BASIC it had line numbers, GOTOs, and some versions didn't even have functions (just GOSUB). This is a far cry from PHP which effectively retains all of C's syntax.
Yes, it has inconsistent function names and register_globals/magic_quotes are really stupid from a security point of view. But neither of these are relevant when teaching a kid.
Plus, web programming is a much more visible way of using those newfound skills. A child who's learned PHP can write a cool webpage and show his friends. A child who's learned C can write maybe a text-mode executable, but it's going to be hard to pass it around.
what made me learn programing is that i could create things on my own.
lets be honest: programing bore me. yet i'm hacking million of kernel lines every month, coding various things in various languages.
I do it because I like to create stuff. What you need to know, is if he wants to do it and why does he likes. Create stuff? or maybe just likes the programing itself? Or maybe its something else.
As long as something drives you to do what you do, you will like it
I was fortunate to get a computer around a time when "everybody" was getting computers (The Netherlands, late 80's). There were some tax regulations that made it possible to buy a machine by trading in holidays, to a point where it seemed so profitable that many people got one without having a use for it. My dad got one and a friend of about the same age (15 or so) who lived a few doors down the street got one a couple of weeks later through his dad's work.
What happened was I'd try something out with GW-BASIC, proudly showed it off to this friend of mine who then added something new or clever, which inspired me again to hack away, etcetera. In only a couple of weeks we'd learned to program, ferrying floppies back and forth with our latest discoveries. It had a funny mixture of generously helping eachother get better and fiercely competing to show who was the best. It was so much fun and so challenging, I needed encouragement to do anything else apart from programming.
Nearly 2 decades later that same guy turned up as an extern for web development at the company where I was doing a COBOL maintenance job on a mainframe.
"I'm not much interested in interoperability. I want substitutability. I want to be able to throw your software out."
Computers themselves have always been enough to interest me.
In the beginning the thing that drove me away from computers was my father and stepmother controlling every single thing I did with their computer because it cost them $2,000 USD nearly 20 years ago, I absolutely hated being confined like that & I instead got involved in construction where there was more room (for me at least) to grow.
I'd have an extra 10 years of experience, and might have even stayed in school, if I'd been given even a piece of crap computer to do whatever I wanted with or at least hadn't been confined like I was.
Sad part is they'd bought it to be a "business" computer & it just ended up going to waste, fucking assholes. I hate them soo much.
Wanna fight ? Bend over, stick your head up your ass, and fight for air.
How about Alice?
JJ
Why not try something fun and interactive like Processing?
Mr. Period: Nine is the one that's right by ten!
Nine: One day I will kill him. Then, I will be Ten.
Btw, to follow up on my own reply...
Anyone know any good games/playstuff for a 2,5 year old daughter?
I tried some, but all I found were based on using the mouse pointer and clicking concepts she doesn't understand yet.
I was more thinking of things like: Move your mouse and the funny figure is moving around doing funny stuff. Maybe click and it says something or makes something etc.
Any tips?
(btw once she mastered the mouse I will proceed to kernel hacking directly ;-) )
Show him something which gets _visible results_ fast imo.
Get him on Python for starts. There's a good book out there called "Think Python". Its in pdf form right now and will be published in 2009. Its written by a high school computer science teacher who discovered Python when he was trying to teach his students C. The book is a revised edition of another book he did called "How to Think Like a Computer Scientist: Learning with Python".
You can find it here: http://www.greenteapress.com/thinkpython/
Why the hell do you want to encourage a teen to learn programming?! Encourage him to get laid instead!
Those were MY first experiments in programing. I built all sorts of little games in TI-BASIC, a few of which became popular around the school. I never moved on the Z80 assembler, but some do...
IBM created a framework to encourage kids to learn programming, but apparently it's so engaging that big kids who really ought to be working spend their time obsessed with it too. You create a bot class, overriding it's methods that respond to events in the game, and then have your bot compete in battle with other bots. As a side effect you learn fundamentals of Java.
Robocode is at http://robocode.sourceforge.net/ While googling I also found http://robocoderepository.com/ which is a Robocode enthusiast site.
"If you're not passionate about your operating system, you're married to the wrong one."
I'd go for game programming (great way to keep a kid's interest, no?). And I remember reading about a java book for kids and old people... There is also javascript which gives quite rapidly visual results, seems great to start a kid in programming!
Teach him html, css and php.
Spiffy websites impress women a lot more than a hello world program in real mode assembler. Trust me.
Shoes:
http://code.whytheluckystiff.net/shoes/
Try Ruby:
http://tryruby.hobix.com/
William Gibson books.
Garry's Mod.
Jag pratar lite svenska.
Then adopt an Indian boy who already knows how to code.
Like most people at my office, I am a huge fan of the Head First series of books by O'Reilly. A number of people at our office have gone from not knowing anything about computers (we have a number of hardcore theoretical mathematicians) to being proficient java programmers with these books.
-1: flamebait should really be -1: inciteful
As an IT I would NEVER recommend my children to go into IT.
They can 'hobby' it, but as a programmer I would never recommend it to my children. Ever.
That's just my and IMHO of course.
Alice is an excellent, graphical way to learn programming, and is very engaging. I've used it with students from grade school through grad school.
http://www.alice.org/
Game Maker is also a great way to learn programming where you get a lot of the graphics for free. Used to be entirely free, now there is an eval version and a pay version.
http://www.yoyogames.com/make
There are a couple of reasons that it's getting harder to teach languages.
1. Languages are moving away from knowing fundemental coding constructs (loops, if statements, etc) and towards knowing an API. You can't really do anything with a modern language without knowing what the libraries are. I suspect these things are frustrating for the learner programmer. I'd pick something with as simple an API as possible.
2. Back in the day, a junior programmer could write something in a couple of hours that was almost as good as the games, etc you purchased. This is no longer the case. I think it's difficult teaching the basics of programming when no child is going to produce anything that comes close to the games they play or the programs they use.
If I were to try and teach programming, I'd look at something like scratch or Hackety Hack
Good luck.
Training monkeys for world domination since 1439
Strangely enough, the first programming I learned was on a Texas Instruments Ti-89 scientific calculator. I wasn't even sure in what language I was programming in, but I found some games (generally text-based RPGs) and science programs (math or physics) and decided to understand what was going on. Soon I was making my own RPG (never completed it but I learned a lot) and my own math/physics programs.
I won't say this is the best way to learn programming, but everyone has a different introduction, and this one definitely piqued my interest enough to take a computer science class in college (which I loved).
On a somewhat unrelated note, there's a great book that may get him interested in Ruby: Why's Poignant Guide to Ruby. Maybe give that a try.
This space up for sale.
It's probably the most productive language and programming paradigm ever created.
It'll probably blow your mind apart, but youngsters take to it like ducks to water.
The slogan is: Smalltalk makes hard things possible, and the impossible, possible.
If he gets a reasonable grasp of the principles of these, I assure you he can look forward to a very profitable and rewarding life.
In my opinion by far your best bet is something like FreeBASIC (http://www.freebasic.net/) which has a number of advantages as such:
I taught my girlfriend to program using FreeBASIC in a single evening and she picked it up really quickly, even writing her first game (using circles for the objects) over two nights.
With it being BASIC it's quick to get started, but has enough modern features and bindings that it's perfectly suitable for serious work. I've used it for quick prototyping and written quite a few helper apps and utilities for work, and I know others who've used it to write Windows Services without too much trouble.
> How To Encourage a Young Teen To Learn Programming?
Tell him if he finishes the work, you'll get him a purple, season 11, tier 43 sword.
(-1: Post disagrees with my already-settled worldview) is not a valid mod option.
I wonder if there is a modern equivalent to Logo. In elementary school they had us making the turtle draw complex scenes, eventually involving functions and loops.
Sometime after that my dad upgraded to a old world perform power mac. (60MHz, 512MB disk space) and installed a C compiler [probably so he could poke it at some point, not that he ever did]) and gave me a lesson or two in C, before I started coding/learning on my own.
A little before the LOGO writer he tried to show me basic.. but at that point I had little interest.. or really didn't like the line numbers
The real trick is the logic mindset and desire to change the logic. Then you can learn any language once you figure out some of the syntax. However very few people think this way even in the field I find.
Obviously today that's not possible. But I think where you can still produce stuff as good as the pros is in developing a Web 2.0 web site.
I'd suggest getting him started on Ruby on Rails and working through a book like "Ruby on Rails E-Commerce" (exciting title eh!) or similar ones that you work through to build a social networking site.
As he gets into it you can perhaps guide him to other aspects of the system:
If he's got a bit of math geek in him then perhaps look behind some of the data structures especially the ones RoR uses to hide the complexity (eg hashes).
Edward
Bad analogies are like waxing a monkey with a rainbow.
Give him access to alternatives. I was interested in computers, programming, etc... as a kid but I also had access to hardware. I began with Basic / C (coding games) and ended up migrating to coding for PLDs / FPGAs, then to designing audio amplifiers, until finally I found myself in antennas / electromagnetics - I'm now working on my doctorate. Computers are the first introduction to technology, and programming is the easiest to start with, but it certainly isn't the only thing to learn. All I'm saying is to make sure there are options.
In general, I think it's good to find something your son likes and find a programming project that fits. Then go from there.
If he likes PC gaming at all, find one he likes that is scriptable, preferably with a C like structure. Neverwinter Nights & Unreal come to mind immediately, but I'm sure there are many others.
There is a war going on for your mind.
Counterpart 1. Plain old Software - I definitely suggest Ruby. It is easy, fun, cool while it still remains a powerful language. Almost the same holds for Python, although Ruby is way long ahead on the elegance and fun path.
Counterpart 2. Hardware - I agree with ledow. Computer aren't only software. So I suggest Arduino (http://arduino.cc) as an easy way to get into the gist of a (extremely simplified) computer. Let your child stick your finger with DAC, interrupts, serial communication, and let him light some LEDs.
Both the above suggestion are purposefully stated with the "maximum (fun*usefulness)/cost" ratio. Granted.
Determine if he is interested because he finds programming interesting, or if he is interested in knowing what his father does and exploring another way to get to know his father.
'Teenage' can cover a wide range, but we've had fun with Lego Mindstorms http://shop.lego.com/ByTheme/Product.aspx?p=8527&cn=17&d=70
I used to work as a TA in some intro classes that used Karel and Karel++ http://pclc.pace.edu/~bergin/karel.html Kinda like Lego Mindstorms on your screen. It's really pretty cool what you can do with it (make a binary calculator out of robots, for instance). The classes would start with a few weeks of Karel, then move on to other languages.
For me anyway, it's about learning to think and express your ideas via programming, the language is really secondary (i.e. most learn more than one, if they go on in the field).
Stuff like this was fun (for most people) and laid a decent foundation for later.
... How To Encourage a Young Teen to Sleep With You, if the Subject is Female
That would make for a much more interesting read.
JUST KIDDING! SORRY!!!! I SUCK!!
My son, 13, likes the open-source game Enigma. When he discovered that he could create his own levels, he was motivated to learn Lua, the language that the levels are written in.
What was that quote about virtue declining in the young folks? Turns out that it dates back to the times of Socrates.
I hate to break this to you, but the "X is the WORST first programming language" has been a meme since the sixties. I learned to program in BASIC as a child, something the Prophet Dijkstra said would horribly mutilate my intellect. Well, I work at a company dealing with real-estate data, and I write Perl, C, PHP, COBOL, Java, shell, Prolog, and SQL almost daily and do Common Lisp and Python on about a weekly basis. I did several years in research as well as having spent years in industry, and learning BASIC hasn't hurt me.
The key when teaching someone to program is not the syntax! It's helping them find the way that they connect most with the reality of what's going on inside the machine. Assembly is great for this because, except for a few pseudo-ops, you have to directly control the machine to do what you want in a way that is specific to the machine. You have to understand the underlying architecture. But don't think for a second that x86 assembly is elegant and beautiful - segmentation is a clusterfuck kludge.
The benefit of PHP is that it allows someone to do some flashy stuff in a short amount of time. This is partially due to the fact that it abstracts away a lot of menial things, but there are still many "academic concerns" you have to take into account. Efficiently structuring the code is still important. Maintaining state securely is still important. Good algorithms are still important. Properly structuring abstractions is still important. You still have to understand the logic of programming.
No, you can't write the newest first person shooter in it, but you sure can write some interesting, useful things in it. You can show what you create to the world much easier. I have a feeling that would appeal to a teen who is used to Facebook and MySpace and Twitter or any other Web 2.0 site.
In other words, just because you don't like PHP, don't tell others not to learn it. You should be ashamed of your attitude that you are the all-knowing oracle of the programming world.
was at about age 12 in high school with a program where you created a flow diagram in a graphical editor. This would interact with an external device, which might be a lift or traffic lights etc. You could physically interact with the device like pressing the button to call the lift to a certain floor. You'd then see in real time the flow diagram showing which stage the program was at. Maybe some of that Lego mindstorm or whatever its called might be the best thing, assuming you can program that stuff (I don't know for sure). Something where he can actually see what he is programming and how it interacts with the outside world. Reggie
Don't do it!
Logo combines simple programming with rewarding Turtle graphics. Programming gets much more interesting when you can make something nice appear on the screen.
After that, I suggest Robowar a game where you program robots to fight against each other. It combines programming with tactics and graphical animation of combats.
XML is like violence. If it doesn't solve the problem, use more. Junta
Hello world will get old after a while. You need something easy, that can produce something that would interest him. For that, I would suggest either VB, because it is very easy to get a GUI app up and running, Java, or HTML, with php/asp/J2EE, all for similar reasons.
Ages 7, 8, and 9... and they are all very interested in the computer; naturally, for the games. So when they see me programming (usually snippets for stuff on project euler) they are always asking "How can I make a game like WoW?"
The nine year-old is good at typing, and great at reading. I've worked with him on some of the different "higher level lower functional" programming languages that focus on children. He loves it. Though he fell from it when it became somewhat like a lesson and less like a flashy game. I think that, personally, is my biggest hurdle. Teaching without the flash, when I know they need to know the stuff behind the flash first. As they get older, the flash will come, but at least with my kids, they outgrow the "draw a line and the turtle follows it" stuff fast. Also, I have to admit, the oldest may simply not like programming! Which is ok too, I guess. Until the day they tell me HTML is a programming language. :P
Well, if you guys both like math challenges, you should check out http://projecteuler.net./ To quote the homepage :
Maybe you could tackle those problems together ? You could design algorithms together, let your son do the writing and then review his code and discuss better approaches. Also, when you solve a problem, you can access a forum on the website where other users post their solutions. You can learn a lot by comparing the approaches there. And since every user on the site has his or her favorite programming language, you can broaden your horizons by looking at solutions to the same problem written in K, Python, C, assembly language...
I've solved 51% of the problems and they've been great at making me remember some good programming practices.
I appreciate the fact that some people say you should try and steer your son towards whatever discipline he is naturally inclined. However, from your comments I think you would ideally try to push him down the more traditional C/*nix, path, ideally making a *nix systems developer out of him one day. I think there are some excellent projects along these line on the embedded Linux arena.
Purchase an ARM, Power PC, etc development board that runs a 2.6 kernel, and has a vga output. Attach to that a simple breadboard, into which you can easily plug-in things like leds, 7-segment displays, motors, temperature and light sensors. This way your son can see things moving, being turned on/off, i.e. get feedback from the physical world depending on how his software is written; I think kids love that kind of stuff. By playing around with these things, your son would acquire a good range of skills, including C programming under Linux, familiarization with basic electronics components, cross-platform development, a good introduction to kernel-space development due to the writing of simple device drivers, and perhaps user-space development and experience with shell scripting, as you could also have him write some simple scripts or user-space apps to test/utilize his lower-level software.
I know all the above might seem like a big ask, but the benefits I think would be enormous, should the skillset match what you have in mind for his future, and should he wish to pursue such a future. I think the above might be a good, and equally interesting subject as the computer-game route suggested by others, but then again I am an embedded guy.
Alternatively have you looked at any of those Lego things or any other of those programmable toys that are on the market?
A MUD (Multiple User Dimension, Multiple User Dungeon, or Multiple User Dialogue) is a computer program which users can log into and explore. Each user takes control of a computerized persona/avatar/incarnation/character. You can walk around, chat with other characters, explore dangerous monster-infested areas, solve puzzles, and even create your very own rooms, descriptions and items. You can also get lost or confused if you jump right in, so be sure to read this document before starting.
Part 1: MUDs and MUDding contains general information about muds and mudding, connecting to muds, mud etiquette, and some commonly used terms found within muds.
Part 2: MUD Clients and Servers contains general information about mud clients and mud servers and provides links and descriptions of various types of clients and servers that are available.
Part 3: RWHO and mudwho contains basic information about RWHO and mudwho, utilities for getting information about who is logged into a mud at a given time.
Part 4: Servers at a glance contains a more detailed breakdown of the various mud server types that are available. This section is limited right now but will grow with time.
As for the programming background for muds -- they come in C, C++, C#, Java, uLPC (Pike), Python, VB.NET, PHP, etc.
There's no question that unless he's bored, start with scratch. I use it with senior undergrads, and we'll be looking at it in my grad class today. It is easy enough for a child, and you can do enough with it, especially if you add the robotics tools such as the picocricket module for scratch.
https://www.tandfonline.com/doi/full/10.1080/1369118X.2013.808365
Try Alice:
http://www.alice.org/
It's somewhat more engaging that just plain old Basic like we all learned on, and teaches both procedural and OO concepts.
You've hit on something there. I started messing around with computers when I was 12, and got such a kick out of getting them to do the simplest things, like print messages on the screen. And I can't say the thrill of getting one of these dumb lumps of matter to do what I want it to has never really gone away.
I think Python would be an excellent starting point, but the language I would choose for a kid's first taste of programming is javascript. They're already familiar with browsers, and within seconds they can be bossing one around, leveraging all its graphical power.
I would go for Ruby. It's one of the simplest programming languages (you can understand code if you understand english). It could be, however, even better to first learn basic HTML and maybe some JavaScript tricks.
Absolutely. If he has any aptitude for programming, GameMaker will bring it out and get him thinking like a programmer. The next step towards real development would probably be Flash. After that, most other mainstream languages will not be too hard.
"O'Connor, smash the window." "Why me, Bigboote?" "It might be boobie-trapped!" "Oh!"<smash> -Buckaroo Banzai
Buy them a $150 scribbler robot with Bluetooth camera module that you program in Python, and turn them loose on our free online textbook.
Robot: http://www.georgiarobotics.com/roboteducation/products-1.html
Textbook: http://wiki.roboteducation.org/Learning_Computing_With_Robots
Disclaimer: I teach this class, and work for IPRE ( http://www.roboteducation.org/ )
Hey, I learned PHP as a first language you insensiti-Warning: Cannot modify header information - headers already sent by (output started at /home/a9286564/public_html/x/forum/bb-settings.php:169) in /home/a9286564/public_html/x/forum/bb-admin/install.php on line 10
Well for the parent of a young teen, the best way to intrigue a young teen in a topic is to make it forbidden.
BAN your son from programming!
Sure enough soon he'll be sneaking out of his bed at night to code on his own.
Part of the hacker mind is that whole idea of getting noticed, and for me, feeling noticed was getting my stuff out there where it could be seen - i went into user interfaces.
so rather than trying to force-feed him into low level unix hacking, start from the top - set up a http/php/mysql environment and give him something to do like, say, make an app that catalogs the dvd and cd collection.
with that, you should see the "don't repeat yourself" start to come into play - as you start the boring job of entering data, you figure there's got to be a way to automate that, and then you can encourage them into looking at ajax and freedb's web services to auto-populate the fields on cd insert and other hacks like that.
the hack is the short-cut that works better than the real solution, but in order to appreciate the hack (and come up with your own), you have to at least start making the real solution first.
"But remember, most lynch mobs aren't this nice." (H.Simpson)
-- Joe
The worst thing you can do is force it out of him. My dad tried the same thing by pulling his own whatsamacallit-tiny-thing-with-no-nonvolatile-memory-and-16k-ram-or-something. I can sort of remember the word "variable" out of an hour long conversation where he tries to explain the basics. Granted, he did buy me a book and I was reading through it but... what I really needed at that point was just basic "programming" stuff, not methodologies, techniques and correctness tips.
It wasn't until a few years later that I really got into it, I picked it up myself, out of my own accord and I fuelled myself forward. OK, so I was trying to program in a Microsoft Word 97 vb macro utilities but I was young. So so young.
What your son really needs is to find a reason to do it himself. The project needs to be large. My first real program was in C, writing cheats for online games. It was a vast undertaking, including grabbing a http page, parsing it enough to find certain things, calculating the next thing along to do.
The most important thing was that I kept myself going on this part. At this point, if I asked my dad for help, he'd look over something and point out an obvious but anything specific he'd just mutter "I can't remember, I'd have to look it up, why don't you do that?" or something similar. This would be down to simple things such as, "how do I use function pointers" or something.
Well, fortunately I can now use libraries and their documentation and know how to look things up in a grown up "all by myself" way. Unfortunately I learnt through going through every online tutorial on C available. They like to gloss over the why and reasons for doing something but between about 5-10 (following one, looking up the topics in others), they'll kind of explain the topic between them. My desire to work out what's "good" and "bad" in programming seemed to naturally calculate things and work themselves out. Then I learnt the formal approach to patterns, consistency, etc.
If your son is in high school, this would be the perfect time and approach. After the whole affair, everything I ever learnt at all was turned upside down for the better.
Anyway, to your son: good luck and have fun!
If you're a PHP programmer, you're irresponsible if you're not already aware of its flaws, because you have not educated yourself by reading any of the following well publicized articles. Once you understand the flaws of PHP, you can't honestly make the statement that it's a well designed language suitable for teaching programming to kids.
First there is this classic article, Edwin Martin's "What I don't Like about PHP", which goes into detail about the following fundamental flaws:
Then there is the mind-set of the PHP language designers and community, which is deeply flawed. Ian Bicking's "PHP Ghetto" article sums up the problem with PHP's design and community pretty well:
Jonathan Ellis' "Why PHP sucks" article makes a lot of good points and links to many other sites with more information to back up the claim that PHP sucks.
He perfectly summarizes the yapping of the PHP apologists when he says: Basically these all boil down to, "I don't have enough experience to recognize PHP's flaws because I haven't used anything better."
He summarizes:
There is also a lot of great stuff about why PHP is so bad on http://www.ranting-wolf.info/category/technology/programming/php/ including a concise description of why the "Smarty" templating system is such a horribly ill conceive and terribly implemented idea.
And if you're still not convinced the design of PHP is deeply flawed, because language design is HARD and should only be attempted on purpose by experienced people, here's what the Father of PHP Rasmus Lerdorf himself said in an ITConversations interview, quoted in "Why PHP sucks, Part III":
Take a look and feel free: http://www.PieMenu.com
I got a great beginning by learning Flash. This worked well for me because initially, I got immediate gratification from seeing my colored shapes tween around the screen. Once I got bored with that, I was able to make more involved projects by learning ActionScript, which is a very well documented and teachable language. Although it limited you to working in Flash, it gave excellent results for not that much work, and it taught me the basics of programming in any language (IFs, loops, functions) Once I wanted to expand my horizons, learning c++ was easy as pie. It also game me a reason to learn things like PHP, mySQL, and JavaScript, to make even more useful and involved projects.
Hey,
Try DrScheme; learning Lisp is a lot more palatable for beginners in my experience and DrScheme has a wonderful interface. He can have fun with simple programming and making his own algorithms without having to go through all the tedious memorization and syntax that would comes with a lot of languages.
My non-techie mom loves puzzles and is a competitive (and damn good) bridge player - I'd always wanted to get her into computer science, but was never able to because having to think about compilers or calling pre-existing packages would just make her eyes glaze over. I finally broke through with DrScheme - now she makes her own programs to crack those puzzles that are in the newspaper each day (and has no idea that that is programming - she assumes programming means something ugly like Java).
http://www.drscheme.org/
:)
No, seriously. You can write some shit code, and it's not very powerful, but it's easy to do stuff with (just not complex stuff)
I don't like the .NET one, but version 6 learns nicely. It was my first actual language (aside from like HTML).
The thing that's nice about it is you can draw your window and run it. It'll work, but not do anything. Changing properties is also a GUI - no .setVisible(false) or anything like that.
Then, when he's made a window that suits him (take two minutes to explain the basics of ergonomics - ok and cancel go bottom-right, etc), have him double-click a button and explain that this will run when you click, etc.
Very simple to learn and use, and decently useful.
I have developed a truly marvelous proof of this comment, which this signature is too narrow to contain.
The language is secondary. Start by finding something he wants to make the computer do. It could be new indexing for his flac audio tracks. It could be bypassing porn filters ;). Then help him figure out how to do it. Show him how to break the problem down into little pieces he can build from easy to hard. Show him how to find libraries he needs so he doesn't have to build everything. Once he realizes that what a computer does isn't limited by what you can buy there will be no stopping him.
Teach him C++, most current programming languages have the syntax of C, and he will learn an approach to OO. Afterward, he can go with better languages.
The seed of my love of programming was implanted by a BASIC programming course in 7th grade. I never coded BASIC again, but the thrill of it stayed with me and in High School I took a C++ course, received top honors, and declared CS early decision that year.
I wasn't even very good with computers...didn't know DOS or UNIX before college... but the logic of the programming was seducing.
"I only speak the truth"
Karma: null(Mostly affected by an unassigned variable)
I absolutely second what Chineseyes said about not pushing your child.
Anyway, if he is really interested, let him do something that is considered 'cool' by kids of his age. How about the iPhone? AFAIK, that would combine modern development techniques with a BSD base (if he developed on OS X). Probably too expensive and definitely not OSS.
Here's an idea: http://www.alice.org/index.php?page=what_is_alice/what_is_alice It's a great intro to object oriented programming and would probably draw the video game types.
In order to prompt him to program something other than games (and there's nothing wrong with that,) ban Windows from the house and suggest that he install Gentoo. Then he'll have all the source for all the software on his computer at his fingertips. It'd help him find things other than games, maybe he'd develop an interest in a particular area.
I am in the final year of being nominally a teenager, but, since I seem to be on the younger side from what the comments show, perhaps I can share what happened in my life that made me become a CS major.
I used computers since around the age of three, before I'd even heard of the Internet (and before I thought it == AOL!). My personal computer, a budding 486, ran MS-DOS, into which I knew to enter the command "mbm" to bring up a text-based graphical environment my father wrote. From there I would play Math Blaster, some spelling/grammar games, BusyTown, and FireRescue, and that was pretty much it.
However, my father, whose terminal I could see from my seat, used UNIX. I knew this because I asked him why his screen was white and mine was black, and he told me. He loved UNIX, but he refused to push it on me. He let me obliviously use DOS, and then Windows 95, 98, 2000, XP, until I finally learned on my own that there was something better and switched completely to Fedora Core 6 in the middle of high school. Only then did he let me know that he had a bunch of Red Hat servers in the basement, and that he been using this great technology I was just discovering for many years.
What confuses me about the OP's question is that my father, a computer programmer for many years, /never/ evangelized how great computers were. He /never/ taught me a programming language. Even when I asked him to, he refused. Instead, he would always tell me that if I really wanted something, I should go and learn it for myself. I didn't do that for a while; I wasted my time playing games, but all that just built up curiosity on my part. Eventually I asked my father for a copy of Visual Studio, and taught myself Visual Basic. I spent the entire Summer of my first year in high school coding, then I learned C, then PHP, then decided I couldn't deal with PHP's internal inconsistencies, then switched to Python.
My father would never teach me programming, but he was always around to answer my questions, and to read my code. On a few occasions he gave me little projects, one which I remember very well: I basically invented Riemann Sums when I was young to solve an integration function he wanted me to write, before I knew what any of that meant. Everything he asked me to code had a purpose, though: it was always going to be used by him, and so I was really proud that he wanted my help. When I wrote garbage, he called me on it, and I learned how to improve.
My school would never teach me programming, but I found like-minded friends and we competed for who could bring to life the coolest idea. For example, who created a signal strength map of the high school before SKYNET was cool? Right here.
My point is, don't force anything down your kids' throats. If my father had ever tried to sit me down and teach me C syntax, I probably would have just gotten bored. Please remember that everything in life should be done for a purpose, and that it's the end, not the means, that drives everyone. Until programming actually fulfills some need that your child has, he's not going to waste time learning it. This need, of course, can be personal satisfaction as well :)
How cruel! Why would you want to do that?
But... if you insist. Sell your house. Get some land w/ a cave, a deep dark cave. Move into the cave. Don't buy any lights for the cave!! Just a really big computer monitor. Then... promise him a big allowance if he studies hard. When he does... send his allowance to India. Oh... and absolutely forbid him from any social life. Maybe homeschool him.
Keep doing this until it's all he knows and he'll just naturally fall into a programming career.
Moffett's Ghost
Hey it worked on me when I was a kid!
"MIT betrayed all of its basic principles."
Remember that many of us are self-taught (at least to some extent). Answer his questions. Show him what's possible, but don't lecture. Let his interest guide you and support what he's doing rather than trying to direct the process.
The stuff you're interested in (i.e., kernel hacking and the more advanced aspects of the shell) WILL bore him - at least until he needs to use them.
And ignore everything that anybody here says about picking a language for him. Tell him that there are lots of languages out there. Some are good for building some types of programs and others are good for building others. Let him sort out which one he likes best.
I am also a teen programmer who has only just started learning, with C. Although I am interested with computing and what a career programming what really got me hooked was games. Although it will be a while before I can write anything good, Ive written a few Pokemon style battle programs as they are easy and simple. I use a really informative book "Absolute beginners guide to C" which you can get on Amazon. Your a programmer yourself so it at least if h has any questions you should know the answer where I just had to keep trying until it works.
You should let him decide! Don't push him, let him come to you and ask... Maybe it will catch on, maybe not! If not, just accept that we are not all born to be hackers, programmers or whatever our parents wish...
Just make sure you answer his questions regardless how simple they seem...
Having now read more messages in this thread, I think too few people are mentioning specialized description languages like PovRay or even game description languages. Probably a lot more fun than trying to do a fractal in basic nowadays...
Non-Linux Penguins ?
I remember I was 9 and a family friend wrote a very simple BASIC program for me that involved an if statement that was based on user input. I felt it deep for the first time that computers can make decisions. That was the turning moment for me.
Since I was also interested in math, I had a moment of extreme excitement when I wrote a program to convert numbers in different bases.
A mixture of math and programming worked very well with me, i.e., one fueling the other.
here
let him learn assembly, just as I'm sure you probably would have, only this time he has these handy things called system calls for useful things :)
programming from the ground up will help his knowledge of how computers work also, so when he codes in c, he can know what it's actually being compiled into.
Get a programming environment that shows satisfying results, whatever that might entail. Web platform maybe? I made many command line games with BASIC when I was first starting out in lonely lunchtimes at school (I never had a computer at home til the last year of high school but when I did I went from Pascal to C armed with a tonne of Apple GUI programming books, and wrote myself lots and lots of Mac programs. After a brief detour through university-level physics I eventually did a Comp Sci degree and was in the majority of snotty geeks who'd already learnt C by the time we came to study it.)
Oh and don't put too many expectations on your son. Encourage him but if he's not wired the weird weird way that programmers are, he's not going to stick with it of his own free will, staying up all night just for the joy of making something WORK.
If you're going to pursue this dream for your son, I suggest the "stage mother" approach. Force him to program, drag him to computer conventions and force him to take computer classes, and when he starts to cry tell him you're going to put his dog to sleep if he doesn't perform. It may sound harsh, but if you're ever going to exploit and live vicariously through your kid. It's the time-tested way.
Granted, to date, it's mostly been used for singers and actors. But there is no reason it couldn't work for other professions as well. Just be careful to dodge the whiskey bottles when he gets older.
SJW: Someone who has run out of real oppression, and has to fake it.
Alice
http://www.alice.org/
Turings Craft
http://www.turingscraft.com/
These are both great tools for beginners. They are set up in such a way that each discovery or lesson the programmer learns it encourages them to dive deeper.
The teaching resources are already out there. Maybe a bit heavy for a kid learning the ropes but he doesn't have to cram a course into 15 or so weeks.
My concern would be that if I just let him do a project that he wants to do he may not learn the overall picture. Maybe I'm wrong but I'd sooner have a rounded understanding of what's all there. I recall as a n00b with a fantastic Vic 20 that I just did what I wanted to do without following that fine manual page for page and while I learned a lot I also missed a lot. it wasn't until I got a C=64 and some intermediate programing guides that I found that some of the stuff I was doing was doing it the hard way.
But I didn't have anyone who knew how to code to help lead the way either. I was really in the dark with a candle, trying to find my way around.
Dedicated Cthulhu Cultist since 4523 BC.
I am working on a book based on the programming curriculum at the North Carolina School of Science and Mathematics. It addresses programming from the LINUX viewpoint using Python then DrJava. The intended audience is a bright, creative person (especially a teen) who wants to learn how to program.
Show him PC demos. The art, the music, and the code behind it will inspire anybody. Give these a shot:
Second Reality by Future Crew
Panic by Future Crew
The Good, The Bad, The Ugly by Surprise! Productions
Crystal Dreams II by Triton
There are tons of videos of demos for the PC, Amiga, C64 on YouTube and from pouet.net if you can't actually run some of these older ones.
Set up a simple OpenGL/OSG/Direct3D/etc. framework for him and show him a few quick ways to modify it. If he's at all interested in programming, he'll figure the rest out on his own. The key thing is that he needs something that shows him the "fruits of his labors" quickly and easily. I started with Logo myself, but I think that current 3d APIs have become sufficiently sophisticated that the basics can be done with relatively little knowledge of programming or 3D graphics in general.
Find 4 or 5 games that have SDKs readily available. Figure out which game he likes, let him play awhile, then show him the SDK. An old Neverwinter Nights game is what got my son interested. The game was only semi-interesting, but once he realized he could manipulate the game and create something different, he was hooked. He wanted more power and control over his environments, so he moved on to more powerful languages which gave him what he wanted. Presenting a curious mind with many interesting (to him, not you) problems to solve is the best way to encourage learning. Starting them out with a simple toolset (the SDK) and letting them work their way down seems to work extremely well. The best part is, they will naturally work their way down when they are ready, and they learn that all the various levels have their uses. Assembly, C, C++, and PERL are all just tools and all have appropriate and inappropriate uses.
I'm surprised no one has mentioned Scratch yet. It gives quick results and teaches the basics of program flow.
See my Home Theater
Programming's days are numbered. Do you really think people are going to be hacking away at procedural code in 20 years? I don't. I have my thoughts about the direction things will take, as do others. But I am sure that we will rise out of this procedural "programming" rut.
Don't teach him anything. Really.
If he's worthy hacker material, he'll figure shit out. I know I did, and I didn't even have the benefit of the intarweb tubes.
If I had a dad telling me what to do back when I was 12-13, I wouldn't have experienced the thrill of figuring out shit by myself and prolly would've lost interest.
A lot of people mentioned how they started off learning to program on old 8-bit machines. Why not just go to eBay and grab one of those? I have several Ti 99-4A computers, a Commodore and a couple of Tandys, with the odd Timex thrown in. My kids picked up the instruction manuals and started hacking. They are 7 and 8, by the way. Once I showed them sprites on the TI, they were off and running.
All that is necessary for the triumph of good is that evil men do nothing.
Hackety Hack, is a Ruby- and Mozilla- based environment used to teach programming.
"A seven lesson tutorial guides the newcomer through the basics, which involve simple activities like asking for a name and printing it out, and more complex ones like writing your own blogging engine and downloading files from the internet."
A teenager might warm up to that.
If the kid is interested they will start learning more.
The best thing you can do is help them get set up in whatever language: Show them how to get the editor running, write a simple program compile (or whatever) and show them how to run it. Hand them an introductory guide (one with some type-in examples would be a good start) and let them go at it for a while. Answer questions but also keep it simple till they get the hang of it.
If they get into it you will see the complexity level of questions jump (usually they thought of something that they want to write themselves), then you can work on getting better ideas and practices in their head.
"Enjoy what you're doing! If it becomes drudgery, you're doing it wrong!" - Jim Butterfield
I just graduated with a computer science degree and know that the best language to start with is not easy to find. There (as seen above) a million different opinions about this and so far no correct answer.
My suggestion is keep doing what you have been, just back off a bit and let him find his own niche. Guide him, talk to him, please explain to him that the outdoors and friends are important too! Natural light is a good thing and socializing will increase his chances of meeting someone to spend his life with without a last name of *NIX.
Ok back to programming. You have already done the correct steps because he is interested. Talk to him, encourage him to learn all platforms because knowing Microsoft and Apple will make him 10x more $$ out of college. Being well rounded will come with time, you have already sparked his interest, good job!
Wow, I am scrolling through all these PHP, Python, C++, blah blah blah posts, thinking, how did I get into computers? Right, eight bits!
Buy an Arduino, or a Boarduino. Buy a cheap Atmel compatible USB programmer. There are lots of great tools out there to get you doing very simple stuff very quickly.
For a teenager, blinky lights are just one step away from POV imaging. Add a cheap accelerometer and you have controlled POV. Add a magnetic sensor and attach it to the wheels of his bike and when he (or she, dammit!) rides at night their wheels will make pictures!
Python! Bah, I laugh at your silly snake.
Hi there, I just graduated from high school this spring, and am going to college (a good one, don't worry) this fall as a computer science major.
I got into programming because it looked cool and interesting. I took a basic 3-week class in Java one summer, realized what I was getting myself into, and thought that the logic part was actually pretty neat. In addition to that course, by now, I've taken my school's only programming class (AP AB Comp Sci... Java) and have done two independent studies, one in Algorithms (SO DRY OH JESUS) and one in Game Programming, which was a lot of JOGL, ray casting, etc., which was pretty fun.
What I want you to take away from this, though, is that the whole thing was very much of a self-motivated exploration, which had absolutely nothing to do with my parents, whether they loved it or hated it. They could care less.
You have to leave your kid alone, and let him do the things that he wants. He HAS to take programming classes in high school if he wants to do it in college, and he WILL if he wants to do it ever. If he doesn't take a class, the apple fell too far from the tree. If he does, he'll probably get pretty interested, and then he'll start coming to you with questions and advice on his own explorations. Pretty soon, he'll know all this extra linux crap, and be the cool kid in school (well, at least, as far as us nerds are concerned), and all will be jolly well and fun.
But, the worst thing you can do is try to force knowledge down his throat :)
I hope all goes well
As others have noted, finding a problem that he's interested in solving is pretty key. If he's interested in games, help him find a gaming project. Something else I'd consider, however, is some kind of basic robotics project. Get him a kit that he can hook up to his computer and use a BASIC-style language to control. It sounds like he's already inclined towards "geek" projects, and this gets him both some software and hardware experience in one go, and he can see three-dimensional results of his programming.
Especially if he's competitive topcoder may appeal to him.
It has alot of practice problems which are hard enough he would need to learn something, and he'll have a score as some feedback.
i would find something that he likes, whether it be a game or something and encourage him to build something for it. for example: any online multiplayer game, try to find ways to manipulate data being sent to the sever etc. then build a client or something ( like a trainer, most "lower end" games are easy to manipulate ). this teaches alot of things at once while peaking an interest into the 'backend' of things. some people might say that's rather advanced but, would you rather risk the complexity of the challenge with something that they like or start with something they have no interest in.
Quote SimHacker "PHP is a HORRIBLE first language" -> how? if you're learning the fundamentals: while loops, variables, if-then-else and the basic logic for functions, any language is good even, dare i say mIRC scripting.
there's plenty of routes you could go, if you son has an online clan ( i don't believe his age was specified ), i would defiantly try to teach him php for his clans website or something. i mean, nothing is more rewarding to a kid then to have something to show for what they've done.
as a programmer for 10years with a son on the way, i would try to do any/everything to build my son's confidence in himself and believe it or not, this is a very good way.
you have to find something that he's interested in. you can go over a million c++ tutorials but, if they don't have a set scope for something that they are interested, there's nothing to inspire them to continue.
- sean ( threeZ )
I had a TI-89 graphing calculator and tigcc ( tigcc.ticalc.org ). It's a great way to learn C. You can crash your calculator all day long at school (which is great debugging practice, it also provides motivation to go home and fix said bugs at night).
Lots of kids do games, or teach their calculator how to be a little better at math ;) Of course, I'd encourage making simple games, and maybe working up to a 3D rpg :)
It seems to me that the youth of our (US) society respond best to that which is instant. Instead of having him spend two hours trying to compile something that will return Hello world!, start him out with web languages, where he will be able to see the results, and modifications immediately. By learning some interface coding (HTML, JavaScript, PHP, etc) he will open doors that could lead to a number of places.
He may become fascinated with web infrastructure, or databases, or routing, or security, or more complex programming. Working the web would also allow him to persue other passions - for expamle, installing and configuring an OSS CMS, then tweaking the interface for a local skateboard park or chess club or whatever. Social networking web tools might be a fun place for a kid to start hacking.
The key is to keep it simple and instantly rewarding in the beginning. And what will give a kid more cred with his buddies - building an app that figures out phone charges across time zones (exercise 2, after Hello world! in my 101 class) in C++ or really pimping out his MySpace page? Had I started with C++ I would not have gone much further. But that's me. Some of y'all are crazy that way.
Have a look to hackerteen project: http://www.hackerteen.com/ What's hackerteen Project: "Hackerteen is an educational project that trains teenagers to work with computer security. With an innovative and fun methodology, young people learn how to protect companies - not to break into them - while reducing time spent on computer games, MSN and MySpace."
I'd also be especially interested in what younger people think, in particular those who are currently in college or high school.
Sex.
They think about sex all the time.
factor 966971: 966971
How about writing a little graphical application with QT designer, that way you are cross platform and up & running in no time.
NWScript as part of NWN1/2 is a very compelling structured "language" that teaches good technique while allowing for instantly gratifying results. (good for teenagers!)
The Orange Box (from Valve) includes the Source SDK that's free and allows for a tremendously powerful FPS development environment that again, can produce instantly gratifying results with a huge online community of support.
The basic concept here is that you can show someone a game (NeverWinter Nights, Team Fortress 2) and then show them HOW they can produce such a thing themselves using the same tools the developers use.
If I were a teenager again, these would definitely grab my attention for longer than 30 seconds.
As lame (or awesome) as this sounds, get him to do some basic web programming. I know it is mostly just markup stuff, but to do anything complicated or cool, you have to get into the code behind or JavaScript or whatever.
The benefit is, that you instantly see what you just wrote. Sure it may be basic and not really do anything, but it is there on the screen and he can say, "I did that". After the initial learning curve, it is pretty easy to be able to churn out a blog, or a calendar / datebook, or photo repository. A simple program like that will introduce him to the basics of what programming is all about.
Hell, it beats copying 1000 lines from a BASIC book to create a text based game. Ahh, memories.
If he likes that stuff, it won't be a large leap to get into some of the more difficult languages like C++ or C# or Java or whatever. That's when the real fun can begin.
-Mark
Dovie'andi se tovya sagain.
i would find something that he likes, whether it be a game or something and encourage him to build something for it. for example: any online multiplayer game, try to find ways to manipulate data being sent to the sever etc. then build a client or something ( like a trainer, most "lower end" games are easy to manipulate ). this teaches alot of things at once while peaking an interest into the 'backend' of things. some people might say that's rather advanced but, would you rather risk the complexity of the challenge with something that they like or start with something they have no interest in. Quote SimHacker "PHP is a HORRIBLE first language" -> how? if you're learning the fundamentals: while loops, variables, if-then-else and the basic logic for functions, any language is good even, dare i say mIRC scripting. there's plenty of routes you could go, if you son has an online clan ( i don't believe his age was specified ), i would defiantly try to teach him php for his clans website or something. i mean, nothing is more rewarding to a kid then to have something to show for what they've done. as a programmer for 10years with a son on the way, i would try to do any/everything to build my son's confidence in himself and believe it or not, this is a very good way. you have to find something that he's interested in. you can go over a million c++ tutorials but, if they don't have a set scope for something that they are interested, there's nothing to inspire them to continue. - sean ( threeZ )
Pascal was intended to be a learning language and I consider it to be quite good at it. It enforces good programming practice while at the same time it "spells out" things, which makes it easier for kids to understand. For example BEGIN/END brackets are easier to grok for kids than {}, showing the principal of code blocks better.
Give him a game that's written in an easy scripting language and let him play it for a while. Then show him how to modify code in the game to cheat. Hey, it's how I started...
...near instant gratification for the first steps that he takes. Whether that means console programming, or working within another prebuilt environment - few folks at that age want to invest weeks and weeks of time without seeing an immediate (or near immediate) payoff.
Once he's hooked - on the control, on the ability to do whatever HE can do - let him take on the more advanced stuff that requires an investment of time or resources.
Finally, make sure the tools he uses and the environment he's working with are *preconfigured* for what he wants to do. Don't make him figure out what patches need to be applied, or what directories need to be in his path - make sure, again, that it's easy for him to begin.
(I guess my advice is to treat it like a drug. Make it REAL easy to get hooked, then make him work. ;))
My reality check bounced.
I have a fourteen year old son, and I can not get him to put down Head First C#. It may be a little old for a younger kid. It is the only book that I have seen that guides you through so much hands-on programming and problem solving, which in my humble opinion is the only way to learn how to write code. He wants to learn video game programming, and I think the promise of writing real video games (here and here) is keeping him going. Which is surprising, because he is quite the ADHD kid most of the time.
Recapitulate phylogeny and do for programming what the Rennaissance did for medicine: Institutionalize open source for anyone who can afford the education, drive the charlatans (including Microsoft certification) beyond the pale, and stop wearing funny bird masks in times of pestilence, plague and peril. Train a generation of mothers that "My son, the programmer" means something good.
``Tension, apprehension & dissension have begun!'' - Duffy Wyg&, in Alfred Bester's _The Demolished Man_
We picked up NeverWinter nights. Its all written in C++ and comes with scripting tools and editor so you can produce your own content.
From here he started with basic scripting tools and self taught himself almost all of C++ using the game as a backround. Now at the age of 16 he and I have taken c++, perl, and visual basic classes and he just picks up on the concepts of each very quickly.
His suggestion to me was to install and program for NWN so that I could get the basics down, because I suck at programming.
Learning the first programming language
will take quite much effort especially when you are still teenager with limited understanding of mathematical/engineering concepts. Therefore the first language should be easy and there should be fast positive feedback which motivates to learn more.
Suggestions:
Teach him to program some graphics effects, this way he can get instant visual feedback and see how changes to code affects to results. There are plenty of tutorials for coding traditional demoscene (www.scene.org) effects.
I started with Turbo Pascal and C++ when I was ~ 10 years old but for total beginner I would suggest learning Adobe Flash or creating Winamp visualizations (some plugins are scriptable).
Another suggestion would be to try to create chatterbot. There are simply mark up languages (like AIML) which can used to 'program' chatterbots.
Creating something from scratch isn't that easy either so at the beginning there should be working version which can be changed to see what effects it have on the results.
..., which runs only some programming language and tetris (in text-mode of course). He will have no choice but to learn programming. ... or grow out of computers and become non-nerd.
It's a win-win
How I got into programming was probably the easiest and best way for a kid to do it. It started off with my favorite PC game called Duke Nukem 3D and there was a simple map editor. Although it resembled more among the lines of autocad; there were still objects with parameters that you set but it was all relatively simple and object oriented with minor event driven programming. It definitely would be a great start because it would allow him to start in an area where he enjoys it the most; and its not strictly text base coding like most people are suggesting; Kids won't want to do that. However, finding something similar to that now a days may also be a little more difficult; I'm sure if you look around you can find something similar. Have him start creating his own games or maps that he can play in (also try maybe making a flash based game with him) those are easy and won't take long. See if further down the line his school has a technology preparation course or special computer courses that he could attend if he feels he likes it. And keep in mind he's a kid and keep it fun!
What started perking my interest was creating a video game mod (Specifically Battlefield Vietnam). At first it was just maps, then I wanted to insert bots, then... My interest kept growing. If it wasn't for that first HTML book I might have gotten into some of the more advanced mods, but I swore that I would never go farther than changing .config files. When I got to college and I was forced to take a programming course, I really enjoyed it. In the end I graduated with a degree in Computer Engineering (Couldn't go full software, too boring :-). If it wasn't for BF:V, I probably would have been a music major (not a joke, I was seriously considering it).
If he wants to do something specific on the computer ("Hey dad, I want to make my own video game" or "Hey dad, do you know how to make the PC run faster?") then you can do some code. Learning code for the sole purpose of learning how to program is useless and counterproductive at this stage in life.
The moral of the story is this: Find an end result that He wants to do. It might be as simple as Forge on Halo 3, his own OS, or even a go-kart, but it has to be his idea.
if he enjoys music as well, you can do a small project (that I've been meaning to do, but never have). you make make a plug-in visualizer for your favorite music/mp3 player. from what I've seen, they can range from very simple, to very complex (open gl, etc).
- Moving pairs
Given something like a checkers board, moving pairs would be checkers
paired together and arranged on the board
Given something like a checkers board, moving pairs are checker pieces
said to be paired.
The pairs don't have to be next to eachother.
Any way arranged is fair for how this works, but it matters for how they work.
There's no such thing as an empty space.
They are the idea of how they move, and the problem with finding how
to move them.
- Moving a pair
Pick a pair to move.
Each of the pair is to move together at the same time.
A pair can only move to another pair.
A pair moves to another pair, and each of the pair becomes paired with
each of the other pair. So now both pairs are new pairs, with the
pair that moved to another pair not being a pair anymore, both of the
pair to move
becomes a new pair with the pair that has to move for where they move to.
A pair moves to another pair, but the other pair is what moves away at
the same time.
A pair moves to another pair, the pair it moves to has to move at the
same time to another pair. So when moving a pair to another pair, that
pair has to move too.
So the pair to move to another pair becomes a new pair, each of the
pair to move to another pair
becomes part of a new pair with the pair that they move to. The pair
they move to is the pair to move
to yet another pair at the same time.
You can't know what any pair's first move is until you know it's last move.
There's nowhere to think in the way moving pairs can move how it has
any inbetween to stop moving. It's always that a pair moving is making
another pair move, and is having a pair move it.
For any pair there's always one way to move it.
To think of pairs in the middle of moving is to think of needing to
know the end and beginning at the same time. Because the pair is
moving when a pair moved it, and is moving another pair where it's going.
When a pair moves it's what is moving away from what had to move it,
and is moving what needs to move at the same time for where it's going.
Each time a pair is moved, all the pairs involved in moving are
alternated as pairs.
You can't know how a pair moves, it's to figure out as the problem
they have. The last pair to move has to be discovered before the first
pair to move has a place to move.
The answer to how to make a pair move is to find how to move the pair,
that goes to another pair and becomes a new pair, and carries on until
a pair goes back where the first pair left. That's to know the place
a pair can move.
All the pairs have a way to move, but may involve more or less of the
other pairs to move at the same time.
So a pair can be moved, but it's to figure out how to make it move.
So thinking of how a pair moves is to think that a pair is where it's
at to start, then the pair moves to another pair, the other pair moves
to another pair and now the first pair to move is not a pair together
anymore but now each is a pair with each of the other pair where they
moved to, and at the same time
the last pair to move is where the first pair left, and that the last
pair moved to the beginning had a pair move it where it can move to
the beginning and is now where the first pair moved from had another
pair move where it left but each is it's own pair. So when a pair
moves it's for there to not be a pair where they move from anymore,
but each of a pair.
So a pair moves, it moves to another pair, that pair moves to another
pair, and a pair moves to where the first pair was. Each time a pair
moves, each of the pair becomes a new pair
with the pair it moves to, and that pair goes somewhere else.
So for a moving pair the idea is to just find how it can move, it's
for the way it can move to be figured out by how it can leave to
another pair, to make that pair move, more pairs move
to ma
PHP is a HORRIBLE first language, and a horrible second, third or forth language.
Even Forth is a horrible forth language
I would recommend processing: http://www.processing.org/ It's been described as "Java with training wheels" but I think its strength is that it demonstrates programming concepts in a visual way. A person can have a nifty animation up and running in no time. It's a very short hop from Processing to Java. I would also recommend ActionScript. It's finicky but it will give a newbie cool results quickly, and then they're hooked.
For every X lines of code he gets to watch Y minutes of porn. Be sure he has lots of pizza, Mountain Dew and kleenex.
"You'll get nothing, and you'll like it!"
Initially it was the idea of programming games that caught my eye back when I was in middle school/high school in the mid-late 90s. I started off making simple games in Basic which provided a great environment to learn the basic. I later graduated to C++ when programming became more of a fun puzzle/problem solving activity than just a means to create games. There are now several pseudo programming languages out there that are specifically geared towards learning programming concepts and creating games. Depending on the age of the child these may be appropriate or they may be too simple.
Most languages dont give much back quickly. You need something that will catch and hold their attention. 3D graphics and Robotics are cool to kids (and many of us geeks) and actually not that hard to break into. In fact both are used very effectively to introduce middle school and older students to programming - even high level stuff like AI (or autonomous behaviors). And the links below are Open Source!
Check out Alice.org
"Alice is an innovative 3D programming environment that makes it easy to create an animation for telling a story, playing an interactive game, or a video to share on the web. Alice is a teaching tool for introductory computing. It uses 3D graphics and a drag-and-drop interface to facilitate a more engaging, less frustrating first programming experience."
Or how about Robotics?
Myro and Institute for Robotics Education
or its pure python predecessor Pyro Robotics
I haven't read anyone state the obvious... at least for me.
My first contact with a computer was, fortunately, my first contact with a programming language. That is, LOGO.
I would strongly suggest you give a look at Starlogo TNG.
StarLogo TNG is real graphical programming in that you create programs by stacking boxes together (each box representing a different instruction like, if, then, while, etc). And the result is a 3D Turtle (yup, our beloved Logo turtle) moving in a 3D environment, which can also be modified.
Regards.
Ubuntu is an African word meaning 'I can't configure Debian'
I'm 22 years old now, entering grad school in computer science and I knew I was in love with computers since I was 8 years old. I started programming at age 7 or 8, in BASIC. My mom picked up a BASIC manual, learned the language herself and taught me what she learned (out of family rivalry really because at the time I was the only kid in the family who wasn't a self-proclaimed computer expert). Since then I've been enthralled with computers and algorithms and I'm doing very well in school as a result. About a dozen people in my class also started programming well before the age 10 as well, so it's a relatively common thing. If you can do basic arithmetic and reason about complex or abstract things at that age, you can program to some degree.
Teach him C. Teach him a manly language. Show him how awesome low level programming is, like kernel hacking, or osdev.
Since you said he is a young teenager, you might try the MIT Media Lab's Scratch project: http://scratch.mit.edu/
I first got into programming with the TI-83+ calculator (with included manual).
It's much less complicated than other computer-based languages and its TI-BASIC language isn't OO so it's pretty straightforward.
Heh, but that was maybe 7 years or so ago...so who knows?
Might I suggest http://www.robotbattle.com/ or similar type game? You use the scripting language (very similar to C? I don't remember) in your text editor of choice to program robots to kill each other with energy missiles. It's a lot of fun and can be really addicting. It can help develop a solid interest in programming. Making your first robot and then starting up the game to watch it get slaughtered and not act as you planned is pretty interesting.
I bet a lot of slashdotters would enjoy it actually.
I taught programming at a design school for seven years, and I tried to turn web designers into web developers, as the pay and opportunities were better. The comments that suggested finding something that the young one wants to do really are on the right track. Game programming with Flash and cool web pages with PHP/MySQL will be the easiest way to get that going. But most of all, as a parent I say enjoy the time with your child, they are so precious. Until they stop being that, of course.
Maybe it's time to introduce him to alcohol and social drinking?
I think you should encourage him the same way my dad encouraged me. He left plenty of Basic books around and left me alone with the thing.
Eventually, when I was about to become an Eagle Scout, in 1991 or so, my father told me he wanted to get me a really special gift, but didn't know what to get me. I told him I wanted something more adult than Basic; was "Fortran good for making graphics?" My father did something that was incredible at the time; we didn't have much money, but we did have a 10 year old IBM PC. He bought me Borland C++. It had a compiler, profiler, debugger, an integrated IDE, all the bells and whistles. Only I wanted to use the compiler and nothing else. I learned an incredible amount from just following the book examples. My mother laughed every time she saw me in front of the television just reading the book that had the listing of the available commands. It felt like I was reading a catalog with someone else's credit card.
Give the boy the means and the time. Provide a few trips to the local used book store for some examples to just type in and make minor variations. In my experience, that's the best recipe to success for continued interest. Any more involvement and you'll end up with a football player or cheerleader.
The big thing that I know nothing about current GNU compilers, which is the only thing I'd expect a kernel hacker to provide, is that I don't know about graphics libraries. Motif, GTK and the like are far too much. Just something to draw a pixel or a line is what a growing boy needs.
First thing i learned to program was my calculator. I'm a junior in high school and C++, Flash Action Script, and java have become part of my vocabulary. Like most it was just seeing my Dad do it and wanting to emulate. there is a lot of really cool online classes that for a minimal fee, provide tons of tutorials and videos. great stuff. Just dont push it too hard. It isnt difficult to get frustrated and give up on something as tedious as programming.
How about writing Interactive Fiction? Download Inform and he can go through the manual coding alongside it. It's not a traditional programming language, but the concepts are there and easily accessible. Graham's writing really shines in the manual and he explains a lot of complex programming very nicely.
If your kid isn't so much into the writing (or the text only, which is understandable) then I'd start him off with Learn to Program.
Although your kid is probably too old for many of the exercises and activities, but Computer Science Unplugged is a fantastic resource.
http://pragprog.com/titles/fr_ltp/learn-to-program
A good way to get results relatively fast is to create some website about a hobby he already has.
Start with some POSIX that has Apache and make him read documentation to install it himself. Help him whenever needed, and do not force him to optimize everything perfectly right away. Its just too boring if you really do not grasp the why to optimize. Now comes the important part..
Try to make him have ideas that require writing of a custom apache module in C or some other language. It is not that difficult, really. Show HTML, PHP and even JavaScript. Show him some good old cgi-bin just to give him a chance for perl and python as well. You are going to need to give a lot of choices so that he can learn languages that enterntain him the most.
Maybe he manages to create an exceptional site that others use as well. This requires understanding user experience, logical and useful GUI and a lot of thinking about needs of his audience ("customer"). Sooner or later he does have to learn how to optimize apache, in which case he soon discovers that his code must also be optimized at some point.
Today's kids need and deserve the full package: multimedia.
You should change the Unix kernel hacker hat for the Squeak Smalltalk programmer hat.
http://www.squeak.org/
http://squeakbyexample.org/
Main difference between the BSD license and the GPL license: one is from California and the other is from Massachusetts
I would highly recommend having your child learn a high level language. One that I really enjoyed learning more on when I got started was AutoIt. Unfortunately it's only for Windows. Also web programming is a lot of fun and provides quick returns for minimal investment. If after they still are showing interest in programming, then they can then spend a bit more time and learn a few lower level languages.
I've always thought POV-Ray would be a great way to teach programming--instant visual results, and initially grasping OOP is probably easier when you're used to describing and instancing primitives with Sphere(...) and such.
(unlike Python), you can comment out a couple lines of code without having to reindent 100 unrelated lines of code so that it would still compile. Similiarly in BASIC, it's easy to insert lines of code without having to reindent 100 unrelated lines of code - you just use a line number occuring between the existing lines. And if you run out of line numbers just do a RENUM! Also BASIC won't choke when you attempt to print a numeric value without first converting it to a string.
Clearly 1980s BASIC is a superior language to Python.
Use the Open Source BlueJ platform for Java.
It is very simple to use, somewhat point and click. It automatically will teach him UML because the diagrams are autogenerated. So he can see the design as well as the program.
Also, he won't have to work with the compiler. It just runs your code right there.
There is a BlueJ book in Amazon that walks one through the language. It doesn't teach all the data structures first like most books (this is boring for the newbie). It teaches them how to code, and they get immediate feedback. I'm going to use it with my 9 yr old.
Get Lego Mindstorms and download Java for it, called leJos. That way his programs can start simple and still get real feedback.
Scheme or SmallTalk (using the Squeak environment). I think javascript/html has its merits for accessibility, but there's an awful lot of casting into and out of String representations, which is a big deal and a security issue. Since the programmer has to be involved with the whys and hows, it's my feeling that such domain-specific hacking, though impressive, is a distraction.
In the course of learning languages one learns to look not for the specific implementation details (does an expression end with a line break or a semi-colon or...) but the larger concept, i.e., how does the compiler or interpreter know that an expression is complete. We walk up to a new language with expectations, for instance, that there will be a way to do basic output and maybe, we hope, a way to make the output nice looking. Then we look for what the printf is called and how is it used.
So then, here's my real suggestion: pick a language you'd like to learn and and learn it together with your child. You'd see the language through experienced eyes and can call out things that are idiosyncratic and things that are fundamental and can demonstrate how much of the problem solving occurs before the coding starts. Plus, if you're lucky and your child is engaging with all their curiosity, you'll have to field a whole lot of "Why" questions and formulating the explanation will be recreational, in all senses of the word. I expect your explanations will be better if you, too, are navigating new seas.
Disclaimer of sorts: I studied Computer Science at university. I was turned off by programming as I found it boring (C, C++, java). The product that comes about, I always find interesting. I've moved to more overall functional and easier to learn/use language for my personal use. I won't mention langauge ... no flamewar. ;) I think getting a former programmer-in-training as opposed to a site loaded with professionals might help.
I'd say let your son learn a language. I started with BASIC on the C64. It was fun and I was 8 yrs old at the time. If your son knows HTML, I good place to start might be PHP or Ruby. I think syntatically (as a now-nonprogrammer) its probably the easiest to learn.
IMHO, after about a year of programming, assuming he's not completely turned off, have him do some much more complicated tasks (within "reason"). Have him do it in C or C++ (given time to learn it). I'm serious about this. If he wants to continue to post-secondary education, better to find out if he REALLY wants to do programming, or if he's doing it 'cause dad does it. You or he can save having to plunk down a couple grand (or more) for one semester or one year of tuition. My dad is a doctor. I wasn't pressured to do it either. I thought I would be really interested in it as well. I wasn't.
I think DarkBasic (thegamecreators.com) is a wonderful way to start--you can create a 3D program of a spinning cube in five minutes. Its easy game-based focus will immediately have a videogame savvy teenager thinking about creating his own games--the immediate visual feedback will instill excitement like no other. Move him to DGDK (C++) when he wants more performance and is ready for a more modern language. I cant see starting someone with Python--it wont do much for a teenager. I liked somebody's suggestion about Java, HTML, etc--that's also giving immediate visual feedback, and reaches a teen where they are at (but is less of a lowlevel programming environment).
Agemoz
here is the information about it http://robocode.sourceforge.net/ http://www.ibm.com/developerworks/library/j-robocode/
The Micro Adventures books (http://en.wikipedia.org/wiki/Micro_Adventure) are a good place to start. You have guidance, a reason to write code, and occasionally even some fun output to play with.
Now you just have to find them at a second hand bookshop.
I'm lazy - and I really got into programming by realizing "Hey, I can write code to automate repetitive tasks". I was running a BBS in grade 7 or so, and I had a habit of frequently switching software / re-designing my BBS from the ground up and having to re-import everything. After about the 100th time doing it, and getting sick of tedious tasks such as manually re-typing the description of text files - I started to write programs to automate this for me. My first tool that gave me a 'wow' factor, was a simple thing that would embed a file_id.diz into a text file, and pull it out when I re-uploaded it into the newest incarnation of my BBS. Sure, it's not as glitzy as game programming, but stuff like that is what got me excited about writing code. So, going along that lines - is your son really into say, organizing his MP3s? what about showing him how to write a program that can read ID3 tags, and organize his MP3 file structure accordingly. (Even with ID3 tags and modern media libraries, I have a bit of an OCD habit of having a logical file structure to organize my files also) Or, show him how to make a simple RSS reader for his favorite sites / etc. I geek out over utility/automation programming - and many of them can be very simple things that you can bust out in a few hours and get instant results.
... I didn't have a computer at the time (1982-ish) so I read the BASIC code and tried to figure out how the program worked, what the statements did, and how the program managed to put up the animation of a burning cigarette (yes, leave it to a teenage boy to be curious about smoking, among other things).
I'd say, find something that's likely to spark his interest and get him started with interpretive language. Instant gratification is important in early stages. I'd get him to try these:
Bash scripting, quick and dirty, use with sed / awk to get going quickly with text-based problems (ciphers, puzzles, etc.)
Logo for quick romp around with the turtle ... and recursion of course
BASIC for a little bit more control
Avoid the nitty-gritty details in the beginning. A lot of tools and practices today require a whole bunch of magic incantations at the beginning before you get to do anything fun at all ...
I think a good way to introduce a teenage kid to program is a cool platform. And the coolest platform for a teenage kid might be to program something for their iPod Touch or iPhone, because they will be able to show off their work to other kids and will really open his eyes to the potential of the device they usually just carry around to listen to music and talk on the phone.
Plus, they get to use a really cool development platform (XCode + Interface Builder) with a really nice programming language (Objective-C), learn about OOP, can do some stuff in C, there are some really good tutorials on the Apple Developer Connection site.
Even if he doesn't end up writing an app to put up on the iTunes store, he can just play around with stuff and load it onto his iPod or iPhone. I would have loved to have something like this when I was 13; instead of just writing stuff that only I could use, with no one around to see how cool it was, I would have been able to show it to my friends.
Go hug some trees.
You should be refactored for suggesting teaching PHP to a kid.
Fixed it.
Young teens need little encouragement, but old ones are notoriously stubborn.
The article asks, "What originally got you interested in programming." In my case I picked up x86 assembler so that I could crack copy protection. With regards to the son of the guy who asked the question, I think that the answer should present itself. The kid is obviously interested in computers and programming. There has to be something about programming that speaks to him. I personally hate programming. I think it is one the most tedious things in the world. I definitely enjoyed learning assembly though because to me, it represented the actual working of the computer in terms of directly manipulating what is in memory and being able to step through the lowest level of the code as it executes. That was cool for me. Actually writing a high level program doesn't interest me in the least.
Make sure he knows the basics of keyboard Input and console Output, then encourage him to write programs that do what he's currently being taught in his math classes. It sounds cheap, but I never understood a mathematical concept better than right after I wrote a program to do it for me. Bonus points if the program has to show intermediate steps!
Language is fairly irrelevant at this stage, it's just the basic interest that has to be fostered. I started programming like this in BASIC, but I've studied a wealth of languages since then. If you can, look for a specialized math/science/computer school that he can attend (some school districts call them "magnet" programs).
By the way, I'm a graduate of the University of Central Florida's Computer Science program and now "work" professionally as a Software Engineer.
Is that the reason he's interested in programming is because your a programmer. I'm sure he finds the topic interesting, not saying that. But if you were an auto-mechanic, an artist, an author, it's likely he'd find that interesting as well.
The best way to keep him interested and to foster improvement is to stay involved. Pull a good book of your shelf, tell him why you enjoyed it when you were learning, what you found useful about it. Encourage him to sit in the same room while you hack and not to hesitate to ask any questions he may have about the material, take the time to answer those questions. As he improves, work on projects with him and as soon as he's able to contribute to what your doing....work with him.
Share your enthusiasm, talk about the challenges you had during the day with him and the solutions you found. He may not understand it all at first, but he'll listen, absorb, and gradually start picking it up. And if he loses interest, still talk with him, encourage him to seek his own interests, and emphasize that the most important thing is not *what* he seeks, but that he finds something that inspires the same passion in him that you've found in programming.
I sat my daughters (10 & 8) down with me and said, "We're going to make a copy of this calculator on the computer."
They had a lot of fun drawing the buttons, coloring them and double-clicking them to make them put their number on the screen. When it got to the tedium of acutally handling the stack and making the operations work, they were a little less interested. But when they saw it working, they had a really good understanding of what it is that I do.
Will they be any good at programming or even want to do it? I don't know, and frankly, I don't care. I just want them to find a career doing something that they love, finding a good husband and having a nice family (I'm selfish, I want grandchildren, sue me).
Peter predicted that you would "deliberately forget" creation 2000 years ago...
Look for a Computer Camp in your area and send him there. That way he'll learn a variety of skills and be able to find out what he likes.
I think we're talking about very antiquated ways of learning programming or doing things. Just because you think something is lazy or inefficient, it's also the way things are done and for the better because now the programmer can also be the expert in whatever the goal of the program is, not just some geek in the corner of the server room. I think Microsoft is doing one thing right and that's getting programming interesting for kids (even if they do have an ulterior motive) with the XNA framework. Far and away, I think the Xbox and XNA are going to be the most interesting and instantly gratifying things you can get him onto. Also, it makes you look cool and teaches him logic and some basic math without bogging him down. When he wants to do more (if he wants to do more) he'll look into DirectX or OpenGL and realize, for the moment, he needs C++ and he might then be more like the programmer you want him to be.
get Pure Data installed on a linux box and some sort of sensor interface like an Arduino. Get him to monitor the fish tank or something, and program physical control systems. Hands on work will make him excited about computers and he'll move on to C and other languages.
is interested in programming. Alice is a wonderful tool that helps teach introductory programming concepts in a 3d environment.
alice.org
A cut and paste from the website explains it best.
"Alice is an innovative 3D programming environment that makes it easy to create an animation for telling a story, playing an interactive game, or a video to share on the web. Alice is a freely available teaching tool designed to be a student's first exposure to object-oriented programming. It allows students to learn fundamental programming concepts in the context of creating animated movies and simple video games. In Alice, 3-D objects (e.g., people, animals, and vehicles) populate a virtual world and students create a program to animate the objects.
In Alice's interactive interface, students drag and drop graphic tiles to create a program, where the instructions correspond to standard statements in a production oriented programming language, such as Java, C++, and C#. Alice allows students to immediately see how their animation programs run, enabling them to easily understand the relationship between the programming statements and the behavior of objects in their animation. By manipulating the objects in their virtual world, students gain experience with all the programming constructs typically taught in an introductory programming course."
It is a free tool that runs on windows, mac and Linux.
You said you are not a teacher and have a horrible time teaching.
The Alice team has developed instructional materials to support students. Resources include textbooks, lessons, sample syllabuses, test banks ...
Anyway give it a try.
Well, I've never formally studied Computer Science. I've had genuine interest in computers since.. around 1999, when I first saw one. I got my first in like 2004 and fiddled around with Windows. 2005 onwards, I messed around with Gentoo, loved it all and eventually started learning bash. Learnt it pretty well and at times had to go dig up the core UNIX concepts as well.
Now, working on this thing fulltime.. am totally in love with it. Migrating from sysad and learning programming.. perl kicks ass. I totally love it. Hated python for being too boring. I'll probably learn it later this year anyway, but shell scripting > sed + awk > perl kicks serious ass. I love it. But, I'm the sort of fellow who likes `low level' stuff. Perl allows me lots of control and stuff and regex is simply awesome fun for me. Dunno how it goes for anyone else, but yeah..
The absolute best thing to do is to have him learn vb first. Yeah I know it is a horrible language, but it still teaches the fundamentals of programming and lets admit it's very easy. Have him use .net and he will feel instantly gratified because you can build windows ui apps in a snap with those 2 tools (vb, .net) Even if vb is a bad language, it will open the door to any other object oriented language because all the syntax is the same. Especially C# and C++ because he'll already have a powerful IDE to code/learn them in.
-AJ
Attempting to show him how to program, just for the sake of learning to program won't work. He'll get bored.
What he needs is something that he can 'DO' that requires him to program, then he will be motivated to learn the programming end of it.
My suggestions include:
* Game programming - You can use something like Garage Games' game builder suite. It's relatively inexpensive and it works on Linux if thats the way you want him to go, or you can use their XNA version and you son can make his own games for an XBOX 360.
* LEGOs - Get him a LEGO NXT set and help fund experiments into building robots. The NXT has it's own visual language, but there's also C, Java, C#, python, LUA and other alternative development environments for it.
* For web programming, look at his other hobbies and see if there's some kind of website that he could create to support or promote that hobby that he could use a LAMP system to develop
Carnegie Mellon has an interesting free project called Alice ( http://www.alice.org/ ) that is described as a "scripting and prototyping environment program for 3D object behavior." It is cross-platform and seems to be very easy to learn.
Getting slightly more adventurous, I'd suggest PHP, HTML, and CSS. They're fun, relatively straightforward, and more or less forgiving, while still being pretty powerful.
After that, the multitude of desktop programming languages (Java, C, etc.) might be a logical next step.
Being a C programmer, I'd naturally advise against Ruby, Python, etc., but in all seriousness, since your son is a beginning programmer, the nuances and reasons for the existence of those languages will be lost on him. Sure, they may be easy to learn and use, but if you want him to grow up with a natural love of *NIX, the "C and Perl" route is likely the best eventual course.
As far as textual material on the topics, Google is by far the best resource. I've taught myself much of what I know, and I've found that, while O'Reilly books make great references and SAMS books make great tutorials, nothing beats a good search engine and the knowledge (and sometimes outright stupidity) of the internet community.
Hey, I've started learning Delphi, but I Didn't enjoy it, then I had my first contact with Linux, what piqued my curiosity was the Kernel, but I've not known C yet, then I started learn it and now I'm getting better little by little.
I think if you show him how to do useful things using for example Python with GTK ( or QT if you prefer it ) he will enjoy a lot programming.
Sorry my bad English, it's not my mother tongue.
Programming is a field similar to being a seamstress or meat packer. It was once lucrative, but these days, one can get complete code blocks custom written from an offshore company that are well reviewed and audited for security leaks for 1/10 the cost of it takes to have even a single experienced employee on the payroll.
Programming may be a great hobby, but its just like being a car mechanic, or sewing clothes. Its a hobby that will result in an existence of barely scraping by, with the job prospects becoming bleaker every day as the economy collapses. More companies these days are hiring offshore consultant agencies like Tata who can guarantee the quality of a code base for a tiny fraction of the cost of having a dedicated programmer on the rolls.
So, of course, the OP's son can be a programmer. Career-wise, expect a life of pink slips, minimum wage or barely above, and no job security in life if he does go this route.
Before you can get creative and derive actual pleasure from programming, you first need to be able to do more day-to-day stuff. "Hello world" is great to teach someone what the basic structure of things is like, but that sort of direction gets completely uninteresting within a couple of hours if you're not already academically inclined towards the subject at hand.
My suggestion is to teach him to Get Things Done. Like you said, people take computers to mean "point and click" today, so you first have to get rid of the mentality that what is superficially easy is, in fact, the easiest way to do things.
So start with the shell, show him how freaking powerful shell scripts are. Start with the basics, like "mv *.mp3 /to/some/place" rather than having to sort the files by type, select the mp3 files by hand, drag somewhere else. That shows him some basic pattern matching. Want to find out which of a dozen files contains a specific phrase? Show him the following snipet:
for $file in *; do echo === $file ===; grep file "phrase goes here";done; (check for errors, haven't used this stuff in a while and don't have a proper shell handy). Hooray for loops!
Once you have that sort of thing going, give him a "real" programming language. I'd say a scripting language is best. That'll steer him towards good algorithms over stupid "one less instruction" optimizations. Later on, if/when he starts showing some interest in the behind-the-scenes stuff, give him C.
At the point in time when you start showing him a "real" language, give him real problems. Does he like Monopoly? Everybody loves park avenue, or whatever the street immediately before "go" is called, because it's so freaking huge and expensive and stuff. But is it really *that* good? Show him how to use a random generator to simulate like ten thousand games with 500 rounds each, and aggregate which squares are the likeliest to land on. (IIRC, the best set is the orange, best odds*price value). Next step up, add some more complicated logics to the process. I heard that tennis essentially works as a high-precision instrument, where small differences in average odds to win a single point translates into very high odds of winning a match. So you can adapt your monopoly simulator for a tennis sim and check if that's true. That'll also teach him the value of code reuse, in particular the importance of writing easy to manage code.
At this point, just plop some documentation on top of him and let him hack away! Show interest, let him know your opinion on how it's looking, share your expertise if he asks for it.
(Depending on how visually-oriented he is, one thing that might also work is having him learn POV-Ray. Depending on how much *you* are into that sort of thing as well, and provided you haven't played with POV yourself, learning it together would probably be great fun)
It seems to me that the best way for you to help him would be helping him learn how to learn in the programming space. When he hits a problem, help him learn how to search for more information rather than giving him the answer. It might also be worthwhile for you to set up the development environment for whatever it is he wants to build. That way he can jump right in to the code.
His curiosity is the most important thing. He's your son and likely to learn similarly to the way you have, but it seems like you are both trying to make him you and encourage him peruse his own interests at the same time. Be there for him to answer his questions, loan him books, and set up development environments if he needs it. It's just as likely that he'll want to learn about what you are interested in as it is that he will end up learning about stuff you know very little about, so don't feel bad when suddenly he knows more about something than you do. As far as encouraging him, just ask him how he might solve a certain problem. Brain storm with him, even if it's not that difficult of a problem for you. Then occasionally sit down and write a test program or a helper program with him based on the brain storming. I'd avoid Big O problems directly for a while though. Let him get comfortable first. Also, C for Dummies was great to me, but it's slightly Dos/Windows biased, but I've moved on from that now.
I find it interesting that many of the complaints listed here against PHP are not so much against PHP as they are against the various extensions people have written to PHP. I will admit that I much prefer PHP4 to PHP5, and the additions that PHP6 will include make me want to vomit.
Many of the features in the first list are descended more or less directly from Perl. Others of the features are complaints against PEAR, which I don't consider to be a part of PHP. One can use PHP without using PEAR and I do so all the time. I also refuse to use Smarty, as it is a horrific mess of PHP, HTML, and bloat.
I started with basic and currently work at a company where PHP is the main tool.
In between those two I have learned C, C++, C#(urgh) had a look at D, some simple bash and python.
Basic only corrupts those who don't have the ability to say "okay I have used up this language, I need something better, even if I have to start fresh."
A friend of mine is like that, he still uses VB6 and came crying a few months ago because his good ol' language can't write files that are greater than 4GB.
I'm a 20 year old IT student, I'm also an intern and have a job offer already. I agree with many of the people who suggested Python, that is how I got my feet wet in programing, it is pretty easy to pick up and you can find a lot of small programs with walk-throughs online. Mainly the best way to learn is to find programs with some basic instructions and to learn by doing. As for the people who suggested C++, I wouldn't recommend starting here, I took C++ classes, I like it I see the functionality of it, but it isn't one of my favorite languages to program. If you want to get someone hooked on programing give him a Java book. Is about just as easy to learn as C++ and I think it is more fun to write. The various Java games you can write get you hooked. If you want him to get hooked just find him some fun program examples and give him the tools and help him if he asks.
Just because you are wrong and I called you out on it doesn't mean I am a Troll.
Hi,
So, I was a studying a science in college up until a month ago when I graduated. Mid-way through college, actual computer science started to interest me, as opposed to dinky Matlab simulations I would write for homework. So, I know what can help your son out.
There is a great, free, online book that I always go back to. It's called "How to Think Like a Computer Scientist." It covers all the basics and gives you a solid theoretical as well as practical framework to learn programming. I would reccommend the Python version to you, as that is the one I learned from.
Also, I taught a class to my fellow students at college extracurricularly as well as TA'd the intro computer science course (though I had not taken it :) ), so if you have questions, I would be happy to answer them. Just message me.
I had open access to an apple ]{ at school about 2 hours a week. The others did not know the computer existed (kind of).
So I learned basic from the documentation. It was rewarding to learn to master it with no outside help.
I programmed games (pacman, tennis, snake) all with less than 200 lines of basic code.
I programmed some math programs to plot functions
And then I programmed my own drawing code to generate bitmap images.
All this was great for my self esteem.
Now we are in the year 2008, so here is what I would suggest:
Coach him just a little bit, point him to the right tools, then let him learn by himself. Just congratulate him on the progress he makes.
One thing of course is to point him to something modern enough. I would suggest java inside Eclipse (part of linux distributions.
He can start by using just one object and not use anything object oriented, then he ca nlearn object oriented programming, graphics, network, etc ... ...
There are lots of java one page samples
Have fun,
Georges
... that you get the girls with leet assembly skills!
Good question, I have two sons, currently 12 and 17, and am going through the same process. Here are some of my experiences.
;)
We went through Lego Mindstorms a couple of years back and it was very helpful. Not "really" programming, I guess, but great fun and introduces some fairly sophisticated parallel event handling concepts without even trying. I mean, it's a robot, a bunch of stuff HAS to work in parallel, right? The kids, as usual, think it's obvious and go about their business of having fun:
Adult: "Wow! Nice LabView setup you've got there!"
Kid: "Can I have my toy back, please?"
So, first the 12yr-old. And the shameful parenting revelation part. At one point I paid him $10/chapter to work through "Java for Dummies", which he did with much delight. The main difficulty was keeping him from taking on the immediate cloning of WoW before actually understanding variables. He also did some of the C and C++ for Dummies books at other times, so yeah, he knows what a pointer is. So much for youthful innocence.
Not much happened after that, till he discovered the Warcraft level builder or whatever they call it. Now he's lecturing me on IF statements at the dinner table. Time to let nature take its course, I guess.
The 17yr-old has done everything from ARM assembler to PHP and Flash at this point. He has done interning at a couple of startups and absolutely gets the programming thing, though certainly with that occasional, and very annoying "I know everything even though I'm a clueless n00b" aura that teens seem to own.
This summer, he had a very manual, outdoors, sweat-all-day-in-the-heat kind of job. That gig ran out so now he is trying to land a job at an ice cream shop where you have to sing and dance if a customer gives you a nice tip. I think it's a great idea. Kind of a good balance too, if you think about it!
I don't know if either of my boys will ever use their programing skills in a professional capacity. I DO know that they consider programming to be one of many valuable life skills, and will never be taken aback when confronted with any C-like programming language.
However, no APL, Forth, or beer until they're 21! At least in my state. I hear tell the Forth age is lower in California
You might start him on UML and a rigorous course of design patterns. He can choose a language later on when he wants to generate the system from his design.
My Dad was into programming and I was into games. He tried a few times to get me into programming, but I just wasn't focused enough yet. He also introduced me to many scientific studies and side projects ranging from electrostatics, water purifying, model rocketry and solar power. This was back in the late 80s.
Today I'm into all of that stuff and am a senior developer and software architect as a profession, but I'm sure I seemed less than enthusiastic at the time. He was fairly patient with me and is surprised how much I still remember.
So, remember, you are doing the right thing, but you may not get immediate results.
Sierra Tango Foxtrot Uniform
The key is that he/she learns the fundamentals of Computer Science first. Ideally he should learn UML first since it is the language used to describe and architect software systems. Infact UML will give the learner a good understanding of software systems and how they work, without having them see a line of code or have to understand a language. I would then stress teaching some of the basic concepts (binary trees, queues, heaps, treaps, etc.) since those are abstract concepts that can be taught without a programming language necessarry and when he/she wants to know the implementation, you can show them beautiful psuedocode which trivially everyone can understand. C++ is likely the best language to start teaching someone how to program, but the second you do that is the second your son's mind gets corrupted. Any good training in programming languages should start with functional languages (like Lisp or Scheme), and then move onwards to more archaic (and more often used) languages like C++/Java.
Just my thoughts.
I started learning my first programs at about 12. Entirely self taught. I'm relatively young (20), so this was probably around Pentium II - Pentium III era. I too was curious about how computers worked. I played games on them sure, but how did they know what to do? Truthfully my original question was only finally answered after an electrical engineering class at my university, but to start with I learned programming. I checked out a book from the library which described programming in Basic. I asked my mother when I got home if we had a copy of Basic, and she set me up with an ancient copy of BBX Basic she still had. My first programs were text based games. It was always a ton of fun programming. It gave me a great sense of freedom, like I could do anything. I later found out that we had a copy of Quick Basic on an old 486. Quick Basic was probably where I really got into programming. I would highly recommend a copy of dosbox with a copy of quick basic installed for any adolescent interested in learning programming. I cannot express how excited I was the first time I realized how to make pictures move across the screen in QBasic by drawing them in reference to an x and y variable. Quick Basic allows you to really get into programming and do graphics without having to learn about libraries. In addition the help files were excellent in describing for me what every keyword did. This said, it was difficult for me to learn C after Quick Basic because I needed to learn that there are different compilers, that many compilers don't provide an IDE, and that for any real graphic programming you need to learn an API. I have always thought that if I were to teach programming to somebody between 10-13, I would start them off with QBasic in dosbox and then after they had a year or so with that help them move to C or C++ and explain the different complexities of a more low level language.
The kid, from what I read is already showing interest, yet most posts I've seen here are about how to get the kid interested. What the submitter was asking is how to teach and possibly WHAT to teach.
I am a substitute teacher, and am slowly working towards my teacher license. The most important thing I can tell you, for teaching one-on-one is to find out how the kid learns.
Everybody learns best in different ways. If your son learns best by reading books and going with it, you are lucky, your job consists of buying the right books and letting him go at it. If he learns best by watching, you need to do some simple programming yourself, with EXTRA comments, then letting him tweak the source code. If he learns by doing, walk him through the steps of creating a program to do a simple but useful (I use the word loosely) task. (Converting metric to imperial or putting words into pig-latin make good starting projects.)
Find out how visual vrs conceptual he is. If he enjoys the visual start with a visual IDE. Sadly, I do not know of anything in *nix that is better for this than Windows-only visual studio. If he is more of a mix, go for console-based graphics programming, which requires more conceptual awareness, but still hits the visual areas as well. If he is a pure conceptual person, go for a pure functional console based start.
What language you use is fundamentally unimportant. Some may be slightly better than others, but he will use what he learns, then decide he dislikes that language and move on to something else. We all do.
Now, so far as finding out how he learns best, find out what subjects in school he likes most, and which ones he does best in.
If he loves math, and does well in it, you have a good case for going with abstract instruction. Explain the concepts of functional decompisition, object oriented programming, flow-charts etc.
If he is an English/Language person, start with the syntax of the language, or better yet, pseudocode. Make projects that manipulate strings, and focus on the language, instead of programming in general.
If he is an art person, start with graphical manipulation. Something simple, but fun. Fractals are good here.
If he is an layout/design/yearbook person, I cannot recomend anything better than Visual Studio as it will allow him to START with the layout, then do the work after-wards.
If he is a science person, dig deeper, does he prefer just knowing scientific "facts" or does he like the quest for empirical experimentation that SHOULD be the underpinning of science. If the former, focus on code snippets that perform specific tasks. I would highly recomend an OO language. If he prefers the experimental aspects, he will actualy probably be more intrested in a lower level language. You might even start with electronics theory, then expand to assembly.
If he is a music student, I have no clue, but you might want to consider things that deal with timing loops or counters.
If he is a Gym-jock.. erm uh, hmm.
Whatever the case, WATCH HIM LEARN. Find out where he is learning fast, and where he is learning slow. Make sure you keep adding more where he is learning fast, but don't cut the slow parts. Just don't add more to the areas he is doing slow in until he masters the previous step. You may well end up with a kid who knows esoteric compiler options before he understands bubble-sort, but he will be constantly learning SOMETHING. He will keep the interest he is already showing. Keep him challenged, without making it hard. That is the perfect level for teaching.
Do not focus on the language. Do not focus on the program. Do not focus on the computer. Focus on your son. Everything else doesn't matter.
Little Brother, watching the watchers
...to write games... after all, what else is there to do with computers? Game programming is how the commodore 64 generation got into computers, and it is still a powerful draw for game addicted kids.
Try this book to start:
http://www.amazon.com/Game-Makers-Apprentice-Development-Technology/dp/1590596153
There isn't any "programming" until the later chapters, but my 12 year old nephew loves the book! It gently guides them into the whole aspect of programming, which is great for those who are experienced using computers, but no.t much else (i.e. most of young America). After finishing this book, there are other books that can guide him into more advanced game programming.
nature will take it's course.
I would start with web programming. Most agree that html is not a programming language but it contains many of the same elements.
There are lots of 'languages' to learn in the web world and they all work together. Hit HTML first, your child will be producing results that can be seen within 5 minutes. Next would come CSS, then maybe javascript. After that you could throw in PHP or Perl.
Web browsers represent a great graphical interface for cross platform compatibility. Every language I just mentioned is cross-platform compatible. More importantly, they are all technologies that teach programming principles and fundementals and yet provide quick rewards that keep you coming back. Of course during this time have him use something like Ubuntu.
Only then would I bring him back to system level programming. By then he will have a love of building and designing things and will appreciate the classic architecture used by those who built *nix. Time to learn C and C++. After mastering the basics of those languages I would recommend something like Linux From Scratch to give a solid system level understanding. Let him code on *nix type stuff for awhile before throwing him to the wolves with assembly.
That, or you could give him the idiots guide to vb.net.
I'm the original submitter of this question, and I just wanted to say a great big THANK YOU to everyone who has posted! And to the Editors (especially Soulskill) for publishing my question.
I had submitted this a couple days ago, and was *really* disappointed that it seemed to drop off the radar. Leaving me to handle this blindly on my own. I woke up this morning, went to Slashdot and BOOM! I was completely floored to not only see this on the front page, but 600+ comments and counting!
Once again, thank you, everyone.
I also wanted to let you know that I'm reading every single comment here. Yes, even the stuff at -1; I'm used to that, because I read those when I have mod points. So even if you're posting as an Anonymous Coward (ahem) and don't get modded, please know that your comments are indeed being read.
Much obliged.
There must be a reason why your son wants to start learning about *Nix. Find out what that is, and explore those options. Believe or not my impetus for computers started with scripting. Before then I just liked to play games. I had a computer job doing operations crap, nothing big. I would do some cool things with the work-flow and I used Access to manipulate the data in the Oracle DB but nothing really stood out for me until I started to learn how to script. Once I started to write scripts, I learned how to build, monitor and maintain things at a level I had never imagined. Call it "geek power", I could control a limited universe and I really liked it! That pretty much drove my career into Unix Administration, because you couldn't script on an NT box. I loved playing on computers, creating little programs that helped me do my job. There is a great feeling of accomplishment when someone asks you to do something, expects it to take all day, and you finish it in about 5 minutes. This still drives me in wanting to learn. Right now it's Ruby so I can do Rails. As time goes on, other things will pop up that will drive your son's career in directions you never thought.... in directions he can not even imagine. If I did what my father wanted me to do, I would be an unemployed Novel Netware Administrator.
Most of the CG programs offer scripting support. Your kid could write small programs in C#, Python, VBS or JScript and the result would be animated 3D objects doing stuff that cannot happen without programming them. Almost instant quality results without much hard-learning. Once the basic stuff works and he gets to understand the basics of programming, the hard abstract stuff will make more sense.
Some 3D Programs that offer scripting are XSI and Maya.
I think XSI has a free version, I don't know if it supports scripting though..
I think teaching programming is most useful and productive when there is meaningful goal for the program or project. Especially if this is outside of school and there are no grades being handed out.
Ask him what he would like to create, if it's large, break it down to doable modules. Either way, if you are learning on your own there has to be self-based goal to keep the interest sparked.
For God's sake, don't encourage him! He still has a chance on a real social life, if only you'd squash these seeds of interest!
There was a great Slashdot article from Sept 9th, 2001. I've used it to teach young people Java and they always get a thrill from it. Learning Java Through Violence http://slashdot.org/developers/01/09/09/156200.shtml
For all the complaints about various PHP extensions, there are also many complaints about the PHP language design and implementation itself.
Take, for example, magic_quotes_gpc. That is the stupidest flaw ever, which should have never been in any rationally designed language in the first place, and it makes programming in PHP a LOT more obnoxious and error prone.
Don't blame Perl for PHP's mistakes. It was idiotic of the PHP designers to foolishly ape the mistakes of Perl (and later the mistakes of Java, when PHP5 tried to express PHP's dynamic interpreted language's OOP system in the SYNTAX of a Java's static complied language OOP system, resulting in a horrible impedance mismatch, and many subtle inconsistencies and gotchas). That is called "Cargo Cult Programming Language Design".
The REASON that most of the code in PEAR is crap, is because PHP encourages and supports crappy programming, which is precisely WHY it should not be taught as a first programming language.
-Don
Take a look and feel free: http://www.PieMenu.com
See David Brin's article "Why Johnny Can't Code" at http://www.salon.com/tech/feature/2006/09/14/basic/index.html Then see BASIC-256, nee KidBasic. Available from http://thedance.net/kidbasic. I taught 8 9-year-old-boys elementary programming in 3 one-hour sessions, and they ate it up.
Get a micro controller platform like the Arduino. It uses a modified version of C and it lets you create something a little more hands-on than a straight "computer program." It's easy to use and you can create fun gadgets with a minimum of external parts.
Seriously. Programming to the bare metal is the only way to get a real understanding of computers.
All these new languages are just "flavors-of-the-day". While useful, they're just far too abstract.
I am so sick of young "programmers" who have no idea how to program real bare metal. Take away their development environment and high-performance-hardware and they're totally useless. At least if you know how machine code works, you can grok the more abstract languages if and when you have to.
Way, way back in the day--my dad came home with a TRS-80 Model 1 and a book filled with the source code to a bunch of simple games; Connect Four, Tick Tack Toe, Moon Lander, and I think big game in the book was Lemonade Stand.
Anyhow I sat down and start punching in the games, line by line. When I would finish there would be a myriad of typos to fix.
Little did I know I was coding and debugging. About the fourth program I typed, things started to dawn on me. IF THEN, FOR NEXT, GOTO, etc. all started to make sense.
It wasn't long before I was the one heading to Radio Shack looking for new books. Figured out PEEKs and POKEs next, and before you know it I had my own original game.
At fifteen I was working on mini's programming RPG3. By sixteen the IBM PC came out I was one of the youngest hires at IBM's Yorktown Research Center.
Of course the flip side is by 26/27 I was burnt out on coding... Hey but at least my career path was secure!
I recommend the video lectures at www.3dbuzz.com
The Intro to C++ and OpenGL courses are superb. This guy is a great teacher, and, while the course is done in windows, it's easy to follow on linux.
It's not free, but I think the bundle is about $100, which is very cheap, considering the amount of material it is, and the quality.
There are many practical, clean, simple and easy to learn programming languages, much better than PHP, that are great to learn as a first programming language.
Learning Lua will enable you to write your own World of Warcraft mods, and increase your chances of writing your own game or getting a job in the game industry, as well as enabling you to script all kinds of applications like Adobe Lightroom and WireShark. Lua is an extremely well designed and implemented, efficient and powerful programming language, which will open your mind in the same way Lisp does, instead of corrupting it like PHP and BASIC.
And of course Python is also extremely useful to learn as a first language, for all the same reasons as Lua, and also the fact that it has a huge library of mature, solid, powerful modules (unlike PHP's PEAR, a collection of buggy, poorly though out modules, hacked together by ametuers).
-Don
Take a look and feel free: http://www.PieMenu.com
Because you want to give the guy some bragging rights (to keep him motivated) and with as little effort as possible (so he doesn't go bored before seeing any results.)
Sure, if you're already a decent programmer and have at least some minimal graphics skills, by all means, go ahead and start a 6 months project. But if you want to motivate a 12 year old, 6 months before seeing a result is an eternity. It's 1/20 of his entire life so far, or even more if you discount the first years from which he has no memories. It's akin to starting a 2 year project at 40. It may work if it's already on the domain of your hobby, but not as a teaser to see if you like an entirely new domain.
(I don't know if perception really scales linearly that way, but some studies _do_ show that children perceive time as flowing a lot slower than adults perceive the same interval.)
If you want to get someone's attention, fast, you'll want to start with something like, "see, you click here and here, and type a bit here, and... taadaa... our automated patrolls in X2 The Threat will buy and use missiles. And, hmm, you know, maybe we could make them call the nearest destroyer to jump in the sector if they run into pirates." Stuff which you can finish in half an hour and upload on some mods site, and actually see a couple of guys saying, "thanks, that's just what I needed."
Heck, probably the smallest mod I've seen that apparently made a bunch of people happy, was IIRC a one line change in the Creatures 3 script. It's a special case, but it shows how little effort may be needed in some cases and still end up with something useful and a little bragging rights. That's the kind of thing you'll want, to get someone hooked.
IMHO.
A polar bear is a cartesian bear after a coordinate transform.
No, PHP is *NOT* a horrible language. It lacks some important object-oriented features (at least PHP 4) and allows horrible programming - which is very different.
Want a horrible language? Try Foxpro. It's limited, proprietary, ambiguous regarding variables and database fields... ugh.
But as a learning programming, I wouldn't recommend PHP either. There aren't many things that you can do in PHP other than web portals.
i always thought the best way to encourage anyone was to discourage them.... Sex is fun and great but YOU are not allowed to do this. NO No No...
That's how it all got started for me anyway. I built my empire because someone told me I wasn't allowed to.
The BSD's with their anti-GNU bias are missing a whole series of simple tools (i.e stunnel ).
If someone writes up BSD licensed software that is well written I am sure that their software
would be adopted and shipped. Nothing give more joy of programming that have others using
your work. Programming is a complex process the trick is to find simple but useful tasks
to start with.
i'm a high school senior and i have been programming since i was in middle school. the way that i started to program was with BASIC, more specifically this instructional video game/learning CD-ROM http://en.wikipedia.org/wiki/Learn_to_Program_BASIC.
Donno if you can find it anymore though.
http://www.alice.org/ Check this website for all the tools to get them started programming.
I tried to get my brother to learn some programming. First I tried with POGO, but he wasn't interested. Then Python. No Interest. Then Scratch (search for it from MIT), small amount of interest. Then In the Warcraft 3 world editor, and finally some interest. He plays Warcraft 3 a lot already, and he wants to make his own games, so finally the programming is a tool and not something I'm trying to teach him.
I started learning to program when I was younger in Tintin, a tool used for automating some parts of your interaction with text based online games. (MUDs) Nobody had to force me, I just wanted to be able to do things faster in game.
I know that when I was learning how to program, doing video games was what got me really interested, I'm not sure if this site's tutorials are still valid, but http://nehe.gamedev.net/ has a great number of tutorials that may be useful..
I remember when I was had a Commodore 64. My dad used to buy the Compute! and RUN magazines - which included some games source code for you to type (included was the Automatic Proofreader (TM) to make sure you typed the lines correctly). That's how I learned programming.
WHy don't you get your kid a C++ / IDE combo (like Dev-C++, Codeblocks, or if you're on linux, kdevelop. Personally I prefer Codeblocks) and install the SDL library. Then buy him a game programming book (preferredly with included CD).
Start with simple things before the games: Loops, if/whiles, and then move to the graphics parts and reading joystick input. Then let him get curious with the book and game examples provided.
If that's too complicated, why not getting a copy of Adobe Flash and let your kid learn to write flash games. Sprite programming is a piece of cake in Flash.
If you learn programming:
+ You would be able to dominate the world (see wargame)
+ You will have a lot Money. A lot of money. Do you know Bill Gates?
Cons:
+ A lot of Shame on you.
Do you know windooze vista?
-- Giovanni Daitan Giorgi http://gioorgi.com http://www.siforge.org
While I agree with you, I don't think I could really put into words *why* php sucks so much. Why exactly is it? I'm not trying to start a flamewar, I just think it's strange how php is so obviously bad, but the reasons aren't really that obvious. One complaint I have is that typos can be difficult to find if the error reporting is set to the default levels. I don't really like some elements of the syntax w/r/t array indexing and objects. And the way its references work is kinda strange. And the interpreter seems to be a big memory beast. Can't really think of anything else, though.
I would go with python was well it is really easy to mess around with and has pretty good documentation online.
One cool thing that encourages even me to learn new aspects of a language is combine it with other things you enjoy. I did that with learning about xml and python so I could parse the World of Warcraft armory. http://jerdking.blogspot.com/
If he enjoys working with his hands and likes robotics. I would suggest the http://www.arduino.cc/ It is a little standardized open source hardware platform that has a neat IDE and uses a modified C++ language. I think it is cool to show kids that programming can cause real world actions not just something on your PC screen(not that there is anything wrong with that)
"If you like Battlestar Galactica, you're probably a huge nerd." -Stephen Colbert
My suggestion is to stick to something with visual feedback. Anything would do. In fact, a simple way to get him introduced to programming that would be instantly rewarding is the Linden Scripting Language that is right in Second Life.
I would suggest ALICE if I didn't have firsthand experience with the horrors of what it can do to someone's concept of programming...
Aside from either of the above, or maybe once he even decides he enjoys the concepts in programming, perhaps JAVA or C# with a concentration on 2D graphics so that he can SEE what he is doing rather than just take the computer's word for it... I cannot stress enough how visual aid will really perk someone's interest in a topic that would otherwise be mundane.
as much as i hate to say, i started with basic(QB 4.5)... then i moved on to assembler, followed by C, and the C++, and then i started learning about html and scripting languages, and all of that...
My hardest part was learning OOP after learning basic, and assembler(well, i was still pretty young too...)
But what got me started was i liked games. I found a basic program in a disney magizine for an apple 2e... I asked people i knew how to make it work, they showed me quick basic... (funny thing.. i never did get that code to work on a PC...)
I suggest you turn him on to the NeHe OpenGL tutorials. He'll get a series of tutorials on how to create basic opengl graphics, animation and the supporting infrastructure logic for making games. That is a great doorway to everything computer science and an endless ladder of geekdom. (Worked for me... [game making that is, I started long before NeHe was around.])
I'm a rising sophomore from carnegie mellon university. This university heavily emphasizes everyone at least having an elementary understanding of programming. Before freshman year i knew nothing of programming, now i'm doing computational biology and doing plenty of coding.
What got me into programming was a simple intro course in java. The thing that made it really stick was the professor, his enthusiasm was infectious. I'd recommend looking for a professor you know, or someone else knows, and just ask for him to have lunch with your son, talk, and that would be a good launching point for a small intro class if he chooses.
As a PHP programmer, I completely agree. I find it very flexible to do what I need, but I also know what to avoid and what I have to undo (like magic_quotes_gpc). But at the end of the day, if you make it easy for newbies to fire off SQL statements, it's inevitable that plenty of them don't know a damn thing about sanitizing user input. Various languages have done various things to attempt to deal with that, obviously with magic quotes being on the wrong end of the "monumental fuckups" scale.
It's also the reason I simply don't trust anyone else's code. There are so many newbies doing stupid things that I've no idea where it ended up or whether it could be present in code snippets other people have produced. More work for me, but I'd rather write my own forum knowing that there are no SQL injection holes, login security flaws, and all that junk than use someone else's.
I use it all the time and love it for what it is. But there's a reason I've always got a half-dozen tabs open on php.net when developing. Is it implode($glue, $pieces) or implode($pieces, $glue)? Oh, wait, either works... but "For consistency with explode(), however, it may be less confusing to use the documented order of arguments". Yes, I agree - that's absolutely retarded. Just like how half the functions are called as function_name() and the other half are functionname(), and on odd occasion, '2' is used instead of 'to' (nl2br, etc).
Do I wish that PHP6 would simply kill all existing naming and syntax inconsistencies (as well as other stupidities like magic quotes) and stick with one thing? Yes. Will they? For a couple things, but by and large, no.
However, you really can't beat its documentation and the number of guiding examples. Combine that with the number of prebuilt apps out there make it very easy to pick up. But of course, that also makes it very easy to pick up on bad practices - so I, too, would never recommend it as a first language.
How are sites slashdotted when nobody reads TFAs?
When I started college in 2005, they introduced us to programming using a program called Raptor - it's good for teaching the fundamentals of program flow. It's a flow-chart oriented language, and we used it to do simple little programs like converting Farenheit to Celsius and such. It actually highlights the portion of the program it is executing as it runs, so a newbie (like I was at the time) can understand how programs flow, how control statements and loops work, and all that fun stuff. Makes a great visualization to use later on down the line. I went straight from there to assembly programming though...which was probably not the intended path...
Before starting you project please note the below system requirements:
The Child must have one of the below libraries installed...
1. Wants to make video games
2. Wants to understand the magic box
3. Likes Problem Solving
NOTE: option 1 is precursive only. Options 2 or 3 must develop if Project is to succeed.
Several tutorials exist (see above) describing methods of working with option 1 and will not be discussed here.
To satisfy option 2: C is the best option. mmmm... pointers....
To satisfy option 3: import to project Ruby Quiz a library providing several logic challenges to challenge the mind (Good for you too).
To satisfy option 2 & 3 simultaneously: Work in C++ and implement data sets and algorithms. (I personally LOVED the challenge of AVL Trees and the Quick Sort.
and implement
I agree Ruby or Python are more fun to program in. but only after using Java/C/C++ so that they can appreciate how easy every thing becomes
honestly. if you can't explain/convey what you know and/or have learned then you really don't understand the concepts yourself.
do him a favor and find somebody who does.
I started programming later than most, and it was because my music career was not going anywhere, and I was tired of being broke. The reason I chose programming is very much the same reason I chose music: because not a lot of people could do it.
That's right, it was an ego thing. And I think that a lot of people get into programming, or other sciences, because they are geeks and want to be able to do something "special". Vain, I know, but everyone wants their own skill that they are good at and to be able to impress people.
There is a downside to this, though. I suspect that many of the people who do it for ego purposes are the same to get into unethical hacking. "Because they can". The rush is addictive, and can lead to trouble. I was fortunate in that respect because I was older and wiser than many when they first start programming.
But with proper guidance, and if you've taught your kid the difference between right and wrong, stroking the ego goes a long way. And if he or she is an "outcast" it can really give them the boost they need in self esteem.
I learned best by buying books and looking online. The other thing that really helps me is to try developing an actual app (or game). I HATE when you're in classes and they have you make these programs that really do nothing. Give him a practical idea to work towards and see if he can achieve it. Say for example you want him to write a [web] app that catalogs your music collection (just an example). I have played with many different languages so far and am still trying to find my "favorite." I'm a junior in college and know quite a bit I think for my age.
What a title...
I started to program because I thought designing websites was sooo cool as a preteen and used to work on my blog layout so it would be better than my friend's :/ So I started doing the template in HTML and progressed to javascript and then PHP and went on from there.
Regardless, he needs to find something he really wants to do, whether it's to develop a mod for a game he likes to play or build a game, a website, etc. You can't make someone want to do something :) Like maybe you can help him learn how to make a character that looks like him in his favorite game or some kind of online quiz he can send to his friends or something fun without making him wade through all the boring stuff first. Teaching the basics first is nice but not interesting, so teach him what he needs to know and if he likes it he can always pick it up through other things.
One of the easiest ways to learn is by setting up your own gaming server. You can get open - source software for the entire setup. The kid wants it to work and is into if they like the game and can find friends who want to play. Many kids get sucked into the "bot" culture and then start writing their own private bots, or alternately beefing up security on their server to prevent bot use. The whole setup is similar to running a commercial web site, but more fun do to the game being present. Many different aspects of IT are involved, from picking out the right hardware for your servers and workstations, writing cutom apps, customizing your server and applications, efficient networking, security. That's how I do it, and it has worked in the past.
While some people suggest you throw him in one language or another, I don't think that there's a benefit to it. A language is essentially just a syntax, a tool for him to communicate instructions to a computer. What you want him to do is, and I shamelessly quote my CS prof. Jeff Ely on this one, "You need to learn problem solving before anything else."
Jeff taught us that by using a very simplified C language, teaching only if statements and while loops, and throwing simple problems at us, that could be solved using those. Later he introduces arrays, but in CS1, that's all we ever used. His toolkit used only doubles, strings and character variables. And he got us going with that. Another statement I like from him is "The power is in the mind."
Do NOT, I repeat, do *NOT* start with syntax. It's boring and completely useless as far as educational purpose goes. It's not what computer science is about. Give him a problem like "write a program that, from a number of pennies, can tell me how many coins of each type I have", and let him figure out the language he wants. The fact that he's researching it will teach him TONS more than anything you could throw on his desk, because, and I speak from being in his shoes not so long ago, he's a teenager. He won't want to do everything you say, so dropping a Python, or C or other language book on his desk is only going to frustrate him. Give him a problem, point him to the appropriate section in the library, and step back until he comes at you with questions.
Just my $0.02 of information on the matter, as a fresh CS grad.
---- I am certain of only one thing : I know nothing else.
I thought Antoine de Saint-Exupery's books were a little wierd, but the reason my son learned to read was not to read for its own sake, but to get to the fantastic riches that lay within books.
If you can forget about the mechanics of programming and find some project that will engage your son and, co-incidentally, need programming to make it come about. I think you will have an eager programmer.
I suggest something cool and physical, like a rocket altimeter, or an electic field sensitive music synthesizer, or a camera trigger to photograph a glass jar smashing or a light display, or something that balances weirdly with one of those solid state gyroscopes. Something the Mythbusters would be proud to do and your son will enjoy.
And then find a suitable embedded system to implement them in. Perhaps from silabs.com. They have some good cheap systems that will easily sequence lights or measure bubbling potion fluid levels and are inexpensive enough to blow up from time to time ($20 or so).
Nullius in verba
is perfect - immediate gratification as well as using APIs.
"4) On the topic of programmer speak show him Slashdot or Digg or something like that. Programmers have started there own culture in these places that he might be interested in seeing."
I would say that percentage wise there are very few programmers on here. Way too many wanabes that think they know everything.
You are better off on programing mailing lists or language forums like the Java forum.
Too bad there isn't a mentors forum anywhere. I would love a forum where nobody ever said RTFM.
See my blog http://ilovecookes.blogspot.com/ for light hearted technical information.
I think the best way is by using a robotics kit such as LEGO Mindstorms. If the kid is son of a geek then he probably already know LEGO blocks. Now, IMHO, new coders need to see physical results of their labor to be hooked, if they code a little line following robot and the thing comes alive, BOOM, they will be hooked. They will move quickly from LABView thingy to NQC and soon they will be very good coders. When we were young and all we had was a text interface with the computer, it was way faster to learn and code useful stuff. These days of ubiquitous network, fancy 3D graphics and bad operating systems, it's no wonder kids don't code anymore, look at the learning curve!!!! now, if you make coding a small thing again, with a pleasant learning curve and results they can show to people in awe such as little robots, you have a recipe for success. my 2 cents
-- Por mais que eu ande no vale das trevas e da morte, meu PowerMac G4 Não Travará!!!
html (not a programming language I know) -> javascript -> PHP -> PHP-OOP -> java/python.
then when he knows programming, learn him why we are programming this way, thus
ASM -> C/C++
pointers make much more sense when you know assembly.
(and no, assembly is not dead! )
This is roughly how I went through learning to program starting at around the age of 14...
Start with HTML... it's very forgiving and is pretty straight forward. It's not exactly a "programming" language since it lacks logic among other things, but it's a good introduction and, lets face it, it's probably never going away.
Then some basic C programming for shell would be good... get him to build a basic text-based game... or some ASCII stuff. Play around with ANSI colors, get some exposure to how the language interacts with the OS and is presented to the user... You could also get him to make a C program that manipulates an HTML file in a few basic ways, like lower-casing, or applying a font style to loose text... etc...
Then quickly move onto Java or PHP before you get to any of the more complicated things like references and pointers... once the basics are all there with C's flow control and the basics of variables and functions. Perl is also not a bad place to play around briefly for the regular expressions and exposure to more exotic syntax.
Java and PHP are EXCELLENT proving grounds to learn just about all of the fundamentals of coding. PHP is a lot more forgiving than Java, but Java is the closest thing to C if he wishes to go back and take in all of the more complex practices in C. The thing about PHP is he'll need to learn pretty accurately how a browser and web server interact, and the stateless nature of HTTP.
Then learn SQL. MySQL will do to start with... then move onto PostgreSQL or MicrosoftSQL.
Then I'd say dive into C# .NET or build some GUI apps with GTK so he can experience an event-driven model and get introduced to GUI coding.
I suggest taking a "tour" of the programming world like this because then you know what you're up against and so much knowledge is transferable from one model or language to another. Jumping around lets you avoid biting off more than you can chew. At least, that worked for me.
If he gets this far, he should expect his first 4 years of college CSE major coursework to be a minimal distraction from his beer pong competitions.
Move all sig!
Teenager, eh? Tell him chicks dig computer programmers.
Actually, if he buys that, he's probably destined for janitorial service anyway.
"In a 32-bit world, you're a 2-bit user. You've got your own newsgroup, alt.total.loser." -Weird Al
Everyone else has already pointed out my personal favorites -- Shoes, TryRuby, Squeak, Alice, and so on -- so I'm going to give you a piece of general advice:
He needs his own computer. Maybe more than one, but at least one, entirely to himself. And you don't get root on it unless he needs help.
He needs the freedom to be able to make his own mistakes, without it affecting anyone else.
I would even go one step further -- set up some virtual machines. Yes, he still needs to own the real hardware -- if nothing else, there's a psychological component. But virtual machines means he can deliberately sabotage a system without consequences -- what impact does "sudo rm -rf /" really have on a running environment? Let's find out!
Oh, and be prepared for him to make entirely different choices than you. Hopefully, he'll at least go beyond C -- point is, you'll know you've done your job when he disagrees with you on something -- and he's right.
Don't thank God, thank a doctor!
Precious bodily fluids if I recall correctly!
Women uh... women sense my power and they seek the life essence. I, uh... I do not avoid women,
But I... I do deny them my essence.
I learned C in a 400-level computer graphics class in college. I knew that I wanted to learn C and that I wanted to learn more about graphics.
Have the kid pursue a goal that he's interested in and find a tool to solve the problem/reach the goal. It could be in Excel and VB (for learning purposes! Geesh). It could be Python scripting for Corel's Paint Shop Pro. There are all kinds of tools for all kinds of tasks. It could also be programming a STAMP or a PIC microcontroller kit from an electronics hobby shop. Or MindStorm. Have the programming be a TOOL for solving a cool problem.
To be quite honest, I am terribly wrong.
There, fixed that for you.
why do people always recommend PHP at just every fscking occasion, admitting that it's "somewhat ok" and "will be better soon"? heck, if there are other languages around that are better than "somewhat ok" and are so right now, why (the hell) should one pick PHP? And why do you consider a language which looks like C a good language to learn programming with? Not that it's particularly bad, but even nowadays babys don't pop out with a preinstalled sense for C-like syntax.
I would suggest starting with web programming, specifically html, css and php. This gives a wide skill set, php is based off C so it makes the skill set easy to transfer, he'll learn some basic server administration and it gives an instant gratification that you don't always get with other programming languages.
For some people, programming is picked up like a passion- for others, it is not. Don't get yourself to thinking that someone is somehow invalid or stupid if they want to live their life as say a business or english major. These are people who have just as much place in the world- do not let an engineering superiority complex tarnish your son's teen years. Not every boy needs to be doomed to the family coal mine.
I personally am an example of someone whose father, older siblings, etc. are all programmers and much of my family is somehow related to IT- but I'm interested in sociology. What this has done for me is given me a very in depth understanding of technology, but a much stronger understanding of the people who use it and why they use it. Is this really invalid? Maybe your son can take advantage of his experience with a father whose so technology-oriented and apply it in his life elsewhere?
If it's a question merely of which technology your child needs to learn, that's different. You're not going to like this- but I'd recommend starting him off in the well documented and supported world of Apple Cocoa or Microsoft .NET, where a little bit of code can become brilliantly powerful in good time. The unix world of development is much more discrete, so it's best to learn on a more contained environment before diving in- however, that doesn't necessarily discount Java or C#/Mono in linux as good starter languages. I am just not familiar.
Don't point your child at a language or a system or a technology. You'll just bore them.
Instead, ask them what they want to accomplish, or what problem they want to solve. Don't even frame this in a technological sense. It's not "Do you want to build a robot that sorts DVDs?", it's "Do you want to have your DVDs automatically organized?"
Then, once they have something they're really interested in accomplishing, let them ask questions, and point them in the right direction to figure out the answers. Don't answer the questions yourself, even if you know the answers. "Oh, you think you need to control a robot, huh? How do other people control robots? Have you looked that up?" Check in on their progress every day and reward their effort, not their accomplishments.
Yes, it will be more painful, but they'll learn far more valuable skills and become much more independant and focused. Then it won't matter if they picked C++ or Python or SNOBOL, they'll have picked the best solution for them to accomplish their goals, and they'll have learned a wide variety of valuable skills, not simply "programming".
I don't *blame* Perl, because I happen to like it as a language.
I also agree with you that PHP5's OOP was a mistake (actually, I believe that OOP itself is a mistake, but that's beside the point), that PEAR is crap because PHP makes is way too easy to program like crap (I enforce strict guidelines on how PHP in my projects is to be written), and that it should not be taught as a first language (I learned PHP after I learned C, so I had some structure and good programming practices drilled into me)
I have several complaints about PHP and especially with the direction the language is taking (which is why I intentionally ignored some of the comments you listed), so much so that I may even consider using Java and JSTL for web programming. (Ow! I still feel pain every time I say that.)
To directly address the Subject of this particular comment thread, PHP will only ruin your mind if you don't already have a solid grasp of what good programming is (and when you do, it might give you enough reason to NOT use PHP).
How to best teach a person to program depends a great deal on the person. I myself learned on a Commodore 64 by copying BASIC verbatum from books starting when I was 4, and moving on to experiment and teach myself more and more as I grew older until I went to university and got a computer science degree.
However I have some experience teaching others as the helpful kid in the class who knew more than the teacher in highschool and as a Teaching Assistant at the university. Not everyone is motivated enough to pick up the Java API or C++ STL Reference and learn the language. Different people find different things satisfying, and you can figure that out fairly quickly through trial and error. I would suggest starting with a console hello world! If they think it's cool than stick with the interpreted console environment, (Python is probably a good choice, I've started people on C with mixed results) and move on to something with variables, flow control, and user input like a number guessing game. If they look at you blankly and ask for graphics maybe a scripting language for a game like RPG Maker or Aurora (Neverwinter Nights) may be a better place to start.
In general I'd say the key is don't push them; be someone they can come to for questions and sit with them on and off to be a guinea pig. If you have any more specific questions, just ask.
There is a big difference between kernel hacking, ray-traced graphics, video game graphics, sound synthesis, AI, web 2.0 interaction, robotics, and creating his own programming language. Find a project that he thinks is interesting, and then help him create it. Start small.
When I started with computers, I didn't have anyone to learn from or even a good library of books. I thought computers were useful, but really didn't care that you could create a database of 10 million entries with one, as no one explained the interesting data structures that could make it faster. Then, someone showed me how to create simple graphics with the Apple ][e. It's been fun ever since.
Wow, php is soooo terrible and it corrupts minds. Why are you still using drupal for your homepage? You deserve much better than that? :p
Reason being, you can teach the person writing it, how files are parsed, which gives some groundwork in basic I/O down the line.
Further, if your teenager is into blogging, etc... You can have them feed off that aspect... This webpage is your blog. It is the ultimate in customization. Unfortunately you need to write it yourself. Add CSS when they get bored of plain HTML layout stuff.
Of course, when he gets sick of editing raw HTML to add posts, you can guide them into PHP/Perl/Ruby/.NET or whatever your fancy is. I'd stick to something more basic, like using PHP, and start off simple, like includes for bringing text files in.
Once they get bored of that, work your way into databases. get them to make an administration page so they can type in things directly into the browser, and have it appear on the page. Basically, it's a place where you can start REALLY SIMPLE, get immediate gratification with the results, and build off projects to infinite degrees.
I've never been one to coddle kids, especially teenagers. Let them have a blog. Just make sure you teach them how to be safe about it. Explain your rules for privacy, and why they're important. Don't just shelter them from all things evil... They will have to learn how to deal when you're not around. Think of giving them this blog space as learning how to cross the street. Likewise, give them something interesting to do, that will challenge them, to push their limits. Not too challenging as you don't want to scare them away. Male it challenging enough to make learning worthwhile for them...
Really, the language they learn isn't that important, if it lets them achieve results. I started sphagetti-coding BASIC on a Tandy CoCo. In High school we used a language called Turing. I made a hangman game and a Connect 4 game in my grade 12 year. Last I heard, people still play that connect 4 game at my high school - almost 10 years later. I spent hours on it, and the more people that tried it out, and enjoyed it, the more I worked on it. That led to College, and learning C/C++... As long as you work up to it, keep challenging them at a reasonable rate, you'll give your teen a good grasp on programming. When your teen comes up to you for help and hands you a pile of unformatted code, tell them that you can't read it, and show them how to format to make it easier to read. Get them working first, however you can, then show them how to do it right.
I'm a 19 year old comp sci major going into my sophomore year in college. I took 3 years of computer courses at my high school that really helped me develop programming skills. I learned C++ first, then Java; I thought Java was easier to program on, but you might want to expose C++ to him first. Here is the syllabus for my C++ high school class: http://teacher.uscsd.k12.pa.us/ollendyke//ProgLang1.html [k12.pa.us] And my Java: http://teacher.uscsd.k12.pa.us/ollendyke//ProgLang2.html [k12.pa.us] Each section explains the topic pretty well, then gives 3-5 medium difficulty programs to write. This taught me up to OOP and got me very well prepared for college. As far as sparking his interest and getting him to want to program, I did it for the career choice. Everyone needs programmers and I want to see the dollar signs. You can also spark his hacker interest by hacking a cell phone, ipod, or xbox if he has one. Install linux on it, mod it, etc. Hope this helped.
And do you think the loose typing and automatic typecasting is a plus or a negative, in terms of first languages to learn?
I don't think that matters at all. I think what matters most in a fist language is immediacy of results and power of expression, which Javascript in a browser has in spades over a "real" language or writing a desktop app. Plus he can put it up on the web to show off to friends.
Given the whole Power thing I'd also start him off with one of the better Javascript UI frameworks so he can have cooler looking stuff quicker. probably any would do.
If he takes to Javascript desktop development could follow.
"There is more worth loving than we have strength to love." - Brian Jay Stanley
I'd suggest web programming. That's what got me into it, I know that it has all been done before, but what is your kid interested into? For me at the time, I liked GTA, so I made a fan site. Made a news system, expanded it so that people could post comments, expanded it so it had a simple user system, user privileges, admin panel etc. It just grew as my knowledge did. While it had been done before, there were other bigger GTA fan sites, there were news systems and downloads systems I could have used, I found it more fun to make my own. Why are you asking us what your kid is interested in? Ask him :p
Many of the CodeJam programming contest problems are interesting enough to get him hooked. There many other problems out there that may inspire him.
However, the bottom line (IMHO) is that programming is a task not every person will enjoy doing (even if problems are interesting enough, which does not happen very often).
My kids did not get a lot of interest in programming after all, so very likely you better forget about anything I said.
You know what I currently consider to be the best starting development area for a kid? The iPhone (or Touch). Seriously, nothing else will get you such impressive looking stuff you can show off so quickly, with things that kids like such as easy access to animation and a good GUI builder. The language is easy to learn to start, and the frameworks for the phone/Touch are paired down a bit from the Mac frmaeworks and really well thought out but not so daunting is scope. It's even a great way to ease into 3D development with a lightweight OpenGL.
Being a developer is only $99 and that's a cheap price to pay to get someone hooked on programming.
My second choice would be Javascript along with some kind of GUI framework, for similar reasons - really easy to get into, and write powerful cool looking stuff that he/she could show off to friends. The iPhone/Touch would be more portable though.
"There is more worth loving than we have strength to love." - Brian Jay Stanley
Don't, really, just don't.
You yourself should know that coding is an aptitude - if your kid wants to learn how to code then they will despite you, if they don't then no amount 'encouragement' will produce anything other than resentment.
Make sure your motive isn't 'I want to encourage my kid to code so they can appreciate what a clever and cool guy I am'. Your keenness to show off your kernal hacking skillz suggest there might be just a whisper of this in there. Be honest with yourself and your motives first.
Right, that said there's no reason why if your kid does have aptitude then you shouldn't facilitate things. Myself I have two kids of mid to late teen years. Both are completely computer user literate and virtually live on the net with IM, Social Networking, Gaming etc. Both have unrestricted access to their own PCs (in the home office tho - don't believe in PCs in kids bedrooms). For both of them I've dangled the interesting stuff where they can see it so they can pick it if they want too - interesting stuff is access to coding software, graphics software, game moding software, their own domain with complete access, pointers to interesting sites - slashdot and others, pointers to articles good articles and videos about tech, gadgets and coding etc. Nothing heavyhanded, I just dangle it for the picking.
The result is that my son just isn't interested. Sure he knows it's there but he's heading off to uni to study Earth Sciences and tech to him is a tool. My daughter otoh has the apptitude - she likes seeing how things work, likes taking stuff apart and tweaking it, and when I dangle stuff picks it up and runs with the bits she likes. It's unclear at the moment where her actual interests really lie - she does graphics to skin her social networking sites, writes bits of code to tweak toys and widgets, and likes modelling 3D objects a lot, but I figure what she does is up to her. If she wants to write more serious code then I'll help her and make the best tools for what she wants to do available, or more serious graphics then I'll make sure she has the software and knows where to go, but she's in the driving seat.
Oh and interesting bonus is my daughter has decided being a Geekgirl is cool and a great way to be an individual at school. Oestregen earrings for christmas from Fractalspin were an absolute hit!
Yeah, let him tinker with a high-level language. I would think a younger person would get bored with something low-level because they couldn't do anything "useful" with it. I know it became interesting for me when I reached the point where I realized I could write something that I found useful. That was VB6 then, I'd guess some sort of web technology would be the better counterpart these days.
If I was going to encourage someone to start programming today I'd probably show them Processing:
http://processing.org/
From their site: "Processing is an open source programming language and environment for people who want to program images, animation, and interactions. It is used by students, artists, designers, researchers, and hobbyists for learning, prototyping, and production. It is created to teach fundamentals of computer programming within a visual context and to serve as a software sketchbook and professional production tool. Processing is an alternative to proprietary software tools in the same domain."
The other nice thing is that Processing is basically just a Java library so it is simple to move beyond simple visualizations, etc and do more serious Java programming.
I've been having great fun with it, I'm able to do professional work with it (using Eclipse as an IDE, etc) and there is a growing and quite vibrant community of artists and coders developing around it.
Some other possibilities:
- Python-based text adventure as a first (big) program.
- Python and PyGame based game/app for the OLPC
Complexity Happens
There are so many programming languages used for so many purposes that choosing a particular language and forcing it down the throat of the guy may not be a good idea. Nobody would want them to be forced onto doing something they are not interested in. The best way to make him learn programming would be maybe ask him to take few computer courses in schools, get him interested/motivated in computer programs, help him identify what he would like to do with his computer and hope that whatever language he programs in it would be for open source.
scratch.mit.edu
I hope this has already been suggested, but I did not check.
Scratch is a programming tool for kids. It picks up where Logo left off. You use normal programming construct like control blocks and variables, but everything is drag and drop.
The easiest things to make with Scratch are little interactive games and short animated stories. Both very rewarding things for beginning programmers, with immediate visual feedback.
As a followup to my last post, I thought of an ever better way to get the ball rolling - have him develop for the simulator first. It's free to download the dev kit with simulator. Then say, if he can make something that impresses you enough you'll buy a Touch (or iPhone) and a license to develop. Then he has some motivation to really explore programming in depth enough to really learn something.
"There is more worth loving than we have strength to love." - Brian Jay Stanley
No matter what, he's competing with low-wage offshore workers. The money is in law, medicine, finance - anything that can't be moved offshore easily. Do you really want to orient him to a profession where he's competing with people making $10/hr without benefits?
I am actually in the same boat, however, my son is only 10! He want's to program because it's a big part of what I do.. but, while building stored procedure to traverse billions of records in a database is fun and challenging for me, it's going to bore him to tears.
I've thought about C, but, I think that's a bit to complex for a 10 year old. I'm really excited about Vala, but again, maybe thats a bit much for him still? (again, I want to KEEP him interested) Perl, eh.. easier, but I still fear it wont be interesting enough.
Soo.. my thought. Unreal Tournament. Once you understand program flow, most other languages will become easier to understand. Maybe he gets good at building new weapons, new game types, whatever.. and later says to himself, man, I really wish I had a tool that did this or that. Someone without any background, might not even go there.. but with even a little background he may say, how tough can it be?
anyway.. just my $.02
Tell him that he'd better not ever do it, and that if you catch him doing it, he's grounded for a year.
Downmodding is the refuge of the weak. Don't downmod, make a better argument!
I think it depends upon interest. Scheme may be a good answer. Scheme is used to extend GIMP. So if you want to see various forms of pretty pictures, GIMP is the way to go. Logo would be better, but that is harder top find on a Linux distro.
I know, most internet languages are "bad"...
Here's the thing, though:
Web development is fast and easy to start learning, fun to do, and exposes a developer to many aspects of programing.
C is great, Java is useful, but PHP or C# is quick and easy to learn. If you want your child to write code, give them something they can see quick results with small amounts of effort at first.
Start with the web to gain the interest, then move on to lower-level languages once the passion is there and the ability to grasp the advanced concepts has been primed.
1) refuse to buy games :)
2) tell that only way to get games is to build them yourself
3) provide compilers
I taught my son to use "sketch" http://sketch.mit.edu which has him understanding the concepts used in programming. I even wrote a few games myself.
I'm not sure if this is the optimal approach, but when I was a seventh grader and already had knowledge of HTML, I taught myself JavaScript out of the Wrox book. As a first programming language it's simple -- you don't even have to worry about compiling, your changes take effect instantly -- and it's fun, you can create things that you can share with friends very easily. And it'll teach you all the basics of programming.
I went on to learn C++, PHP, SQL, Java and C#.NET/ASP, in that order, after that, and ended up with a great job every summer starting freshman year of high school (it's nice to get paid a whole lot more than your peers for a desk job).
I disagree! I learned $crusty_old_language back when computers had six bits and were lucky to get 'em, and I see no reason why anyone else should benefit from the research and development that's taken place in the last forty years. A pox on all these $trendy_new_language advocates who want to replace my ancient $crusty_old_language-based systems with something that's actually readable and maintainable! I say, force the kids to start with $crusty_old_language like I did, and hopefully most of them will be discouraged from entering the field and competing with my out-of-date skills, and the few that actually manage to persevere will be so traumatized by the pain of learning $crusty_old_language that they'll be completely insane and will want to help me maintain my stale, fragile, unreadable pride-and-joy. Now, where'd I put that deck of punch cards?...
I remember punching in codes out of the back of Compute's Gazette, tring to get games to run on my C64... I remember writing an artillary game with my neighbor friend. What I remember most abou tmy houth was doing programs that were siply 'fun'. I would suggest tring to make some sort of simple game together, then moving into more and more complex things.
Give him K&R ;)
I'm going into 12th grade, so I'll inject my opinion and help:
First off, to everyone else- the zillions of comments are helpful to me as well.
Now, I started with a 5th grade teacher who taught us HTML, so I got lucky in that sense, and all the adults around me are computer nerds (my godfather works for LSI). I got into computers early, and now I'm trying to learn to program.
I started with the "Teach Yourself in 24 Hours" books (I tried both Visual Basic and C). No. They are dull and cannot capture attention. Few books are useful for me, the "C++ for Dummies" I'm trying now isn't too bad, but it is hard to get motivated learning from a dull book for teens (even those of us who like to read).
Long have I wished for SOMEONE to teach me, not someTHING. Now, if you find a good book, that's one thing, but it's also very rare. So I recomend teaching him one-on-one. Even if you teach out of a book, you can make it more interesting, and you can change the book's teaching to fit his likes and styles.
The point is, the best way for today's teens to learn something abstract like languages is from another person. Everybody learns differently, and a book cannot compensate. Nor can it answer specific questions ("so, what does this '#include' thing actually do?").
I just thought you'd like an opinion from somebody who understands the situation.
I got my first computer when I was about 5 years old (a Dell XPS D333, I actually still have it somewhere). I loved it, I would play those educational games on it, then I started using the Internet. As I got older (around 9-10 years old), I wanted to know how this fascinating machine worked. So I started reading about computers, how they worked, the operating system manuals, etc.
Around this time, when I was about 12, my grandmother, being a huge packrat who can't throw anything out, had been given 2 very old IBM PS/2 PCs that her office was about to throw out. These computers ran Windows for Workgroups 3.11. We would go to my grandmother's house every weekend, so I spent a lot of time on this old computer. Then I found a very interesting program, qbasic.exe, QuickBASIC, as I would later learn. I had no idea what it did, so I pressed the HELP button and read the entire help menu. So I started playing with it, entering commands and codes that I learned in the HELP Menu.
Soon I had made dozens of programs, including a program that played music, a program that had a paint-like drawing board, and dozens of separate misc programs. Then I thought "how can I do this on my home PC?". So I talked my mom into buying me some programming books, which included a few BASIC-based programming environments, and learned even more.
Now I'm 16, I know how to program in BASIC, Visual Basic, C++, PHP, LUA, and some C, and use Linux.
Could be worse - my first programming language was APL (yes, THAT APL). Believe it or not, that was the programming language that my high school tought back in 1979.
The two programs that got me interested in programming on the Apple II:
10 PRINT "I AM THE BEST"
20 GOTO 10
And something like...
10 HGR2
20 X = 0
30 HPLOT X,10 to X,100
40 X = X + 1
50 IF X 100 THEN GOTO 30
Maybe it sounds cheesy to us, but between my own kids and my nieces and nephews, I find they're totally infatuated with my Atari 130XE. BASIC obviously has its flaws, but BASIC serves its purpose well: BEGINNERS all purpose.... IMHO, your teenager could learn the fundamentals of programming and logic. Learn a little history, gain an appreciation for the difference between 128K and 4GB, etc. And if you can structure code well in BASIC, you're set for life! :)
As a side benefit, you could also have fun playing some vintage games when you're not hacking away...
Drop linux, show graphical games
Well, I'm not a programmer, or a *nix kernel hacker, just a front-end web developer and designer. I got into computers from an early age because my dad showed me video games on them... then, when I was 11, I wanted to create a website for a StarCraft gaming clan (lollums). It was really cool creating something like that, and I enjoyed the challenge.
I messed around with that for a while, but I really started to get into it when I was 16 and couldn't find a job. I thought that maybe I should try doing freelance web design.
Now at 19 I'm pretty much financially self sufficient, I work at an ad agency and freelance on the side, and am also in school. Tell your son that he could be making $50/hr freelancing during college. It's rewarding and challenging, and it will sure beat his friends' restaurant jobs.
Freelance Web Designer - Portfolio
Someone please mod parent up - Robocode was designed specifically to get younger people into coding.
I work at a University, and we often get classes of 14-16 yo's in to "sample the University experience". We sit them down to do a little coding, using Robocode. A quick tutorial on the basics of coding in Java (Robocode's set up to provide the basic commands of Logo, but with the ability to do much more complex coding as well - some of the Robot AI out there is very impressive.
It's graphical, it's robots killing each other, and it's teaching the fundamentals of programming and OO.
The Robocode class always gets high marks from the youngsters for the fun value.
"I'm in a bit of a bind. My young teenage son is starting to get curious about ____, and in particular, ____.
Only on /. would those blanks be filled in with the words "computers" and "programming".
It's not just about readability. Take a look at this.
It is quite readable, logical, easy to follow. It is still an abominable example of really bad/broken code. Especially since it is presented as an example of good code.
Good judgement comes from experience, and experience comes from bad judgement.
- W. Wriston, former Citibank CEO
Hi...I'm a Senior Computer Engineering Major at Purdue University. It would help if I knew your son's age but assuming he's at least in grade 5, I'd recommend computer books which teach programming as part of an activity, not as the primary objective. For e.g., get him a book on implementing his own game, or a book that teaches AI, or web-spidering. I do not believe that any one language is better suited for beginning programming. Heck, I learned to program in C, moved onto C++, a little x86 asm and then to php/mysql. Following the books will quell the discussion/debate on choosing languages anyway; he'll just follow what the books demand.
Another idea would be to bring in some sense of goal-setting. Once he's through with a few simple projects(will take a few months, maybe up to a year), he'd have developed inflections toward one or another programming language; then encourage him to participate in "USA Computing Olympiad" Merely perusing problem sets and practicing is all the impetus you need give him to help him "fly away from the nest".
Hope this helps.
Gud luck to you and your son.
Agent Smash.
Though it isn't using nix tools, lego can be fun to play with, you can use the basic programming tool then move on to explicit programming.
It is great because you can see the results, you can use interested extensions, such as an ir camera, bluetooth, proximity detecter, etc, or you can build your own...
anyways, they are designed for beginners, but i am at least an intermediate programmer and I have a lot of fun with it.
I have no idea how your son is, but for me, the jump was when I figured that I might be able to make something I was interested in by coding. Actually, I think this happened to me several times, first with logo when I was about 6, then text games in basic, hacking bbs'es, and later on OO, higher level languages to produce games, lower level languages to write drivers, etc.
Agewise, I'm a little in-between with regards to your post: I'm in university, but old enough to have used a bbs. Sometimes I wonder how I would have gotten interested in many aspects of development, seeing as there's a lot more layers of abstraction to dig down through than there used to be. Its not like you can just drop some inline assembly into your c program and start writing graphics drivers anymore. In many coding applications, learning curve to producing something 'professional' looking is considerably longer than it used to be, and I'd imagine that this would be the biggest challenge to motivation.
One immediate upside I can think of, though, is that a lot of games now come with development toolkits, and working with these can involve playing with fairly advanced scripting languages. Try Neverwinter Nights, perhaps. This might be a place to start if your son is into games.
Or maybe he's into websites, or maybe he's into business concepts, or maybe he's into visual effects, or math, or whatever. The point is that he'll start teaching himself if he thinks coding can help him accomplish something he's interested in.
We fetishize coding & languages because we want to solve problems & work efficiently, but coding will probably always be a means to an ends... So far as I know there are no art galleries hanging up beautiful segments of code on the walls. So if you start geeking out on the advantages of linux, shell scripts, OO, GOF patterns, pointers, automatic garbage collection, this language vs. that, etc., there's a good shot you'll lose him.
If he thinks coding will help him create something cool, he'll learn to code. Once he starts this process, then he'll come to you for information when he needs it, and you'll have a lot to offer. At that point you should give him only enough information so that he doesn't get stuck, and generally figures things out by himself.
It's purpose is that. Teach a kid how to use a computer and eventually do some programming, it's there right on the website:
You may have to relocate in a bario outside of Rio to get one though. :)
I started learning PHP when I was 17 years old because I had a serious need to manipulate the Internet. I had trouble in my ADD youth trying to learn C/Java even though I already knew I wanted to learn to program... I couldn't learn something that didn't have immediate pride-based benefits.
As soon as I got my hands on a database, and a web hosting solution, I went crazy! I created all sorts of (yes, horrible programming solutions) amazing features and experiences that I could *immediately* share with my friends.
Whether you think Python, Ruby, PHP, or whatever is the *best* language, I think that for teenagers and for anyone really, learning how to OWN and MANIPULATE the INTERNET is the most valuable tech skill you can have in this day and age. It puts you in the position of CREATOR, and gives you the biggest reach you could possibly imagine to share your creations.
Making a video game is not going to compete, making a software program or hacking a video game is not going to compete, but teach him how to build dynamic database driven websites and he could be a billionaire before he's 18.
To be honest I started on a C64 with my dad when I was about 8, but it wasn't until 16 that I actually wrote a functional line of code for myself.
Sara/28/Female
You might try working through an OpenSocial plugin. It would be something that he and his peers would understand. It's fairly simple, broken up into bite-sized pieces, and it teaches the basics of asynchronous/event driven programming, javascript, and the DOM. While it's certainly not hard-core programming, I think it lives somewhat nicely in between useless toy programming and the real world.
Word of warning. I'd steer clear of the Facebook API. It has a flow that could really frustrate and turn off someone trying to do something simple.
The best way to encourage programming is be excited about it yourself. I'll warn you against trying to push your children into it though. They will resist and hate it. Instead, I assume your already excited about programming. Share your excitement with them. Look for cool stuff to program /*little self promotion -- http://bee-eee.com/ */ Tell them about your successes. Show them the stuff your think is cool.
When they show interest I'd set them up with C# Express as I think it's the quickest way for them to do something beyond printing "Hello World" on the screen.
Have fun, and don't require them but inspire them. Trust me if your excited about it they will in time show interest.
Modding games is probably the easiest way to get into programming, and it has a very quick level of gratification which keeps kids interested. It starts out as modeling/skinning, and can extend to AI and complete modding, which can involve quite a bit of typing.
It's tempting to want to expose kids to "real programming" right off, but quite frankly, anything they could quickly do on their own isn't that interesting--and it's debatable if it's even that wise of a prospective career choice nowadays.
If they have the desire, then Java is free and a literal layout manager is easy to understand.... -but when I was in school, I remember most people reacting most positively to Visual Basic classes, I think because of the drag & drop environment--it was easiest to turn out a program that did something that they could actually imagine being useful. ASM courses (with their file-copying-program and file-batch renaming-program assignments) did not seem to get the same level of enthusiasm.
And I dare say,,,, more people got jobs doing something closer to Visual Basic than they did doing ASM.......
~
I would advise you to give him interesting or rewarding problems to solve. If it's programming, once he learns the basic syntax, have him tackle classic logic puzzles like Towers of Hanoi or something similar.
There was a problem I remember from my computer science class a couple of years ago (I took all of the CS courses my high school had to offer my freshman and sophomore years) where you started in one corner of a grid and had to reach the opposite corner. In between were obstacles and bonus squares of different numeric values called "cookies". The assignment was to write the code to create the grid and then navigate it (the GUI code was taken care of, thankfully). That was one of my favorite assignments.
For general technical knowledge, you could always do what my dad did to me: he offered me a broken laptop. I didn't have a laptop at the time (and I don't have one anymore since that one really broke recently), and he offered me an old ThinkPad T22 (Pentium III class, this was in 2005). What was wrong with it? The BIOS had something wrong with it that messed with the power management features. The result is that Windows locked up whenever you unplugged it from the AC adapter. So he threw Xandros at me and let me have it. After that, it wasn't long before I started downloading every distribution I could get my hands on.
to the OP: Let go of your own geeky biases and get a feel for what interests your son. I love programming, but only games and visuals. If at 13 I thought that what I learned would lead to programming information management, protocols and other boring shit like that, I would have stopped learning then and there.
Back in yesteryear, kids' first exposure to programming was via visual language tools like 'LOGO' where you learned the basics that a few sequential commands resulted in the "turtle" doing A, B, C, and drawing lines, etc.
Next was something compilerless like BASIC where all you had to do was type 'RUN' and see "Hello World".
I would recommend Flash actually. There's way more "pay off" and fun to learning programming through that environment and your sun can contribute to the wonderful crapfest that is NewGrounds. ;-)
I started programming with TI-BASIC in 7th grade because I learned that it helped me solve repetitive problems very quickly (even though after accounting the time it took me to write it and the understanding of the process I needed it ended up being the same education in a different form).
Then everyone who learned TI-BASIC started programming TI-83+ assembly, and I never got around to learning that. Now two of three of them are in MIT.
I took AP Computer Science this past year and liked it, I hadn't programmed anything for so long. It was in Java, and we learned pretty much only the basics, but that's a very solid foundation for just about any OO language...
1. If your kid is truly interested, give him documentation and help him out when he gets stuck. A prep book for the APCS test might be documentation enough.
2. Documentation also includes other people's code. The guys who are at MIT never took a computer class but learned from copying others' code.
3. If he gets stuck or disinterested write a simple program that does something awesome like flash colors repetitively or a shoot cannonballs at different speeds and angles and calculates the x,y,dx,dy in live outputs. Then show him the code and be like "well if you change the gravity variable here look at what happens... oh you can add sideways gravity too I guess... and make the cannonballs bounce off the walls..."
teach him how to use google and tell him to read slashdot - that's all he'll ever need (well, maybe an iRC client, but he can use google for that :D)
I have a 5 year old and a 9 year old. Last year I started them both out on alice.org (actually storytellingalice). I have tried scratch but they prefer alice. I am now starting to move my 9 year old over to python and a litle lua. He loves online games and I am using that angle. Pygame is also useful.
my .2 cents
johnmwillis.com
I think you're on the right track teaching him C (absolutely not C++, because it's so anally retentive that he will decide programming is the most boring thing in the world). You know C, and it has all the features a programming language needs—and no more. C also resembles many newer programming languages enough so that once he learns C, he shouldn't have any trouble picking up languages like Python, Perl, Java or C++. I would say that guidance is absolutely necessary—teach him to write unobfuscated code (e.g., do not be impressed when he tries to show you how much he can do in a single line of code), and encourage him to comment abundantly. I'd stay away from pointers—stick to the high level aspects of C; low-level programming is for a few specialists nowadays, and chances are he will never have any practical need to use such techniques. (If he does, he will learn.)
Another possibility is to teach him HTML and Javascript. I'd do this after laying down the fundamentals with some C programming—but the gratification of seeing the effects of his code immediately on the screen might be a powerful motivator—especially if he's visually oriented.
Great men are almost always bad men--Lord Acton's Corollary
I think a great way of learning how to program is to learn him to discover what functionality that could solve a real/virtual world problem.
Ex.
1) How to displays news on a webpage
- Break down the steps into small issues
- Setup a (L/W)AMP site
- Take some code examples from php.net
2) Build a budget/accounting app for his household economy
- Database setup
- Income controlling with frequency
- Expense controlling
- Status view
- Build prediction reports
What language, database or what ever should be of whatever is easiest, flexible to work with. .NET. .NET makes my day a work :)
I myself started with very basic Perl and found it to hard and went on to ASP/VBscript and Visual Basic and today I only work with C# and
Why? Because I work with programmering webservices, websites, e-commerce sites, integration bits and pieces and C# and
start with logo, it was designed for children - and basic programmers [just kidding]
FreeBasic is a project that started just a few years ago and it is now more than mature. You can compile win32 programs from the command line (not interpreted or bytecode), use c dll's and the windows api and just about anything you can imagine (you can even program OO techniques if you want). The freebasic compiler is written in freebasic.
Of course its still BASIC, so the program above (minus the line numbers and with the comma gone from the end of the print statement) will compile and run just as well as it did 30 years ago.
In addition, there is not only a lot of example code with the distribution, but a community that is available to share with and learn from.
http://www.freebasic.net/forum/
I'd expect this crap from a former high school football star or something...but seriously, this is pathetic.
If your kid LIKES computers, he'll be interested in them. Your attempt to poke, prod, force him into liking your particular brand of fun is...well...pathetic.
Don't do anything. He'll either learn it or he won't. If he's interested, he knows he can ask you for help.
C++ primer plus by stephen prata.
I don't usually write flaming posts, but C++ as a teaching language ?!?
I agree with both of these points. C++ is not that great as a teaching language, but I've found C Primer Plus and C++ Primer Plus to be excellently written, beautifully expositional books. The way I describe it to people is
With so many books out there, picking one good book that will reliably educate a variety of novices is a minefield. You could commit to a book, really sacrifice your time and attention to the material, and find out only a week later that it wasn't worth the effort. These two books are the only two I've come across that properly reward that sacrifice for the novice, with mastery of what it sets out to teach. Learning C or even C++ from these books provide a strong foundation in expressing concepts in a programming language, and with the complete command of those concepts in that language, it becomes possible to make the bridge over to new languages -- where you'll invariably have to rely on less well-written books.
And when you do, you can take the poorly-conveyed concepts in those, whack them against your solid foundation in C and C++, and watch what parts of them fall apart as poor or wrong description of the new language's features; and which hold together as something to learn and internalize. Without that solid foundation, whacking both bodies of knowledge against each other will make them both fall apart in your head.
The only thing these books are not good for is preparing the novice for the general quality of instructional books out there. But then I'll recommend the poster gently break Sturgeon's Law to his son.
Comment removed based on user account deletion
I don't think typing in BASIC games (or pages and pages of hex dumps) from a magazine works for kids today
Well, there's no reason it couldn't, but there's also better stuff out there.
In particular, Scratch (http://scratch.mit.edu ) shows a lot of thought and promise.
And if that's too simple, a kid may as well be doing work in Flash or something nice a media friendly....
Libertarianism is rich wolves and poor sheep playing gambler's ruin for dinner.
Several ground rules:
;-)
1) Keep the class fun.
2) Keep it competitive - let the students challenge each other.
3) Keep it challenging.
4) Allow the students to reuse code from each other - as long as it is not central to that particular assignment.
Note on #4: I.e. if the program is suppose to accomplish a specific task, so what if the students re-use each other's code for generating a mouse cursor, button, etc? What really matters is that they wrote the code/logic that achieves that particular task, can demonstrate it, and explain it. Let the periphery be just that.
Honestly, a lot of the above is what got me into programming. I had a great teacher who let us go at the assignments. As long as we got the assignments done, and wrote the core code ourselves it didn't matter. We shared code for buttons, mouse/keyboard drivers, video drivers, etc; but we still wrote the central functionality ourselves. It ended up becoming a challenge to see who could outdo who, at least among the top of the class (and everyone else got to enjoy the show too!).
Let them write games, and other things as well; and challenge them to come up with new solutions. Teach the real heart of education - how to learn - as well as the core material - the actual programming language.
The kids will enjoy it; and their own sociological structures will keep feeding it as well. And best of all - you won't get bored teaching it since the kids will always come up with something new.
Truth is like the sun. You can shut it out for a time, but it ain't goin' away. - Elvis Presley (source: imdb.com)
Suggest he learn Lua and make a World of Warcraft plugin.
Again this isn't to say I don't love my dad, or appreciate time spent with him, but I would much rather go sailing, skiing, talk about investing, or just about anything else besides work on math problems with him. It seems this could be a similar situation, a veteran kernel hacker with poor teaching skills could really turn off someone to programming because their insights, ability to see through problems and solve them without needing to express what their brain is actually doing can be extremely detrimental to the learning process and therefore ongoing interest in a subject.
I wish I had modpoints -- argh. This paragraph really beautifully states what a dad's relationship is with his son, and what a teacher's relationship is with a pupil. Being able to teach has something to do with being able to externalize and communicate the thought process between both parties, and for the teacher to be able to temporarily (if not a professional instructor) unlearn enough to be at the student's level.
I think it's both a rare talent and a valuable gift to provide a child. My dad either had the talent or stretched himself to do it -- and I recognize that as an incredibly precious thing both to give and receive.
If you're not familiar, Second Life is a virtual world you can log into and play around with, for free. In this world, you can create things, such as virtual houses, cars, spaceships, whatever you can imagine. The key thing is that it has its own embedded toy programming language called LSL.
I recently taught an undergrad course, targetted at non-comp sci students, to teach them programming.
http://www.francischang.com/professional/games/
Our thinking was that a lot of us got interested in computers, and then programming, is because we liked video games. We're trying to motivate learning by having people go through the basics of Second Life content creation. I think it's a bit more rewarding when you can say "Hey mom, look I made this game" as opposed to learning the formalities of typing and writing maintainable code. These things can come later.
It scales out a little bit too - you can make a few dollars in Second Life in various ways, one is by selling and creating new content. Possibly your teen can earn a bit of a summer income from what they learn in SL - a great way to develop their entrepreneurship skills.
And hey, if you're not familiar with Second Life, maybe you and your son can explore and learn it together. Of course, there are drawbacks to letting them explore - For instance you will no doubt encounter objectionable/pornographic content eventually.
On a completely different note, another fun way to learn the basics might be to play around with Flash or Phrogram.
--
#include <malloc.h>
free(your.mind);
What would you suggest as a good server-side language alternative?
I would go for the gadget/widget type development (Google, Yahoo!, Mac OS X) which I think just require HTML/CSS and JavaScript.
It's probably the fastest way to get something functioning that looks good and works well and with the added benefit of being easy to demonstrate online and share with friends.
Friends' feedback of how something is cool and probably worth just as much as your dad saying how groovy your kernel hack was.
Give him a Windows machine and let him experience all the painful experience with spyware, drivers, and the friendly BSoD. Then show him Linux and how easily things can be done from a powerful shell. In no time he will love to write shell scripts to get things done quickly. The next thing you know is he picking up python by himself. Eventually he realized the performance issue with scripting language and move on to something like C++.
At least that's how I ended up getting into programming.
This is the wrong time to pick Python for teaching. Python 3.0 is coming out in months. It's going to be incompatible with all the 2.x versions. There's going to be major changes that effect everything all the way down to "Hello World."
That sounds like a big confusing mess to deal with explaining to a student.
Link to python 3.0 info...
http://www.python.org/download/releases/3.0/
How about picking him up a copy of Torque Game Builder, or at least trying the demo. The scripting language is loosely typed and easy to pick up, with C-like syntax.
TGB
Coding should be taught as a means to an end, not as an end unto itself. That end being the expression of abstract ideas. Get the kid excited about an idea that requires coding in order to express, or test out.
When I was in high school, there were two side projects I worked on that really piqued my interest. One was a "contest" of sorts I got into with another kid, where we tried to see who could develop the fastest sorting algorithm. At the time, neither of us realized that this wasn't a particularly fruitful area of investigation. I extended my coding ability not for its own sake, but because it was necessary to express (and optimize) the algorithms I was coming up with.
The other project was a tool for designing autos in Steve Jackson's "Car Wars" table-top game. So there was a problem, and I was attempting to leverage the computer to create a solution. I didn't learn to code because coding is inherently satisfying; I learned to code because creating elegant solutions to interesting problems is inherently satisfying.
I was in fifth grade (twenty years ago, wow!), and I was given a book about computers, which had in it an example BASIC program which was something like this (pseudocode, I never properly learned BASIC):
print "What is my name?"
read name
print "What color am I?"
read color
print "How tall am I?"
read height
print "Hello, I am " name "."
print "I am a " color " color."
print "I am " height " feet tall."
I brought this to my Dad and asked if I could get our computer to do this. He said that we could, but we would do it in a different language (we did not have BASIC on our Mac). He coded it up in a Pascal interpreter. One great feature that it had was auto pretty printing and error highlighting, so proper formatting was indeligably imprinted on my mind, and errors were easily found.
After playing with the program for a while and enjoying it thoroughly, I was told that I could do programming instead of math for school (I was home schooled at the time). I jumped at the chance. My Dad would simply give me new tools to play with (loops, arrays) and puzzles to solve (add n numbers where n is specified at runtime, print ASCII graphics, play shoot the wumpus).
Eventually, I got to the point where I had learned the basics, and he introduced me to the Mac drawing primitives. I then drew faces and such, with ears, ears, hair, etc. Then I switched to a real compiler and went on to create a whole application, with menus and options dialogs to choose how you wanted your face drawn, and all the basic stuff for an application. I remember one of the final things to do was to have an option for glasses, and an option for curly hair (a series of circles; my Dad told me about sine and cosine to do that nicely) -- this was to mimic my Dad, who had glasses and curly hair.
At this point, it was the end of the year, and I was then allowed to run loose and do whatever I wanted, and I learned to use the documentation to find out what I needed. I never looked back.
Not that you're going to see this comment, but.
Programming is learned as a necessity to get something done.
Put a task in front of him that you know is going to require him to program to accomplish it.
Language is immaterial. He'll find tools to accomplish his goal.
He might start out just running data through piped shell commands, he might use PERL, he might even fiddle around with SQL statements.
Eventually, he'll program.
Or, he won't.
There are basically two ways to approach things: from the hardware side, or from the math side. The spectrum of languages is something like: machine code -> assembly -> C/Fortran -> C++/Java -> Python/Ruby -> Lisp/Smalltalk -> lambda calculus.
If your son is interested in abstract math, you'd be hard-pressed to find a better teaching language than Scheme (with SICP, of course).
If he's more into concrete, hands-on stuff, why not assembly? It isn't all that hard, and will teach him a lot about how computers work.
Of course, you could pick a language somewhere in between those extremes; but I think sticking to one end of the spectrum or the other is better for teaching and learning, since there are fewer distractions.
Everybody can teach, those who say they can't haven't tried hard enough....He is your child, take charge and be a dad not just a biological father. He will enjoy learning from you more than anyone else. Good Luck
So, you're a kernel guy, give him a computer with just Bash, gcc and vi: :D
"Dad, this doesn't have anything?"
"You want MySpace and Messenger? Do it by yourself! Start with a Windowing system"
Nah! Just kidding, why don't you start with something simple that is fast and graphic, like HTML and JS. No compilation, and very basic data structures that can do a lot of stuff.
Then, if he's truly interested he'll decide on his own... let's hope he chooses the OSS way.
Tell him he's not allowed to program.
None of them can see the clouds; The polished wings don't care.
I created a small project that uses Ruby Tk. Is not Quake Arena, but you get the point.
http://winlearnseries.sourceforge.net/
I don't agree with the idea of dumb-down development.
Programming is about rules, lots of rules.
Programming is like comedy, either you dig it or you don't.
My litmus test is the rubik cube. Give a teenager a rubik cube.
If she/he toys w/ it for a while and then tosses it. Don't waste your time.
If she/he tries for a while and then asks for directions. Good news, she/he is ready to learn programming.
If she/he tries, fails and then returns tomorrow with the cube solved, you have in your hands a kernel developer.
If she/he already knows how to solve it and you have not bought her/him a laptop yet you are wasting precious time.
If you don't know how to solve the Rubik cube, you clicked the wrong link, this is Slashdot, not Digg.
- these are not the droids you are looking for -
one word - traceroute. This is the thing that caught my eye. To see the interconnections of nodes across the internet that make it possible for me to visit some xyz.com website... I was sold by hop 3.
Been a net-junkie ever since.
When I was a wee lad, I came across and read "Peter Norton Programmer's Guide to the IBM-PC". That book hooked me on all things PC.
It detailed the intricate workings of the PC and the "revolutionary" concept of BIOS interrupts.
Years later, when interviewing candidates for programming positions, I would ask them "When you press the letter 'A' on the keyboard, what happens ?". Their answer would usually be along the lines of "An 'A' shows up on the screen". I would then ask "Why?". If they were able to articulate anything better than "because", they would usually get the job.
I'm now an old person, and I know my views of what programmers should and shouldn't be are probably dated, but I think the worst part about his latest crop of programmers is the total disregard for what actually happens at the machine level. This is what contributes to the crappy, inefficient and unintelligible code that we see being produced today.
Imbue in your son the basics about what a computer is and how it does what it does, and you will be doing him a great favor if this is the profession he chooses to pursue.
I am not advocating that every programmer needs to know how to write a BIOS and put it on an EPROM and replace the one they have in their computer, but at least know what the BIOS is and why it is so important in the grand scheme of things. Nowadays, people learn VB.NET and think they are gurus because they can make a form pop up on the screen. I'd like to see them dive into Microsoft DOS technical documentation and make heads or tails out of Microsoft's "List of Lists" to be able to recover data from an accidentally formatted hard drive.
I'm ranting... just my two cents...
If i was ever going to learn to program besides a rough understanding of BASIC etc.. although thats where most people would start initially, then i would definitely go for the Apple SDK. Everything is there provided you have a mac which seems to be the trend amongst teenagers these days anyway. For free you get the SDK, a simulator to test it on and all the hardcore optimization programs. It is in objective C, which is harder to program but the market seems to be coming up pretty big these days for that because of Apple so if you are a newstarter with a fresh mind would it be that much more difficult? I mean for even a (relatively)simple project you could perhaps make some money or at least get a free app on the iTunes Apps page, now how cool would that be for a teen amongst his/her pals. I reckon this would be a winner. Some apps so far are extremely simple but popular. The hold button was in the top twenty at least which is basically hold the button for as long as you can without letting go, ala get a high score. Simply put a start stop timer button recording the highest variable. Now thats an easy program but on the iPhone/iPod Touch very very cool and fun!! p.s. i haven't found a way to cheat on it yet either gggrrrr.......
I started my programming with some old DOS based OOP programs, like ZZT and Megazeux. It's for a much more specific purpose (games) but it's a good way to start understanding if-then-do and other logical components of programming.
And Megazeux is also open sourced (and now available for every friggin' OS out there), so once you're tired of its limitations, you can expand them. :)
http://sourceforge.net/projects/megazeux/
sw
Java was my first computer language therefore I recommend it; "A First Book of Java" by Gary J. Bronson, contains great info to get you started with Java. The two languages they teach at my school are C++ & Java...
Well I'm 14, and I never got into programming, but I've always wanted a website. My brother is a programmer and he told me to pick a language to use and learn it, he said I had to learn on my own. I picked up on PHP very quickly and I'm on my way to obtaining my own blog. Progress is slow, and it takes time, but the urge to want the final completed project is what keeps me going. www.smuckingfart.com is the product of how far I've gotten.
I first learned to program on a TI-83 calculator. Start with simple programs like "Press 2 to win" and move on to creating moving objects. Or, if your kid likes Legos, then get him a Lego Mindstorms kit.
He is a teen age boy... create show him how to do something that will catch his intrests...usually porn.
I started learning hoping to do the superman 3 trick, 10 years later I have not comprimised any system in that way, but have learned enought to get me a crappy job that pays the bills
teach him Processing; it is a programming environment build upon Java; specially developped for visual artists. I use this environment for my students of an art school (16-18 years old) and they love it ! They are not specially "programming minded" but they like the simpleness of it and the beautiful images you can create with simple code !
JavaBeans IDE. Job Done.
I started learning 'programming' at about 14 (in 23 now) and started with VB apps that did malicious things to AOL users via instant messages/chat rooms.
In highschool, I took a few classes that taught basic and a little bit of C.
In college (CS Major), it started with Java (which I think was very bennificial) and moved to C/OpenGL/C++/etc.
Note: no scripting (perl/python/php/etc) until after college - also important.
The things that I remember the most, was when there was an outcome. For example, VB apps that crashed someones computer - really cool. In highschool, an animation in basic. In college, the OpenGL game written in Java.
Basically, if there is a cool outcome, then I wanted to learn it... Now I am in the security field - everything is a cool outcome (exploit = root, etc).
I also mentioned that in college they started me with Java. I think its worked well because you dont need to learn the dirty details (memory management, heap, stack, garbage, desctuctors) that you need when it comes to c/c++. You get the basics of Object Oriented first, then you can learn about the 'dirty details'.
Geeze...what, did PHP rape your mother?
Programming contests are a great way to learn, have fun, and get job offers. My personal favorite is TopCoper.
What to teach? Video games and graphics.
In a nutshell: Point him to,
Gamedev.net (The forums are the best I've found anywhere.)
cprogramming.com (Going through the C tutorials is a great, grea way to get started with the language.
Also give him one (or both) of these:
1 - A pointer to the framebuffer.
2 - Nice OpenGL initialization code.
In fact, I'd say that there is almost nothing as rewarding as starting with just a "putpixel(x, y, color)" function and finishing with a 3d cube spinning around. Programming graphics teaches so much: Math [motivation to learn linear algebra! A concrete way to understand parametric functions... and calculus (If you start coding before you take Calc I, you will reinvent Euler integration yourself)... and functions... and recursion/induction... and... well, everything...], abstraction (putpixel is inside drawscanline which is inside drawtriangle which is inside drawmodel which is inside drawbadguys which is inside...), etc, etc, etc. And since it requires speed (you want to run at interactive framerates), it'll motivate efficient algorithms, too.
And -- I should really emphasize this -- people are visual. Nothing taught me math like watching it draw pictures. Concepts that confused my classmates came intuitively to me (me! The kid who couldn't memorize his times tables in third grade! The kid who kept making sign errors! The kid who everyone thought was bad at math! The kid who's now a PhD student in Control Theory!) -- because I'd seen them draw pictures. The visual cortex is a huge part of our brains, and harnessing it does incredible things. So teaching graphics programming is bigger than just teaching graphics programming: It's making connections so that your son can visualize math. And that is huge.
Graphics and games. Give your son a pointer to the framebuffer. The rest will follow.
I know, I know, it's not a programming language. But he could learn HTML/CSS, preferably the standards-compliant kind, not the IE, tagsoupy FrontPage-generated garbage. I feel it could help a programmer(-to-be) in various ways.
In my middle school years I started dabbling with web design and learned HTML and CSS. However, I soon wanted to be able to create dynamic sites, so I picked up PHP. This was the first real (albeit a bad) programming language that I learned. I don't think it caused me brain damage or whatever, but it prevented me from transitioning to other languages for a bit. When I got into high school I picked up a few books on Lisp, decided it was much better than PHP, and did some stuff with it. However, I hadn't learned much actual programming yet. What really got me into programming was the USA Computing Olypmiad (http://usaco.org). This is a programming contest for high school students that forces you to write efficient programs to solve some very difficult problems (just about all programs have to run in under one second). The contest makers have also created an excellent training site that has plenty of problems and lectures to learn from. When I started the training pages, I could barely program in C, but after about 40 problems or so I can program almost anything in it or in C++. Since then I've also learned Ruby and Python, the two being a breath of fresh air after C/C++ and PHP. Because of this, I was able to take the AP Computer Science AB (which should be called AP Java :/) exam and got a 5 in freshman year, without ever having taken a computer science course in my life.
You just need to challenge your son with problems like those in the USACO, and if he's ever be interested in programming, he'll learn on his own in order to solve them.
I managed to get my closest friend's kid into computing because I started when he was 3 years old by introducing him to games, and teaching him to type his name. Subsequently, I supplied him with new computers as he grew, bought him a Logo package and book, and showed him how to draw simple geometrical shapes and/or pretty patterns. He's now a geek, and he wants to do Computing with Physics at Uni. He's better at maths than I am.
I interested my nephew and nieces in computing by showing them how to world build for Quake 3 and Unreal Tournament in 3D editing packages, and wound some programming into the mix via UnrealScript, a Java-like language included with all of the Unreal engines. This was cool for them because they could build the world, and then *play* it. Obviously I pWned them most cruelly (they are teh suX0rs - they can get their revenge when my teeth are in a jar). My nephew's the only one who showed any ongoing interest, but they all enjoyed the activities.
I think the key thing is to find something that they can *play* with. This is how I got into programming.
I can see the point of didactic learning under some circumstances, but IMHO (speaking as a consumer) too many teachers (particularly maths teachers) heavily overuse this style of teaching. IANAT, btw.
Offer to pay him for programming work he does.
Find something not too difficult but that will actually require some effort and learning to accomplish. Then offer him a modest one off increase to his pocket money or some new toy or gadget he wants, on the condition that he complete a task. The key is to pick a task that a beginner can handle but that will take him time and have him learning. It may sound frivolous, or like bad parenting, but a lot of good programmers only do it because they're paid. The beauty is he'll learn on his own if motivated. Once he's seen how complex it is, he'll either take it up as an interest himself, or decide it ain't worth the money. This is also a good way to teach him not to rely on being spoon fed by teachers etc.
Btw can I have some help with kernel hacking. Looking at kernels for the first time in about 12 years, and it took me a lot longer to get a kernel compiled than I remember it taking me when I was last looking a Linux seriously. When did it become so damn hard to install the tool chain?
These posts express my own personal views, not those of my employer
I've been programming for 2 years (since I was 12) and through the last 6 months, I've been programming in PHP. Not only PHP but HTML, CSS, XML, JS etc...
PHP is not a beginners language, but I started with LibertyBASIC/JustBASIC. It's a great language to start out with.
The best way to make programming interesting is to make it relevant. Everyone uses dynamic websites so I suggest teaching him to program for the web. There's no better teaching tool for how web-apps work, than AppJet.com IMO. You don't have to install anything to get started coding, not even a text-editor. Javascript is the only language he'll need to learn to use it. No SQL, no HTML, no Apache configs, just Javascript, a C based language with agile loose typing, and great OO capabilities. The AppJet developers have built a very minimalistic but stil powerful framework that covers all the fundamentals of web development; HTTP request/response handling, persistent storage, and sending emails, among many others. The forum has a friendly community of amateur developers to help him learn. He'll be writing web-apps that he can show his friends in no time! Give it a shot; http://appjet.com/ and check out something I built with it at http://juxtafier.com/
I highly recommend the book Learn to Program. http://pragprog.com/titles/fr_ltp/learn-to-program My teenage brother started with this book and loved it because it was clear and easy to understand and wasn't boring. Even my dad started to get into it.
The best teachers to kids are people who can convey the sheer joy of doing an activity. I had a music teacher who was fantastic not only because she was a world renowned concert musician in her own right and could share secrets that only real pros know, but because she was able to focus on the real beauty in music and how exciting that is.
So, share some of the excitement with him when you think it's appropriate, and make it fun.
I haven't seen many posts by youngish people, so I thought I would throw my $0.02 in. I am 22, and learned how to program in 10th grade, after a few earlier false starts.
In my case, I tried basic in elementary school and visual basic in middle school. In both cases I never really connected, I don't know whether it was the simplistic languages or just my lack of maturity.
When I actually succeeded in getting started I got "Learn to Program using Python" by Alan Gould and worked through a bit of that, and then moved up to "C++ programming for scientists Engineers and Mathematicians" by D. M. Capper (I am science inclined, currently starting a Ph.D. in physics). I learned mostly from these books. If he has the desire to work through a book, it is a good way to learn, they are good teachers even if you are not.
The other thing that helped me was that I did this as an independent study for school which forced me to spend 10 hours a week on it for a semester. It was a little painful, but being forced to just keep slogging got me to the point where I knew enough to be able to write programs that were complex enough to be interesting to me. I don't know if there is a way to replicate that effect (I wouldn't suggest forcing him to do it unless he wants to, but maybe come to an agreement that if he does x hours a week for n months you get him his own computer or something else he wants).
I would also second the suggestions of games. If he is programming something he thinks is cool it will be a lot more fun for him.
Mod his Xbox, and show him how cool the shit you can do with it is. I know where your coming from, my dad is an engineer and him teaching is hell. Just show him the cool shit you do, dont try and get to technical with it, he already likes what ur interested in, just relate it to his interests. peace homie, and good luck.
Best idea is to get him started on HTML, then JavaScript. If you use Firefox and Firebug extension then this should provide a decent base for him to work from.
Next logical step is to tackle a server side scripting language (ie PHP). Get him to produce something worthwhile in this, but not too large, as his code design will be limited.
Then progress onto a 'hard' language, I recommend C++. Teach him to use the standard library (this should be provide a starting base so he can get some output without messing around with pointers) and then look into pointers, proper data types and classes.
Many people in this thread seem to be concerned about the programming language, but i don't think that matters.
Greenfoot (http://www.greenfoot.org/) allows you to create some game like program in Java, and have the kid add extra stuff. the tutorials on the site are really good.
I remember when I first became interested in programming in early high school/late middle school. It was when someone showed me their IT-83 calculator that had a program on it to compute the quadratic formula by just giving it the variables. Some of you may regard this as encouraging cheating, but besides using it on a test if you were to spend the time to make a program to perform some equation you should have a better than average understanding of the equation itself. The reason this is such a good place to start is that it shows how useful programming can be and it gives someone real problems to work on it that seem easy, but pose their own problems that the programmer will need to figure out. (Dont have to program these on a calculator, you could use your favorite "easier" to learn language)
If your son is a fan of computer games then Game Maker is a great place to start.
It combines a gentle introduction to programming logic with a high reward component from creating his own graphic computer games - games that can look and play as good as anything on the casual game market.
An interested teen with this Game Maker book, The Game Maker's Apprentice, and help from a programming mentor can get a solid introduction to a complete development process, including aspects like weaving sound and graphic assets together to create a complete software package - aspects of development that often aren't covered at an introductory level.
The Game Maker's Apprentice is structured as a series of projects, starting with the most basic and gradually increasing in complexity to cover rudimentary AI concepts by the end. The projects are fun, with clear direction and plenty of opportunity to play and explore beyond the specified project.
The "series of projects" structure can also help you out as you teach too. You'll have the insight to see what's new with each project, what ideas to help emphasize, and they'll serve as guideposts to give an idea what level of concepts are being taught at each point along the way.
Average salary for programmer - $60k/yr. Avereage salary for city bus driver - $100k/yr. I'm not sure I would encourage anyone to go into programming.
I actually got my start in Turtle, that silly drawing application that was so popular in the 80s and early 90s in elementary school and middle school. I learned the satisfaction of seeing words I typed on a screen DO something cool! (Even if it was just drawing a series of boxes and making them move around the screen)
I then moved on to QBASIC and hacked some QBASIC games I'd found to create my own games.
From there it was graphics in QBASIC. That's when I really started to appreciate the puzzling challenges that programming provides and began to feel good about myself and the clever ways I came up with to solve these problems.
The follow on at that point was C++ and I've never looked back.
I'd say that you know your son the best. If he's the kind who likes SEEING the results of what he can do, maybe starting with something simple with graphics would work. If he's more cerebral then maybe that isn't important. :-)
Teenage boy? Easy.
Setup a computer on the network with a lot of porn on it.
"secure" the computer against all attacks
Leave a printout near the computer that details an attack that the computer is vulnerable to, that he would have to write an exploit to.
Then just give the boy some private time and let nature take it's course.
I don't think it matters what language is learned first. If the kid has the curiosity, they will keep pushing their boundaries. PHP will lend itself to Perl. Perl will lend itself to Linux. Linux will lend itself to C. C will lend itself to assembly. assembly will lend itself to transistors. Transistor will lend itself to weapon design. weapon design will lend itself to nuclear bombs.
Seriously though, I could imagine a few worse language to teach a kid. Examples include fortran and cobol. PHP definitely has a cool factor because a kid can create a web page and show it to their friend. Ideally though, a kid should move on after learning PHP, like such fine languages as Lisp, or OCaml. Show them tail recursion and continuations, then watch their mind blow up.
My bread and butter is also PHP, and I would never recommend it as a teaching language for all the reasons you mentioned. One thing that was implicit in your post, but I think is worth noting, is that the large quantity of class-A screwups rampant in PHP libraries and applications are another strike against it as a first language. The first language I got serious about was perl, and love it or hate it, there is a community there that's very quality oriented. (Yes, you need to dig through the usual chaff.) One thing that was critical to my learning was being able to read large quantities of well written, well documented code.
The background I gained from other languages made it possible for me to see PHP's flaws and work around them. I shudder to think what would have become of my programming practices if it was where I started.
(For the record, I also write almost all my own framework code for PHP as a result. Some of the more recent stuff that's come out might very well be decent, but a) the tolerance for terrible APIs that PHP itself engenders leaks into much of it, b) I've been bitten by PEAR one too many times, and c) out of necessity, I've written enough of the basics that I don't have a compelling need for them anymore. I sometimes question the NIHness of this, so it's nice to know I'm not the only one ;)
This is the voice of World Control. I bring you Peace.
My 16 year old son just asked me to show him how to program, with an eye towards getting a good paying job when he enters the job market.
I'm starting him off on SQL, then once he's got that down, on to something like Java (the basics, not J2EE).
Not sure if that is the best way to go, but I figured he can't go wrong learning SQL first. Plus no matter what programming language he uses in his career, he'll always need SQL, and its a good introduction to a programming "mind set".
"The future can only affect the present if there is room to write its influence off as a mistake." - Yakir Aharonov
I believe that what keeps people more interested in programming is always to keep in view real life applications of what youre learning...
In my case if it involved some kind of hacking example I would go do research and learn lots about what im learning...
Hey Buddy! how about give your kid a job. I mean give some part of your job (for sure, start from basic one) to him. Show him that he can help you. Show him that he can do it in the real world and also give him salary. Suggest that children don't have long concentration. You may set his little project period to, let say, a week. Also, make it challenge and fun!!! Cheers!
I'm rather young (still in my 20s) and learned the wrong way with PHP, but I had a great experience of fun and learning developing a persistant world for an online game called Neverwinter Nights. It has its own SDK, its own C-like scripting language and a big community. It could be a cool way to start because you can get straight to scripting behaviour on a 3D game.
I would recommend teaching him how to mod PC games. It gave a tremendous boost to my interest.
That's how I got started. My dad left his Borland Delphi III disk lying on his desk with a copy of "Teach yourself Delphi III in 28 days", so I took it and installed it on my computer. Eventually I got bored just drawing pretty windows, so I ask my dad how to "do stuff", and he introduced me to pointers, linked lists, stacks, and all sorts of wonderful data structures. The rest, as they say, is history.
Maybe try looking at it another way. The 8-bit generation are generally good programmers because we had intimate knowledge of the machine. I agree you need something user-level, however today's user-level is too high-level.
Perhaps starting with 8-bit the same way many of us did and moving up is the way to go. It doesn't need to be abstract though. Many of the 8-bit platforms for robotics and hobby electronics are ideal... have a look around at http://www.sparkfun.com - they have a range of really engaging development platforms and a great community.
The tools for the Basic stamps, and from Microchip, GCC for AVR and ARM (WinARM etc) combined with some cool projects will not only be incredibly rewarding, but also provide a 'real' introduction to programming... not to mention a simultaneous introduction to electronics which is a valuable backdrop. ... and get a copy of 'The Pattern On The Stone', which explains how logic works using tinker toys.
Try teaching something that will instantly set off the endorphin rewards. You certainly know a whole lot more about what makes him tick than anyone on Slashdot, but most teenagers, myself included (though I'm 20 now...) play games. Get him started on Python and PyOpenGL, that way he can easily get some 3D graphics on screen.
For some reading on education in general, in case you're curious, Dimensions of Learning is a good place to start. It's a relatively current teaching model. I have the textbook on it, but you can find general outlines of it everywhere; though, curiously, it doesn't have it's own Wikipedia page. I might need to do something about that, unless it's in another article.
Admit it. You post strawman arguments as AC so you get modded Insightful for refuting them, rather than Troll
By that, I mean that I learned on my own because I wanted to learn. He has to want to learn. Maybe he likes something else. Are you afraid that he'll want to be a fire fighter, lawyer, or some other profession you might not like?
What does he like to do? Try encouraging that. But don't discourage.
Of course, there is the readability-issue with Perl, but when you come from PHP it is always an improvement. But if you don't like Perl, there is also mod_python and some other alternatives.
(*) Just kidding
I always felt that the best way to learn programming was to simply tackle a problem. Connect programming with problem-solving in the student's mind, and encourage creativity.
There are a million simple problems out there - some great ones from junior programming competitions (Google programming contest questions.)
Alternatively, talk with your son and come up with a goal - start complicated (a game) and (through discussion) reduce it down to one or two key elements that can be easily demonstrated.
Try Castlemouse:http://www.castlemouse.com/
Engineering is the art of compromise.
I got my start programming the TI-85 (and later TI-92) calculators we used in our math classes. It's easy to learn, lets you automate some of the calculations in science classes, and if you make games you can share them with your friends. :-)
Then you can move on to programming more complicated things, like cell phones or computers.
This book is often criticized, and it should not be confused with the C++ Primer by Stanley Lippman, a real C++ expert. I found two reviews on ACCU:
http://accu.org/index.php/book_reviews?url=view.xqy?review=cp003131
http://accu.org/index.php/book_reviews?url=view.xqy?review=cp001702
Neither review recommends this book. Francis Glassborow even said "there is nothing in this book that is appropriate to the needs of someone learning C++ in the twenty-first century". Brian Bramer was kinder, and said "this a very readable book with clear up-to-date explanations ... Suitable for beginner self- teaching who finds the more academic books hard to read", but he also mentioned it was heavily C-based, and did not talk enough about STL. In fact, the author also wrote C Primer Plus, and that may explain something.
See if he's interested in robocode http://testwiki.roborumble.org/w/index.php?title=Robocode http://robocode.sourceforge.net/
You start with a combat robot written in Java. You subclass the robot and change the code to see if you can get your robot to be better than the other robots. The base robot class the battlefield, etc are all provided, so you don't have to do much to have a full featured game, but the better your programming the better your results.
If he gets into it he will have a lot of fun and learn of lot of Java while he's doing it.
If you aren't so hung up on Unix/Linux, consider using a micro-controller and building something that operates in the physical world. I have been looking at the Arduino http://en.wikipedia.org/wiki/Arduino. This is a very small and inexpensive open source hardware/software board based on an Atmel Mega168 chip. You can buy a kit for around $15 US or an assembled unit for around $25 US from here http://www.moderndevice.com/ or from here http://www.ladyada.net/make/boarduino/index.html.
The software is free, and runs on Windows/OS X/Linus/Unix. You code it in C, and there are driver calls for all the on chip I/O devices. It can easily control DC motors and servos, so once you get those going there are a lot of robotic projects to explore.
There are a lot of on-line examples, so you have something to start with even if you are not hardware inclined. http://www.arduino.cc/playground/.
my current motivation for learning programming is to make money. as you may or may not know, the financial markets are dominated by automated trading machines. so i figure, "hmm.. it can't be too hard to write a profitable system." ha. it is very hard, but a great project. i'm currently using ninjatrader to write basic strategies in c# to trade futures. oil, the s&p 500, wheat, corn, hogs.. its all tradable if you notice patterns that occur over and over again. the systems can be as simple or as hard as you make it. of course, the more simple ones aren't as profitable, so as the desire to make money increases, so does the complexity of the program. in short, i'm writing strategies in c# for ninjatrader to make money. give your son a go at this and he'll learn it all himself. and who knows.. maybe he'll come up with some novel concept and make himself more money than he knows what to do with.
I would start a newbie with Python. Python is Open Source, multi-platform, and object oriented. There are many, many extension packages. Lots of tutorials too...
One motivator which got me into programming (I'm now a university lecturer in EE/CS) was learning embedded C for microcontrollers - and actually being able to do hardware things. AVR's are cheap these days, easy to program and you can use them to make all sorts of little projects - including robots!
My own encouragement came from curiousity about how computers and programs worked, but as far as encouraging someone either they will be interested in learning or they will not. As a programmer for the last 23 years I'd have to say teaching the importance of RTFM'ing is a good place to start. C is an ideal language to start with, it will show them many valuable programming concepts. Also, shell scripting shouldmake them comfortable with the commandline along with those all important 'programming concepts'. Unix/Linux/BSD is the best place to learn the art of coding (in my opinion)...Manpages are there to RTFM. One last thing, make sure their first IDE is VI, GCC and Make. ;-)
I atended a technical school before college, and there was required to program first in pascal and later c... and was awfully boring
What really got me into programing was modula2 first course, it was like love at first sight: more clear and simple than pascal, and as powerfull as c but without their pitfalls (modula3 its even better)
Today i believe the best introductory programing language is Oberon-F (Oberon2 + Framework) For it there is an open-source RAD that runs well on wine, called BlackBox Component Pascal. Best of worlds: compiled, typed, dinamic, clean, patterned, component oriented, text drived, open... just great!
Sadly nowadays mostly do all my code in .Net (a couple of years ago in java) But if i could, would ratter do it in Critical-Mass again any day.
The thing that got me started in programming back in the 5th grade was a book I got with the old 32k CPM computer my parents purchased for me. The book was titled BASIC Computer Games, with a sequel called More BASIC Computer Games by David H. Ahl (of Creative Computing fame). I would spend hours typing these programs into the computer. While I believe that BASIC is one of the worst languages to start in as far as proper coding methods/structure, it was the best way for me to program. I am in the process now of preparing to write a new version of this type of book in a modern language and hope that it will help someone else like your son learn to love coding as much as I do.
Kids want to do something that is cool. IMHO Silverlight is the fastest and best way to do it. Yeah it's not UNIX but who cares. I'm pretty happy that I grew out of my UNIX phase. I make a lot more money with dot net. Mainly because it boosts development performance and efficiency. Why force him into UNIX because of some lingering ideals peddled by your college instructors.
Quite simply: Game Maker. This is how I got into programming at age 12.
What Game Maker does is
1) It makes programming fun and gratifying. You see your results instantly. With a few commands you can see exactly what you caused your game to do, and because of the nature of some of the functions (for instance, functions that calculate trigonometry and other more complicated math formulas) you don't need a huge understanding of math.
In addition, it takes out the "Yay, I spent three days on this, now I can draw images on the screen!" For instance, in three days I had coded movement, some netcode, and made maps for an MMORPG I was making. In another language you would simply not be nearly this far. So basically, you don't get bored by "stupid stuff." If you have a game idea, you can get that into a program in a few hours, instead of worrying about really low-level things.
2) Perfect for beginners. It's even being taught in schools. You can start with a simple drag-and-drop interface and slowly work into code. It's all object-oriented, and it's very scalable. You can make a simple maze game or have an MMORPG that reads binary files and has super advanced graphic scripts.
3) Like I said earlier, he'll learn OOP and not even know it, since the entire GUI is based around objects. You can't put anything into your game without it being an object.
4) It's free. And it's a small program. It has a huge community (I am a huge tutorial contributor and mentor) with tons of tutorials, and plenty of people to get help from.
5) Its syntactically average and lenient. Code you write in it looks like code you write in Java, for instance. It's lenient: You don't have to declare variable types.
6) Debugging an error is not as frustrating as other languages. The debugger tells you exactly where the error is. Still can't figure it out? Run the game in debug mode and monitor every variable, object, etc.
7) Reward. Think up and code a really good game and you can be admired by tons of GM community members! Wouldn't you want to work for that?
You are now manually breathing.
Make sure you teach him to write neat programs, cleaning up after yourself etc. I'm amazed when I talk to java programmers and they just let the garbage collector do the clean up. If you want to really learn how to write small fast programs pick a low level language like C, or even assembler. When I did CS at Uni they taught Pascal first, its not to bad to get your head around some basic concepts. And as others have commented, BASIC is a good starting point.
About 2 years ago, I picked up a book on HTML/CSS (HTML, mind you, I would come to hate it for disrespecting XHTML) and read through it one weekend, making an example webpage for each lesson. The natural step after that was JavaScript which I learned with glee. Of course, then I needed some server side-scripting, so I grabbed PHP. I have come to dislike now and wouldn't touch it with a 20 meter pole, but at that time it was a great gateway to other parts of computing.
Since then, I've learned Python and I love it. In fact, I'm a Python core developer (yes, with commit privs), and Google is paying me to work on it over the summer. I hope this is evidence that 15 year olds can make a difference!
To keep a youngster interested and motivated, try Scratch or Alice. These make it really easy to generate some flashy graphics, and do teach real programming concepts. My 10 yo son has done quite a bit of Scratch programming, mostly self-taught.
Alternatively, get him doing Lego robotics. This is a bit more expensive, but loads of fun.
Once they're hooked on programming and computers, that's when they'll have the patience to do "real" programming languages like C++ etc, like we cut our teeth on (actually mine was Pascal, but that just shows how long my teeth are). But not everyone will get to that stage. In the meantime, the experience with Scratch (or Alice) will always be useful, provided they don't develop unrealistic expectations on how easy programming is.
What's the best way to encourage his curiosity and enable him to learn?
If you really want to reach him, buy a Mac (I know you prefered Unix or Linux, please keep reading), download the developer tools and start Quartz Composer. Man I wish I had this when I was a kid. I'm dead serious and I'm not a Mac fanatic. I was raised between computers and I've used PCs most part of my life. I'm about 30 years old now.
If you haven't heard from it: http://en.wikipedia.org/wiki/Quartz_composer
Here you can see just the tip of the iceberg of what you can do with it: http://vimeo.com/videos/search:quartz
And you don't want to miss these: http://www.zugakousaku.com/index.php?ref=study-quartz-jp
Now, it's way more than a cutie program to make visuals.
You start by dragging patches and connecting points with instant ultra cool results. That's good, you don't want your kid to get frustrated by pointers and such (yet)
Back to QC, once you've tried every possible patch, you'll want to apply some kind of logic to the compositions so you need to know what operators are, structures, etc (Learning has already begun).
The most basic example of a Quartz composition I can think of: Drag a video input patch and a billboard patch, connect the output image from the video to the billboard and you can make the composition take the input from the webcam and display it onscreen. That was 2 drag-n-drops and connecting 2 dots. Try beating that. After that you can apply tons of filters to the image. This would be the hello world in Quartz Composer. Much simpler than a C hello world and way much more rewarding.
Other things you can easily do:
So, to answer your question, IMHO, this would be the BEST way to encourage his couriosity and enable him to learn a programming language. Think of it as today's logo (My apologies to anyone involved in Quartz or QC development, I'm trying to make a point)
Hope you and your kid find this as interesting as I did.
Cheers
The main thing I've noticed at university is that not everyone has the same opinion on different programming languages. If you try to teach him one language and it doesn't appeal you could turn him off programming altogether. Reality is, as much as you would like him to work in *NIX environment, he has to find his own way.
Personality has a lot to do with it. If he has a tendency toward visual things, or gets bored with things easily, high-level languages that produce visible results quickly may be the way to go.
Alternatively if he likes pulling things apart and putting them back together, a low-level language might be a better solution.
It's great that you're showing the initiative to teach your son. The young mind likes games, to be honest, and treats/rewards...so use that to your advantage. For example, ask your son if he wants to play a game where who can *insert really cool and interesting computer hacking/programming task here* at which point you purposely lose the game and he's rewarded (perhaps with ice-cream I don't know)...see where I'm going with this? Key: Remember how teacher's taught you...now mimic that/adapt the strategy :) Hope that helps
What are his interests outside of programming? What would he like to make? Is he interested in art or design? If that's the case maybe Processing (processing.org) is a good place to start. In music? What about supercollider (audiosynth.com)? Websites? What about HTML and javascript? If you don't think you are a great teacher then find a good book to structure the learning process and offer help when he hits a rough spot. The Processing book put out by MIT Press is excellent, it also seems that OReilly is publishing a Head First Programming book that uses Python.
Good luck!
-Joe
As if those were your first programs!
...
I still remember my ZX81 code that hooked me on programming, burnt onto my retinas:
10 DATA "Anne", "Barbara", "Caroline"...
20 DATA "lingerie", "a nurse outfit", "nothing but perspiration"...
30 DATA "touches", "licks", "kisses"...
40 DATA
100 PRINT G$(RND * G); " in "; C$(RND * C); " "; A$(RND * A); " my "; P$(RND * P)
120 GOTO 120 - 20 * (INKEY$ = "Y") + 10 * (INKEY$ = "N")
130 CLS
He'll be able to edit that into shape in no time - but may prefer to work on it alone.
I won't go on about the environment. What got me started was my first computer when I was 16. Got it from my uncle. The platform to work on and an internet connection was all I needed to expand and explore.
Find a platform that suits what he's interested in, and be there to provide suggestions and perhaps direction, but (at least in my case) the freedom and challenge of figuring it all out alone was the thriller.
Talking from a teen's point of view (am I the only teen here? sad...), since I am a teen, I suggest that you see if his sudden interest in programming isn't a fly-by interest, like some of mine (guitar, origami, etc.). If it isn't, then introduce him to some of the programming languages out there and cite whether they're good for cross-platform programming or not, what they're normally used to program, etc.
I would recommend you start with some Java because they can run on different OS's as well as some C++ and BASIC. If he's interested in website design and programs for HTML purposes, introduce him to Perl.
If you want to spark more interest, there's a great programming game where you program a robot using Java and another using C++. Poorly written programs get the robot killed while well-written programs kill the opposition and survive. It can be found here (Java)
- http://robocode.sourceforge.net/?Open&ca=daw-prod-robocode
or here (C++) - http://www.gamerz.net/c++robots/
Other than that, I can't say much. He'll have a ton of questions (try your best to answer them) and will want help in understanding some concepts. Be Patient! that's key. the more he does it, the more he'll learn. the best way to learn is from mistakes (mostly) and experience.
Other than that, I have nothing else to add. Good luck!
Use your computer to program cool simulations. A program is nothing else but a way to create / recreate a part of the universe. It doesn't matter which language you use, really. My teen used Java and small computer programs from the following website fun science with your computer. Random walks, chess, planet animations, there's a variety of cool things to program.
In the goold old days - the 80s - science magazines dedicated one page to programming. Many of us started programming that way, copying Basic instructions and getting all excited to see nice splines on the screen or finding large prime numbers. It's important to not let technology get in the way of curiosity and imagination. Have fun with graphics, create simple games, simulate physical things. Then over time you'll sharpen the technical skills.
I'm going to have to say that JAVA is the best place to start with him as it's easy to learn and teaches very key topics in programming, especially in regards to OOP. C/C++ doesn't stress OOP enough, and those should be learned after getting a basic understanding of programming - so Java it is. Although I wouldn't recommend Java for any real applications ;)
As far as getting motivated to start programming, I would suggest something web-based as the results are very fun to play around with. I started with HTML, moved to JavaScript and CSS, then to PHP, then to C/C++, then Java, then a whole bunch else and now I'm a computer science major in college and I'm loving it. But my interests first came from web stuff, but that was just me.
the best language on earth, learn REBOL
http://rebol.com/
A while back we had a tech talk at our company by the creator of Greenfoot (http://www.greenfoot.org) which is a Java-based framework of creating 2D worlds. Greenfoot's focus on visual elements and user interaction (as opposed to more abstract computations) makes it appealing to teenagers learning programming.
Are you doing this because he wants to learn how to program, or are you imposing your own interests on top of his? The worst thing you could do when attempting to encourage someone to do something is to force it on them. I can't begin to tell you how many activities I truly hate now simply because someone thought it would be "good for me to try them" using scare tactics and coercion as a means of getting the desired result.
(Needless to say, I'm not a fan of religion either...)
8==8 Bones 8==8
How Should We Teach Computer Science? : http://www.codinghorror.com/blog/archives/001035.html
the best language on earth http://rebol.com
I can spend enjoyable time on projects that seem like they'll be good tools when they're done. I have a lot harder time staying interested when the end goal is something else somebody else made up and told me to put together.
so I'd say the answer is: what's your son interested in? web technology? kernel development? game? help him find the starting point for whatever, and encourage him to think up achievable first projects. From there, it sucks 'em in.
I teach my 10-year old son using a nice book (written for young teenagers, according to the blurb): "Python fuer Kids" by Gregor Lingl (2nd edition, 2006, www.bhv-buch.de). It's in German (I know enough German to be able to use it), but perhaps there is an English translation?
Although it mildly assumes a Windows environment, I've been using Linux and it's been going fine. The guy implemented a Logo (remember? turtles drawing things) library in Python, so the course starts in a way as a Logo course, but then it quickly moves to the usual programming constructs and practices. And the advantage of this Logo-in-Python approach is that you immediately start drawing fancy geometrical pictures, which at least for my son was more motivating than purely text-based operations. The last chapters show how to implement a simple graphical game -- again, very motivating...
Well, the easiest way to get any kid into C++ is to know whether he likes video games. If he does than you showcase how programming can eventually lead to making video games. You should start him on C++, after that everything else will seem easy for him. Though C++ may be a little intense for him, you should just try and see whether he likes it, if not start him on an easier language. Oh, and if you don't feel comfortable teaching it to him I recommend getting one of those teach your self C++ or C books in 21 days that are around.
One of the things that sucked me into programming was realizing that I could play with concepts. I got my eyes opened when I first learnt about finite state machines. This simple concept is so beautiful and yet so powerful. That was 25 years ago, but it sure hasn't chaged a bit.
I would take hands off from games -- it takes too much, too long until you have something that makes you proud. You want to make sure the road to satisfaction is right: short at the beginning, building up later.
This is the wrong time to pick Python for teaching. Python 3.0 is coming out in months. It's going to be incompatible with all the 2.x versions. There's going to be major changes that effect everything all the way down to "Hello World."
That sounds like a big confusing mess to deal with explaining to a student.
Link to python 3.0 info... http://www.python.org/download/releases/3.0/
Python 3.0 will change far less than most libraries' APIs do between major version releases. If this is really such a deal breaker for you, trust me, noone in the Python community will miss you.
Hell, noone in the wider programming community will etc.
This isn't pointless change just to give the Python-detractors something to crow about. (God knows there are times I'd wish Python 3.0 had kept print as a keyword just so people like you would STFU about it.) When did improvement become so damn anathematic to people in the IT industry?
It's change or die.
This means that the beginner's language must be very simple, have a very clearly defined instruction set, and it must be able to keep the would-be programmer's interest for a long enough time for the lessons to sink in. It is entirely OK if the language isn't the current fad, useful in real life, general-purpose, or even Turing complete, as long as it is simple enough, and the output is something else than just boring plain text.
I haven't tried programming Lego Mindstorms myself, so I'll have to stick to recommending Logo. (which, for a young teen, is not at all too childish.)
The programmer will tell you when it is time to get to more "useful" languages.
buy him one off these: http://www.arduino.cc/
- he will have to install the IDE, it works in linux and win.
- he will have to learn simple coding when programming the microcontroller. this is a lotta fun, as you can build anything from a house-alarm to a robot, or anything...
this approach gives a youngster a purpose for programming. it hard to learn something if you dont have a set goal.
hope this helps!
will
I find the best way to learn is to actually do. So pick a project to do together.
Why not make a game for his mobile phone. This is relatively easy to do and would be a good introduction to Java. It might even give him an entry point into the gaming industry - if he decides to go that way.
I suggest to let him exploit one of those stupid and inhumane webgames that are out there in dozens. There is much fun in doing it and he will learn really a bunch of useful things about his system and programming also.
For example:
Take a look at a game like space4k.(com|de)
Show him a bit of java programming, show him how to use a library to web-datamining/testing like httpunit and how to do some simple things with that. Also do some funny stuff with java and sql based on mysql or the like.
Then go and try to build a working bot on that sort of game. Grinding-games like this one do not deserve that humans spoil their time on stupid clicking. But there is a great use for this sort of game: learning. And he will also will find out, that being smart is not always without problems, cause people really *hate* scripters in those kind of games.
He will have fun, he will have a live response to what he is doing (very life, I promise!) and he will have all up and downs that come with such a job.
By the way: programming in java and mining data, responding to web-forms is a really great sort of knowledge for the near and far future. Data is something like gold in our information society and to mine it with a bot is something like mining '49. It's just a game so nothing can happen, nobody is hurt (who counts).
java, sql, httpunit
Basetechnology with fun. And I promise if he even manages the captacha in the game he will be a smartass in programming and will lick blood.
with best regards -
most hated "player" of space4k.de
-by the way- i just see a captcha down here in slashdot. It would be fun to crack that one, too...
I got into programming through (then Macromedia) Flash. The nice thing about Flash is that you can get immediate, visible results with very little programming; there are various ways to perform many common activities, with varying degrees of programming knowledge required.
For example, you can 'tween' motion by setting keyframes and controlling the easing in the IDE, or you can script the motion using event callbacks and 2D transformations. Once you become comfortable with the IDE approach, you begin to find its limitations, and to understand the utility of a programmatic approach.
ActionScript also has the advantage of having a lot in common with JavaScript, which offers easy entry into another domain where you can achieve a the satisfaction of getting visible, substantial results with just a little effort.
My ActionScript started out crude but grew increasingly ambitious, until I left it in search of greener pastures - and found a range of more powerful languages. These days most of my code is server-side, and a substantial amount of it runs without any visible result (or user interaction) at all - but it was valuable (and encouraging) to me at that early stage to encounter such an expressive, sensory environment to learn in.
---- death to all fanatics
You could show him some 3D programming. There's a bunch of tutorials for jME showing basic coding examples once the Java SDK has been installed.
I don't look at programming as a primary skill. What I think we should be doing is teaching algorithms. Then, in the teaching of algorithms, we ask the student to use a specific language or method to program the algorithm. In my view, the algorithm's implementation in the target language will drive the student to excel. The student will be learning something useful. Just to teach programming and doing a simple read/write to a file, or simple task will not develop the proper skills and in the latter case the student will not receive the challenge to master the language. A "for loop" in any language is still a "for loop", the student needs more challenges.
Leslie Satenstein Montreal Quebec Canada
Drop *nix and get a computer with Windows. Its what they will get in school and most other environments. Get a book on programming games for teens. Something that has a good framework so it is easy to get things started. It should be all about having fun. The techinical stuff will come later - if he has an interest.
I'm 21, and no one in my family is a programmer or anything similar, so I discovered programming through school. I'm not by any means qualified, although I do plan to be, so I'm coming from a totally 'lay' perspective. So, firstly, I learnt in Java, and despite the complete stupidity of the syllabus I was taught I absolutely fell in love with programming and have subsequently read more, improved, fixed the mistakes I was given and dabbled in Python and peeked at some others. My point here (though it isn't readily apparent) is that I think Java is a great language to start with, because it's relatively intuitive and predictable once you understand the basic structures, and there aren't tricky little words and symbols that make sense if you're advanced but not if you're 16, and it's clear, and especially because it has great documentation, that makes it easy to explore on your own. However, far more important then the language, is the love of the process. In my limited experience, when it comes to programming, it seems that love and aptitude go together - those who love problem solving and tinkering are good at it. And for me, there's not much that compares to the joy of creating a problem and solving it elegantly (by my own standards). So, (long story short) when I had the opportunity to tell a couple 16 year olds 'what programming is', I started by giving a problem: how would you draw a square using very simple commands? (one of them had played with Logo many years ago, as had I). When one came up with the simple answer, he was in ecstasy and rapture! And since then, I've corresponded with him, giving him little tidbits and hints that I've gleaned in my self-teaching and practice since school, to supplement his silly syllabus, and he's loving it and doing well. I've also realised that my simple example problem is easily extenable. Seeing as there are only two commands repeated four times, you could introduce the concept of looping - but guide him to the idea before you teach him the implementation in any language. Then what if you want to be able to draw any shape? That leads to variables, and so on. But essentially what I'm saying is guide him to the principles first, then show him how to implement them, and let him make his own problems (I mean bugs, not a project he can do) along the way. Start him off with text applications, using command line and text editor, because that's actually more fun! (I started with a horrible little IDE and unnecessary boilerplates). Such problems as a half-pyramid of asterisks is wildly invigorating the first time you do it. And file IO and interactivity, and pretty GUIs are the kinds of things that keep it fun and interesting. (And if he can make a simple game - hangman, for example - that's perfect). Game modding and kernel hacking and writing in machine code may be fun for experts and geniuses, but for an average boy of 16 (or even 21) that is daunting and something just to be skimmed and envied - the prospect excites me, but I wouldn't want to start there. Also, as I said, I picked it up at about 16 in school, almost by accident (I wasn't very good at accounting, and that was pretty much the only other option my little school was able to offer), and that served me fine. There are things I had to relearn and unlearn, but that's just made me better at it. So encourage him to take it up at school, and let the professionals do most of the work, while you can help him and guide him from the side. No shame in that! That said, if he doesn't have the natural love of it that you and I do, there's not really any point in encouraging him (same way there's no point encouraging me to take up professional golf). It's something that people either fall in love with at first sight, or just don't really care for, and if he isn't in love with it, he won't get the pleasure you do from it. Just my long and meandering 2 cents worth. I hope it helps, and I think it will.
I remember that my favorite TRS-80 Color Computer projects were the ones that had some sensor or link to the real world. I would use CDS cells to tell if anyone was walking up to the front door, and then have it play some spooky sound...
Today, I'd try to work a Wii remote and a webcam into a project, and have it do something that your son will have to show all his friends... PyGame lets me do things like play sounds when my son jumps on a DDR mat... (He's three, and I use his voice for the sounds.) Projects like this hopefully contrast nicely with that impersonal plastic feeling that you get in a toy store these days.
Python would be my choice of language... although Flex would be fun too. At some point, expose him to some assembler and C just so that he starts to develop a model of what is really happening inside the box when he programs it.
Celebrate Excellence!
Programming is something I dabbled in since I was 11, copying BASIC programs out of the back of Boy's Life magazine, I think. But I didn't really understand it, and I didn't really think I could succeed at it, until I learned how to use a debugger.
I think one thing that really prevented me from understanding programming was that I couldn't see what was going on underneath. I would code a program, run it, it would die with the message "Segmentation Fault," and I would have to go over the program again with only a small idea of where it had failed. Using a debugger to go through it line-by-line, and look at all of the current values for the variables, was a tremendous boost for me, not only in ability, but also in confidence.
Unfortunately, no one really showed me how to use a debugger, especially early on. It was something I had to find accidentally at age 22 or so; I think it is taken for granted sometimes. The closest I came to seeing a debugger in a class was a 10-minute overview of Eclipse in a 300-level Software Engineering class, and that was after I'd taken at least six programming classes.
The best thing you can do after you have a good project picked out is help set up the environment and show him the tools a programmer has at their disposal.
Carnegie Mellon created Alice to teach kids how to program. Here is the URL: http://www.alice.org/
If you love your son, encourage him to NOT study programming.
Even if he gets straight "A's, his competition for a job in technology won't come from around the neighborhood, it'll come from around the world. Why hire a Bachelor's degree graduate for 60K when you can get a PHD for 30K in India, China or the Phillipines?
Tell your son to study air conditioner repair, auto repair, plumbing or carpentry. These jobs, although similarly subject to salary deflation due to cheaper offshore workers coming into this country, can still be viable income sources for enterprising and competent young adults.
Longer term, the salary deflation present in technology isn't likely to improve. R&D spending by the big tech companies isn't likely to improve anytime soon and start ups are hard to get one's foot into. You must encourage your son to pursue economically viable professions.
Best,
BT
Why don't you two just stop complaining and fix the problem once and for all by writing a proper manpage on women?
$ man woman
Interesting....
I am currently a college student studying Software Engineering, and when I learned to program, it was because I had an idea for a program- the motivation of a potentially useful product was very helpful. It is also important to have visual affirmation along the way to keep him interested. I learned on a wysiwyg type editor, and I found it to be much more enjoyable than writing the GUIs as I sometimes have to do now. I would recommend staying away from the GUIs.
Boys like to break stuff. Show him how to crash a machine remotely on your home network. Explain how to analyze a system to compromise it. Show him the movies Sneakers and Hackers.
As a parent you are also in a good position to teach him the ethics of white hat hacking.
This should give him motivation to learn how to program and develop a deep understanding of how systems work.
It worked for me.
Oh man, brings back memories. My first programming exposure was QBASIC with help from my dad and a book called QBASIC for kids (or something like that, it was actually targeted for children programmers! How many books like that are there today?) But I didn't return to programming until middle school with... yes... the TI-83. (Not +, which came out the very next year to my chagrin).
I started with simple number counting programs, progressed to moving things around the screen with getkey and output, eventually made a little racer-type program.
I continued to improve, however, and you'd be amazed what you can do with the very limited BASIC language. By high school graduation I had made small rpgs (never finished them sadly, but it was fun to battle and level up), a minesweeper clone, and my personal favorite Gravitation, a connect-four style game for two players of my own creation. I long since abandoned GOTOs, even to the point of coming up with my own graph-screen based menu system to replace the built in one that is hard-coded to GOTOs.
There are a lot of handy little tricks you can do in TI-BASIC, for instance, if you start a line with " you can make it a comment (it is a string, but it is ignored if it isn't assigned to a var). The most recent piece of data is always automatically stored in the ANS temporary variable, so you can use it to pass arguments between subprograms. While variables are global and limited to the alphabet (and theta), you could define your own lists and use those instead (or use them as arrays). I even mimicked recursion in my minesweeper clone by using a list as a stack. (I had to use two programs, however, since I don't think you can have a program call itself). For graphics, it helped to set the window size to values between (0,0) and (64,-92) [I think those were the pixel counts, but correct me if I am wrong] so that to match up pixel position with other graph functions (such as line) all you had to do was reverse the order of the X and Y coordinates, and make the Y value negative. Once I figured out that trick, graphical programs were a breeze.
The constraints in TI-BASIC also really force you to think outside the box as a programmer. Space is incredibly limited, so you learn to make every byte count, and optimize code as much as possible. Additionally, the processor is slow, so you learn ways to improve your algorithms for speed.
Sure, you could program ASM programs. But for me, the weaknesses of BASIC were all part of the challenge. (Plus there was the advantage of being able to code it directly on the calculator, especially when bored in class). Others liked wasting time playing games on their calculators. I always had more fun making them myself, and it was around that time that I realized I wanted to make programming into a career.
I'm still tempted to pick up a TI-84+ silver to replace my crummy TI-83 with-no-archive-memory. I miss programming the thing.
I installed Linux on a car, but it crashed due to bad drivers...
This is my first post here. To get your son interested in programming is not the question; he already is. The task is to get him to actually program! I feel that the best way is to pick a language (I like C++), get him SIMPLE books (I like the "For Dummies" books myself), and then set him tasks that you applaud when accomplished. The applauding is VERY important! I suggest graphics oriented tasks such as: Make a word move on the screen. Make a ball move up and down. Draw a square with corrected aspect ratio. Make a ball that bounces around the screen. I suggest Text oriented tasks such as: Make a quiz using Data statements. Make a math quiz with random questions. Make a "Mad-Libs" game with user inputs. Make a scrolling "Times Square" sign. Limit his access to libraries of functions for now. Show and encourage him to to create his own library. Remember: Your son may not actually "take" to programming. He may not be as fascinated with the feeling of power we get from controlling a machine as the rest of us are.
What, no mention of contest programming? (Or did I miss it in all the other comments.)
There is a world of contest programming for teenagers out there. Check out a book called Programming Challenges by Skiena and Revilla. Also check out www.artofproblemsolving.com.
I would recommend a class. For myself, and probably others, it really helped to have a teacher who know which bad habits to discourage, and who be able to set up the details (compiler, header files, etc) so that all you need to worry about is writing your program. I tried to learn things by "reading a book", but that never worked.
I felt like Java was a good place to start. I was a TA for some summer school Java at the U of Minnesota, and we had several middle school age kids. Java is nice because you can do all the regular learning-to-program stuff, but it also has a lot of simple graphics capabilities, which was the only thing the kids were really interested in. The goal was not to teach the language, but to provide a constructive play environment. Like Legos.
Anyway, I would investigate your local universities and community colleges to see what kinds of summer programs they have.
I have the same situation; a 14 year old son and he wants to learn to program. I am teaching him to program using Python and Pygame to create a simple 2D game. It is working great; he is excited to learn new concepts so that he can add new features to his game. I am glad I didn't start him on PERL or C; I can see now that Python is a quick way to learn to program. He can learn other more specialized languages when he needs them. Pygame provides libraries that allow him easy access to what he wants to do.
The simple programs that everyone thinks of writing ... have already been written. Most of them are on SourceForge.
Googling an idea and seeing ten free programs that already do that is a great way to drain the excitement, I can tell you.
there is no god but truth, and reality is its prophet
The problem with learning programming is the lack of immediate gratification. Lets face it, console apps are boring 100%. I'm sure plenty of you disagree but you aren't teenagers are you. C# and the XNA dev kit are free to download. Games can be designed for Windows, Zune and XBOX 360. And for only 100 bucks a year to have a chance to sell it on xbox live? I dont' think it has ever been so easy or appealing to make your own game. As others have said game moding is cool too, but with XNA you could download full game source code samples for free and he could learn to modify those too. I'm sure I'll get flamed because most of you probably use open source tools or would never in your life recommend MS tools but fact is that C# is a good language and it's easy to learn, open your minds to new possibilities. If your son wants to release his code as open source that's up to him, and great for him if he does.
Do things like the old power cartridge for the commodore 64 still exist ? I remember watching all those demo's with their funky interrupt calls who were like able to use more than one colour at once in the outer border of the screen ... the plasmascreens (omg!!!) and much more ... i wanted to know HOW they did that, an the power cartridge, with its ability to freeze the computer at the exact moment where it put something on the screen was like the best tool i ever had, it got me onto assembler cos basic was (and in fact still is) way too slow to get anything useful done (and isnt all that good in helping you understand how the machine itself works, which is, imo , basic to decent coding)...
no ?
i must have been 10 or 11 at the time so if i can do it ... i'm sure anyone can :=)
Free speech was meant to be free for all... how can anyone grow up in a nanny state ?
My Dad was/is a programmer, and I always wanted to make games. I started trying when I was 11, trying to use engines and toolkits like rpgtoolkit , 'Custom' and a few others. There's a big list here: http://www.ambrosine.com/resource.html
The problem was, they couldn't do exactly what I wanted, so I was always trying to use their little scripting languages for things they were never intended for. I always thought programming would be too hard though, and maybe it would have been at that time. I don't know. But when I was 13 or 14, I did learn C++, my first language. Basically, I just learned it from a big book my dad has. First I went part of the way through 'Instant C++ Programming' by Ian Wilks, and then I sopped learning for a while, and came back using 'The Waite Group's C++ Primer Plus' by Paul Snaith. C++ Primer Plus is a much better book, because it's newer, and teaches OOP better and stuff, but Instant C++ Programming might have been better for starting. For example, the C++ Primer Plus didn't even teach about if statements until the 5th chapter! So I was using 'while' loops, not to loop through stuff, but in place of if statements, because I wanted to use conditional stuff. But anyway, that's how I learned - just using the book, and trying to make games. I wanted (want) to make a big RPG. So, I started off with a VERY simple text based game, where if you pressed 'm' then 'Enter', it attacked in melee, 'M' and 'Enter' attacked with magic, and 'b' and 'Enter' attacked with a bow. You got experience for using each of those, and different stats went up or down depending on which you used most. I was /very/ ready for graphics by this time, even though I didn't even know about C++ classes yet, so I started using allegro. I began by simply using it to output text in a full screen environment, and enjoying being able to do stuff with single key presses. I then drew my own font to use for tiles, and then dropped that and began work on a space shooter game with my older brother. He still does most of the graphics and planning for our games, while I do all of the programming. We actually almost completed the engine for that game, but before we did, we moved back to what we /really/ wanted to make - a role playing game. I was able to start it knowing much more about both C++ and allegro because of the previous things. And that's where I am now. So far I've written about 13,000 lines of code on it. Unfortunately, now all my time is spent doing web development with my other older brother. All the C++ definitely helps me to learn anything new. I think it's definitely still my favorite though. ...and I'm only eighteen...
I guess in short, I was inspired to program because I wanted to make games, and I didn't want to be limited by using toolkits.
Introduce him to competitive programming contests like TopCoder and other programming contest archives such as UVa and spoj.pl
there are some books like c# for sharp kids. it is little but encouraging. it shows the programming concepts like simple everyday things. worth a try
OK - here's where I recommend J (jsoftware.com) as a first language, you all flame me, I call you all a bunch of clueless boobies, and it goes downhill from there.
Ready to get started?
Anyway, since we've already had a number of posts like this, it would be interesting to have some follow-up: what did people end up doing and how were the results?
Personally, I've had no luck getting my daughter interested in programming but she is very much into music composition, so I guess that's something. She did show some interest in an "Eggbert" game when she was little - it lets you design Eggbert video game landscapes/obstacles/rewards that were pretty cool. She was also interested a little bit in some of the J to do some math that could be represented graphically, like pictures of Pascal's triangle modulus some constant - see http://www.jsoftware.com/jwiki/NYCJUG/Projects/Pascal .
Order him the 2600 magazine.
The hacks in the magazine are simple and fun to read, and often enough present some pieces of code. Your son will appreciate your openness towards potentially hazardous information and you will trust him not to abuse his knowledge. After all, teenagers will always be immensely interested in all sorts of society exploitation and mischief - even if the knowledge is never deployed elsewhere than bragging to other kids.
Python is a brilliant language to use for practical applications; eg. scapy is, in a nutshell, python interface to the TCP/IP stack.
The K&R C book is also a must-have, even if for nothing else but just to keep his feet on the ground.
You are absolutely wrong about Smarty, which is a horribly conceived and implemented disaster. Don't be such a yapping apologist, just because you managed to throw together your home page in PHP without knowing any other languages.
I am speaking from experience, having had to use PHP and Smarty, and having read the source code to Smarty in an vain attempt to figure out how it worked and why it was so difficult to get it to do even the simplest things correctly. I've been much happier using other better designed templating systems, which I will describe below.
You should read Wolf's Rants about PHP: Truth about short open tags and Smarty.
I use Drupal for my home page, so I know first hand that it sucks, and why. My dislike for PHP comes from hands on experience, writing and reading PHP code, not just reading web pages about it. PHP is not my only programming language, so I don't lack the perspective to compare it to other alternatives.
Python has a wide range of templating systems, some of which are much better than Smarty, and a few of which are almost as bad (but none are worse).
Zope uses DTML, which is unstructured and messy but gets the job done. It also has TAL and METAL, which are cleaner and more powerful, but an incredible pain in the ass to use, and extremely verbose and clumsy. I've written a lot of DTML, TAL and METAL, and I don't want to ever use them again, because I've found much better Python based templating systems since then.
TurboGears uses Kid, which is a very nicely designed an implemented templating system that provides a thin XML veneer on top of Python, and doesn't try to reinvent its own p
Take a look and feel free: http://www.PieMenu.com
Get him Revolution Media or PythonCard. He'll move on in his own time from either.
Thank you sir. I have bookmarked your post so that I can point people to it next time I have to explain why PHP hurts my brain so badly. There are just so many reasons that it's easy to leave things out when somebody puts you on the spot.
For these types of students, you will get nowhere starting with a language such as C++ or PHP. Instead, the language + IDE must provide easy visual feedback as to what he's doing so he can compare it to what he wanted to do ("Do what I mean, not what I say"). I made my first steps as a tween in Javascript (DHTML fiddlings), but mostly after I wrote a program that would let me type code and press a single button to see the results, as opposed to saving code and reloading my browser. I even got one of my peers to adapt a simple "hello world" into a script that would switch images after a single sit-down session in which we had mostly covered HTML. This is because all she had to do was "ctrl-s, alt-tab, f5", as opposed to opening up the (gasp!) command line to see if she got her code right, then going over arcane error messages spat out in compiler-speak. That is the importance of immediate gratification.
However, the problem with my first steps was that I was left without a notion of polymorphism or pointers that I would need in Java or C++. Learning those was painful due to the bad habits I had accumulated. As such, the Processing programming environment (http://processing.org/) would be a better match: it offers an easy to use API along with plenty of examples to tweak. Code and errors can be checked thank to a simple "play" button which brings up the program's visual, engaging output onscreen.
I have been experimenting with javascript and SVG to make animations for the browser.
Look at this game: http://bighead.poli.usp.br/~juca/code/svg/minigame/minigame.svg
I am now considering to use this to help my teenager cousin. He wants to lear programming and my parents asked me to provide some help.
I agree that it would be great to provide immediate visual gratification. Then, that is why I suggest SVG+javascript instead of the usual HTML+javascript. Because it is much more interesting to draw an SVG in Inkscape, open it in a text editor and attach a script tag than it would be to explain to the boy all those crazy, non-intuitive CSS stuff.
Also, it is a field that provides good oportunities for teaching various concepts, such as XML, (let the boy see the SVG both in an editor such as Inkscape and also in a text editor), DOM handling (getElementById, setAttribute), and even AJAX (when the kid wants something more advanced)!
The benefits:
1) the kid will be learning reusable concepts. All he/she learns can be used also in html. Learning these in an intuitive and friendly environment first makes the html/css stuff less frightening I guess.
2) it will be based on web standards
3) after a quick class about hosting files on a server, the kid will be glad to show his work instantaneously to his friends online. Before that he/she can perfectly work offline editing local files.
Alright, well you asked for the input of a high schooler... Okay so I'm a Senior in high school. I started programming with BASIC and HTML.. Python might be a good start but depending upon the age might be a little complex.. I'm also wondering why your steering him towards *NIX. Thats a mistake right there, I've been forced to use a single OS since I was little, playing games on the lap of my grandfather (an original IBM geek), back on DOS, then on Windows until recently when I bought my own iMac. *NIX is great but forcing him in one direction will limit him. A true programmer should be able to compile code an any OS hes thrown at. Which means if the code is a different dialect, he should be able to convert it, now I know that no one can ever hope to know all the dialects and all the programming languages, for there are far too many. But don't just sit him in front of lenny and have him code exclusivly on one OS. What I think you should do is just see if he shows enough interest in programming to actually sit down and learn the stuff. If you throw it at him, he might loose interest, or it could flourish, who knows. If you really want to peak his interest, just *tell* him about AJAX and go to Facebook or another popular site that heavily utilizes it, show him what AJAX does compared to HTML alone, or simple PHP. That would have caught my interest a long time ago, should it have existed. Leave a editor or IDE window open and blank, and a programming book next to it (go out and buy one even). Tell him your leaving to go do errands (and actually do it) if hes interested you might come home to a new program being created, or a second Hello World, the point is if he decided to do it when he was alone, he'll be interested enough to pursue it as a hobby. Thats my two cents.
Late to the discussion, I would've modded the parent up, but it's already at +5.
Actionscript 3 is strongly typed and OOP, so it won't teach the bad habits of some introductory languages.
For the artistically/animationly inclined, Flash gives you tons of power there. For the more programmatically inclined, Flex is an awesome programming environment that gives you all the application power of Flash Player using MXML, an XML layout language. Both are Actionscript 3. And I agree that there's tons of community. Being web based, it's trivial to share with lots of people.
But most importantly, the investment to build an interactive GUI application in, say, Flex is, in my opinion, as low as it can be and still be a full featured programming language. I'm sure you can build a non-interactive application just as easily in a lot of languages, but applications now, even trivial ones, should be able to let you show things on a screen and click on buttons. I think this is really key. You can DO something, something modest but still cool, and grow what you know by learning to do one more thing at a time. So without teaching you tons of bad practice, you can learn fairly incrementally. (Obviously you should grow up and learn more structure at some point... but that's later.)
If it wasn't clear I think whoever else in the chain said that it's better to start a kid by making them bash their brains against some really initially unrewarding stuff for the big payoff later - where the payoff is big BECAUSE it was hard - is basically crazy. I mean, if the kid WANTS to, they can go ahead. But if the goal is to encourage the programming itself, that's pretty crazy. The goal of that unrewarding stuff would be to make them set and work for long term goals... an admirable skill to learn, but one that's learned by extending what the kid WANTS to work on... you can't both move them into something they don't care about AND set the goals far ahead. It's fun to remember that I wrote stuff in assembly, but only a few people would've kept with programming if that's where they started.
Looking for freelance Actionscript (Flash/Flex) or ColdFusion work and/or freelance developers. Email me, put Slashdot
I'm late, but someone else posted and I replied about Actionscript elsewhere in the thread. I basically think you're completely on target about the goalset of being able to quickly leverage GUI power. But I believe Actionscript (Flex, Flash) is a much better first-choice.
Actionscript is much more consistent than browser JS, which makes it less frustrating to develop in. (I'm not trying to say this is a philosophical problem in JS, and indeed Actionscript is also an ECMAScript language, so they're very close. This is basically just browser divergence, and the political causes of that are beyond the scope of this post.)
In Flex (compared to a browser) the layout language is MXML instead of HTML. MXML has powerful features that expect to interact with Actionscript. And HTML is less consistent, and CSS is browsers is less consistent, for the same reasons listed above.
MXML makes it trivial to add considerably more complex GUI elements, like a tiled list of images or a pretty chart. (Trivial as long as your data is in a convenient format, XML setup the way it expects. If your schema is different it's still easy, but it's more than 3 lines of code.)
Looking for freelance Actionscript (Flash/Flex) or ColdFusion work and/or freelance developers. Email me, put Slashdot
I'm 20 right now and I study computer science at a n university. About ten years ago I started being interested in programming. My dad thought it was great(he's and engenieer and no programmer, but still) so he asked some folks for advice and I ended with a huge book about visual basic 6.0. It was new, it was easy, it was trendy... and I hated it. So I returned to playing starcraft/diablo/whatever. A couple of years later it just happened to pass that I got my hands on a book about C by H.Schildt and it was love from first sight if you know what I mean.. Now I'm pretty much aware that I've inherited some pretty bad habbits from his books, but I don't care that much about it, I'm trying to improve every day as it is :)
So my advice is - don't make any choices for your kid. Show him as much as you can and let him decide. He might love Python, and he might not. He might love graphics, and yet again - he might not.
Comment removed based on user account deletion
The above over-reaction is a perfect example of why right now is a bad time to use Python to teach a new young programmer. Wait at least a year until all the Pythonistas aren't as oversensitive to questions about Python 3.0.
Imagine some poor kids who dared to asked about why the print statement is different than it was last month on a python message board or mailing list getting this kinda crap?
"If you don't understand the new print staement, LEAVE. Trust me, noone in the Python community will miss you! Hell, noone in the wider programming community will etc."
"Shut up. Just learn to like that new print statement. It's CHANGE OR DIE."
And God have mercy on the poor kid who asks the Pythonistas about why they are going to the trouble of breaking python, but not addressing the it's huge concurrency problems while it's being broken.
You really are a dopey little fucker, aren't you? I'm not entirely sure how your uppercasing my words makes me the one screaming...
Wait at least a year until all the Pythonistas aren't as oversensitive to questions about Python 3.0.
You didn't ask any questions, you made unsubstantiated claims that weren't supported by anything, not even the link you posted to. What the Python community is 'oversensitive' to is lies and bigoted rhetoric. What I did was highlight your bias and inaccuracy, the audacity of which has clearly shaken you.
Did Python murder your parents before your eyes at a young age or something?
not addressing the it's huge concurrency problems while it's being broken
And out comes another tired old trope. You clearly don't know about the multiprocessing module that's being released with 3.0. But again, don't let the facts get in the way of your bullshit posturing.
The only "concurrency problems" Python seems to have at the moment is the lack of a 'make this run in parallel without me having to do any thinking' switch. Good luck with waiting for that.
idlemachine" "You really are a dopey little fucker, aren't you? I'm not entirely sure how your uppercasing my words makes me the one screaming"
Please demonstrate to us all how there is a "calm voiced and rational" manner in which you said...
"You really are a dopey little fucker, aren't you?"
"Did Python murder your parents before your eyes at a young age or something?"
"If this is really such a deal breaker for you, trust me, noone in the Python community will miss you.
Hell, noone in the wider programming community will"
"God knows there are times I'd wish Python 3.0 had kept print as a keyword just so people like you would shut the fuck up about it."
"When did improvement become so damn anathematic to people in the IT industry? It's change or die."
Someone posts batshit crazy statements like those... it's a given they're screaming rants.
And as I've said in two posts and you have proven for me, idlemachine... the reason one should not teach Python to a young programmer isn't the language, it the changes that are a couple of months away that are going to make all the current tutorials and learning resources wrong, as well as the furor and instability surrounding the Python community] right now. True believer Pythonistas, as idlemachine demonstrated, are very, very oversentitive about the topic of Python 3.0 changes and detonate at slightest suggestion that everything now and in the future perfect in Pythonland. It's just not the place for a young learner to be right now.
Good luck with that.
Here's a little hint before I go: try actually backing up your claims with some external evidence, you might come off less as a whiny little cuntsmear that way.
Might.
Look at the title of the thread, dumbass.
"How To Encourage a Young Teen To Learn Programming?"
I am the one who's been on point and in proper context the whole discussion... what is or isn't a good language for young programmers to learn right now. The subject these various aspect of the Python language you keep on trying to change the subject to, and it never was. It's whether or not the upheaval surrounding a language (Python) that has chosen to make itself obsolete in a couple of months is an appropriate choice to learn right now.
You, on the other hand, are exactly the type of hypersensitive Pythonista fanbois who prove part of my argument that Python is not a good language for young learners. Nobody is going to learn anything from hypersensitive argumentative assholes like idlemachine. The only thing a pythonista fanboi like idlemachine is going to do to a young programming student is make them quit programming before they even get started.
Anyone that dares try to raise a question about the one true faith of the Pythonista gets treated just like I have here... with a level of outrage normal human beings only display when they find out one of their siblings have been murdered or their mother was gang-raped.
I'm sorry, I meant to say hyperbolic little cuntsmear.
My mistake :)
idlemachine, who a few posts before this said...
"Did Python murder your parents before your eyes at a young age or something?" ...dares to call someone else "hyperbolic?"
LMAO!
He's right. You really *are* a cuntsmear.
So you claim in the middle of the night, you claim you are some other anonymous individual who just happened to find and start reading a 2 week old 1000 post thread and further you read this many posts into idlemachines ranting, too, huh?
Damn idlemachine, that's sinks to a new low around here. Someone has to be just sick with desperation to try to create fake agreement posts.
Really fucking desperate. Hillariosly so! ROFLMAO!