Can a parent with children at the age where they're capable of learning how to program chime in on how realistic this is? I mean I know that prospective and recent parents have grand dreams of how they'll spend weeks on end educating their child on how to avoid all the traps in life they themselves have fallen into (I'll be a dad in Feb, I know I do - and so do my friends who are in similar positions); daydreaming basically about teaching our children to become us as fast and efficiently as possible (where us is a moving target, of course).
The rational part of me thinks it's fruitless though - children at those ages aren't interested in abstract things like this unless there is an innate drive, and in that case you won't have to teach much at all anyway. Of all the people I know who are very good at something and who have older children, none of those children has an interest in their parent's area of expertise. And let's face it, programming is a very small and deep niche; as much as we'd like to tell ourselves that the world revolves around software, it doesn't, even if it powers most of the tools and things we use every day. The chance that our children will have the same interest in programming that we have is very small, it seems to me.
I've got a 2 year old and we muck about with http://scratch.mit.edu/ every so often (choose rockets on google images and make them take off to the moon, have steam trains drive around, change directions and play recorded sounds when you press the keys etc). The thing is I'm not doing it to show him how to program, and I have no preference as to whether he ends up knowing how to code, it is just something fun and creative to do; an alternative to playdough, lego or painting and drawing.
I think these kinds of things stem from a desire to repeat what we did as children. I know I started playing around with BASIC when I was 7, and while I don't want to have kids, if I did, I'd be looking to give them the same kind of experience.
That said, you can't force what your children are interested in. My father is a farmer, he couldn't really get me interested in doing that. So why would I expect that my kid would like programming?
That said, it's worth exposing them to see if they have that interest... but forcing it on them would end up poorly.
I think it is very realistic, I started mine off early and they seem to start to really take to it around 4-5. The point is not to get them to follow in your footsteps, but rather to open their minds to how logic makes them think different.
The funny part about logic, is once mastered, it transitions a person from learning resistance, to craving learning. One of the best ways to teach logic is via computing. I have seen the transition in my boy and it is great.
I don't expect him to be a developer and would be happy if he decided to go into something other that development but their is no denying, knowing logic buts him at a significant advantage over the majority of the population.
... and on a more serious note, work back from the sort of things he might like to make, not the tool.
I have an 8 yr old - he gets on well with sketchup and lego digital designer. I have shown him the sort of things that scratch and processing can do - he hasn't explored them beyond some tinkering.
The most likely candidate is lego mindstorms - he loves building with Lego, and I have already set him up with brick that does drive+steering. This hols, I will sort out all the tools on the house machine, and see what he makes of it.
My little girl is interested in Scratch but Alice just hit the nail on the head when it comes to keeping a girl interested in the subject.
I am also going to second Mindstorm it starts them down the right path, hardware and software. It is worth the money. Whatever you use, you want to get to games fast, if you want to keep them interested.
It is hard to use a traditional language because you can't get the feedback of a small game quickly. Now I know there are some great programmers that can, but with the coding boat anchor that is a kid trust me, you be lucky to get to a simple game even on the iPhone in a week. The only traditional tech that comes close is Flash or a 3d game engine scripting language. Back when Macromedia was around, Director was great for this, I know Adobe still sells it, but I don't know if it is worth it anymore, not having touched it, in over a decade.
The first thing you need to do is stop presuming your child will be interested in whatever you are interested. My old man loved cars and certainly shared that love with me but when he realized how much I love computers, he used up his savings to buy me one and supported me in becoming a programmer, despite the fact he knew nothing about computers himself. Parents have a lot of power over their kids. Instead of abusing it and trying to "replicate" themselves, they should use it to support their kids' own interests -- whatever those may be.
That said, if your kid ever clearly expresses interest in learning a programming language, I'd go with Ruby :)
It was invented with children in mind, it's a great programming language anyway, it's easy to use, very smooth to program and comes with the full package of GUI, debugger, class browser, younameit.
Children manage very fast and within two days, they're programming amazing things with it.
Squeak's "Hello World" is a green turtle moving over the screen.
(It's also a very nice and smooth programming language for grown-ups too.. :)
Though I'd second the Arduino idea, too - great environment!
I've actually seen quite a few people asking what a good language to teach to children would be. Unfortunately, I think the vast majority of us are inexcusably biased. Therefore, I think someone should get together a group of kids, put them all in the same room, and give them a selection of languages. Let them play with whatever language(s) they pick, and see what happens.
To answer the original article, I think Javascript is a good language to start with. My first 'language' was HTML, and the great thing about the browser languages is that you can show your creations off really easily.
Lego mindstorms has a beautiful visual programming tool in which you combine little blocks to build programs. Has flow control and all sorts of things going on, with the added bonus that everything is very tactile... you input the commands, click a button, and your contraption starts doing things.
Programming today is such an abstract craft that appears very complex to non-programmers and that is against anything a person needs to have in order to learn new stuff. It's like trying to teach a kid to ride a bike by showing him pictures symbolizing the physics of balance and pedalling and steering. No, you need something very concrete and hands-on. That's why kids learn to ride a bike on the bike and not in a simulator.
With regard to programming, we've gone backwards a lot. What I would do is put up an 80's personal computer with built-in BASIC into an emulator. (Or find a similar environment for modern computers: I don't know any but would be interested to hear about it.)
Nothing beats the joy of enlightenment when you POKE your first ball-shaped character on the screen, or write a FOR loop to move it around a bit, or POKE some values into foreground and background colors. And you realize that all the machine has is a list of numbered slots (memory addresses) that (almost) all can have values read from and written to them, and those values change the way the computer works.
Note that you can still write a byte to the framebuffer on modern computers to light a pixel, but it's much more easier to try things out on a 40x25 grid rather than on a 1600x1200x24bit array of RGB values.
A computer is really a very simple machine and if you don't tell your kid that most normal people think programming is scary, he won't know that. I've read of stories where woman office workers were in fact programming in the 60's and 70's, they just didn't realize that.
I remember when I was child in nineties and my father showed me logo. I didn't find it much interesting but it gave me some idea what programming is about [1]. Then in my teens I started learning C++ - and it was a real struggle. Only in the beginning of 2010 I discovered lisp language family (including racket) and I instantly loved its purity [2]. I wish I could start with it, it would save me much time and frustration. In fact I think I'm going to teach some basic racket to my 10 year-old cousin.
[1] Well, I was 7 years old that time so it was basically something like realizing concept of programming language as a way of communicating with computer
[2] Well, I'm no a lisp expert but they seem pure comparing to C/C++/Java when you write some beginner level programs - no cryptic things like type declarations or pointers
While it is very simplistic, it is also super-easy to get started and create something visible on the screen (which I suppose is important for a child not to lose interest). You can convey a lot of very basic yet important concepts, and immediatelly visualize them (Iteration: draw an n-polygon or growing objects, Recursion: Snowflake like fractals, and so on). If your child catches on, you then can ease in into something more sophisticated.
My 11 year old son has played a bit with Scratch and Mindstorms - but never got that engaged.
However, what recently got his attention was scripting in Crysis - he was playing it and accidentally opened the console window and he asked what that was for and it gave me the opportunity to explain about scripting and APIs. As he normally uses a console the openness of something like Crysis was a bit of a pleasant surprise to him.
Not that I'm recommending Crysis as an educational tool - but I do think it is important to find something that engages them.
Although the author discounted Python, I'd still recommend it. Python has a turtle graphics module that is based on Logo, a Lisp-based language that has been traditionally used to teach kids programming (myself included):
Yeah, there are plenty of tutorials out there for teaching Python to kids. I also remember seeing a book once, but can't remember the name.
I would like to see if currently anyone in the HN community has taught kids at a young age (preferably below 8) to code in Python and how well they could grasp it and implement it.
It's not cruel, it's just reality: some people have a natural aptitude for programming[1][2], while others don't.
C is a small enough language and has a simple enough programming model that it would be clear early on whether my kid had the natural aptitude that would justify focusing significant effort on learning programming as opposed to other worthy endeavors such as music playing or 4H club or learning another natural language.
Oh, QBASIC. That's also why I'm a programmer today. It was the first programming language that I learned. I remember typing QBASIC on my MS-DOS 6.22 command prompt when I was still a child, and seeing that blue, text only IDE light up.
I'd probably start them out with C# .NET in Visual Studio, and this is coming from a Mac guy.
This is solely based on the sense of joy and excitement I felt when I first started working in .NET as it was my first experience with quality auto-complete. Good times.
Doug Crockford gave a neat answer to a similar question: if you teach them assembly then they'll want to experiment with everything (i.e. not just stuff that lives inside a computer).
I try to remember what it was like when I was a young child learning to program, and if there is one thing that I remember, it was that I did it for games. I was lucky enough to be 6 years old in 1980, when you could get BASIC game listings in computer magazines - you'd type them in and hey! new game!
But before even starting to type in those games, my father had shown me a few simple things that you could do in BASIC, with prints and inputs and some simple loops/gotos/gosubs. That meant that I could understand the language that I was typing in from the magazines.
More importantly still, I was using a somewhat orphan computer called a Compucolor II. It didn't have the same graphics calls as those found in the magazines for TRS 80/Apple ][ etc. So I had to learn to translate the graphics calls to something that made sense for my computer - in general it was only a small part of the program, so not too daunting, but it meant that I actually had to think about what I was doing, not just typing code into the computer.
I played a bit with Logo at around the same time (my father was a CompSci teacher), but it never engaged me the same way that those first BASIC games did.
The other big influence that I remember from early childhood was a book that contained a full text adventure called Haunted House (or something like that). The book had lot of pretty pictures, but more importantly it explained how each bit of code actually worked, how to store room descriptions, state flags, objects in the inventory, how to write a simple parser etc.
Better yet, towards the end of the book, there were challenges - how could I modify the game so that the player has to retrieve a key that was hidden in the drawer of the desk in room 16? How can I modify the game so that the player is eaten by a monster if they spend too many consecutive turns in room 27? And how can I give warning of the monster's approach so that they know to leave? By the time I'd finished that book, I had a pretty good understanding of what programming was about.
In the end, I think that all of the discussion about what langauge to use is pointless. For what it's worth, I think that the keys are the ability to create simple arcade games with less than 100 lines of code, plus some sort of book/aide that a kid can go through at their own pace that explains how to write a more complex game. Data strutures? Object oriented code? functional programming? No, these are abstractions that are quite simply too hard for most kids to grasp. I think arrays are about the limit that young children can understand effectively. Get them started on thinking about how to break down problems into simple parts that can be solved. Get them actually coding by choosing a subject matter that interests them. The rest will come later quite naturally.
I would say that C, an arduino, a bunch of resistors, LEDs, a VU-meter then hack something fun out of that. Nothing could beat the feeling of programming something you can wire and hold in your hand. Especially for children.
Scheme, since it is so simple. Very easy to learn. No syntax, no comma, no semi-colon. I would have been delighted to learn scheme as my first language rather than c.
This. Scheme was the first language I was ever taught rather than clumsily working out badly on my own, and it was a joy.
If you've not yet had your mind (irreparably ?) damaged by prolonged exposure to imperative languages then programming in Scheme is a wonderful experience in which everything is so simple, clear, and intuitive that it feels like everything is not only possible, but easy.
The only other language I've ever actually enjoyed using is Lua, which would also not be a bad choice.
I'm going to stick my neck out and say RealBasic. Yes, the language is proprietary and costs money, but it's really easy to get some code going, it runs on multiple platforms, and you can make native API and DLL function calls where the standard library doesn't meet your needs.
Sorry, I must have been reading HN too long and I misread the title as What is the first programming Language You Would Teach Your Child.
But seriously, concentrate on reading to your child at first, then reading with your child. Programming should come later in life, and only if that is the child's interest.
(What ain't no programming language I have heard of)
Other than some basic HTML, the first true programming language that I mastered was that of my Texas Instruments "TI-83+" calculator.
I would make little programs in 7th and 8th grade that helped with the math that we were learning at the time. I then proceeded to sell these programs to friends and classmates. It was awesome.... until I got caught!
With all of the mentions of turtle graphics, I'm glad that it was put into Hackety over the summer... what do people use to do stuff with Logo nowadays? Is it just a library used from another language, or is there some modern Logo environment out there that I'm not aware of?
COBOL! I'm not entirely joking. There are important legacy systems using COBOL that simply refuse to die--unlike the aging COBOL programmers who maintain them. I bet there would be many organizations that would love to find a young COBOL expert.
On a more serious note, Lua could be a good option. It is a clean, simple, but powerful language, and it is used to script many games. I could see a kid enjoying learning programming by writing Warcraft add-ons.
Javascript (the good parts) might be reasonable. A web browser then provides a nice interactive environment the kid can program.
I wonder if a case could be made for something like Haskell? The idea there would be that it is a powerful, concise language, but that many people have trouble learning it after they have learned more conventional languages. So why not start with Haskell, before the mind has been trained to not think in a Haskell-compatible way? (Same argument could be made for several other languages besides Haskell).
I picked up programming at 10 from watching my father (machine engineer with no CS background whatsoever) write dBaseIII+ programs. So I guess any language will do, as long as it doesn't require advanced maths.
Demo programming not only made programming accessible and fun, it also was the first time that I actually got interested in Calculus outside of school (matrix math for 3D animations, etc)
The rational part of me thinks it's fruitless though - children at those ages aren't interested in abstract things like this unless there is an innate drive, and in that case you won't have to teach much at all anyway. Of all the people I know who are very good at something and who have older children, none of those children has an interest in their parent's area of expertise. And let's face it, programming is a very small and deep niche; as much as we'd like to tell ourselves that the world revolves around software, it doesn't, even if it powers most of the tools and things we use every day. The chance that our children will have the same interest in programming that we have is very small, it seems to me.