I have a pretty precocious child when it comes to using a computer - which is no surprise. Years ago, I read the essay in Freakanomics about the studies that showed having a house full of books produced readers (true). Having a house full of computers has a similar effect -- it turns children into programmers. Computers are curiosity machines and it is no fun to simply be a consumer of media when one can be a media creator.
In my house, Scratch (scratch.mit.edu) has been king of the kid programming. My daughter has made dozens and dozens of interactive displays, animations, and games. It's not just a visual programming language, it's also a curated and safe kid online community where they swap code and comment on each other's programs.
Scratch is visual and a completely contained IDE within a browser. Kids drag and drop components with variables, loop constructs, and input/output devices for keyboard and mouse to build up visual subroutines. From there kids can add in graphics (costumes), sound files, and animations to build complete projects.
We used the book "Super Scratch Programming Adventure (covers v. 2)." In fact, our copy has disintegrated.
However, as a warning: clever kids hit the hard ceiling of Scratch pretty hard. My daughter has blown through almost everything she can do with Scratch (which is alot) and we had to go to her computer teacher for other ideas.
If you ask me, Python is the end-all be-all of scripting languages. It can be as simple or complex as you need it to be (and with Python 3.4.1 and coroutines and futures it can get pretty complex!) However, moving kids from the highly intuitive drag-and-drop Lego-like interface of Scratch into the VIM and EMACS world turned out to be a hard sell. I have tried out PyCharm as an IDE and that works okay but it's still not the same ease as Scratch.
We are test driving Wyliodrin, a GUI IDE in a browser which has visual blocks much like Scratch and interfaces with the Raspberry Pi, the Arduino, and a large number of standard programming languages like Python. We're trying out some Pygame for Kids programming with it. It feels promising as a bridge between Scratch and making real things.
I personally like Python for Kids: A Playful Introduction as a starter book for kids and adults because I have a fondness for the Pygame library. We have also had quite a bit of success with Code Academy, believe it or not. The free Python course there is just enough information to whet the appetite and get into the flow of basic Python programming.
Processing (found at processing.org) is an interesting and compelling idea for getting kids into programming with instant and tactile feedback. Harder than Scratch and arguably more complex than beginning Python, Processing is a programming language built on the JVM and Java designed explicitly for artists. It comes with a huge number of drawing and interaction primitives out of the box and works not unlike LOGO from the days of yore.
Processing is a complete system from point of download. Parents do not even need to install java on their systems. And it has a little programming interface and an IDE. Unfortunately, unlike Scratch or Wyliodrin, it is geared more toward those with some experience programming and does not have a "fun" drag and drop experience.
But Processing is ridiculously powerful. With a couple of quick primitives kids can draw animations, algorithmic designs, interactive demonstrations with mouse and keyboard, read in and display visualizations of data, or make simple games. The books are kind of sparse -- I personally have read the Processing starter book from Make and the Visualizing Data book from O'Reilly. Sadly, Processing: A Programming Handbook for Visual Designers and Artists 2nd Edition is not yet available -- that looks like the Processing Holy Grail.
For incredibly precious programming kids who want to do some visual graphics and get into Arduino quick it's worth a look and incredibly easy to download and install.
If you do want to get a kid into programming and you don't feel like shelling out $1500 for a brand new 13" Macbook Pro, I cannot recommend enough going to AdaFruit and picking up a Raspberry Pi B+. For about $150 you can buy:
- A fully functioning Linux-based computer full of Scratch and Python already loaded and ready to go and usable on WiFi;
- A bright rainbow case;
- A mouse and keyboard combination;
- A small television monitor perfect for small spaces and small hands.
Everything a curious mind needs to get started programming is right there in the box. Very little maintenance, installation, patching, or even Unix-knowledge required. My experience with it was: plug in the SanDisk with the OS on it, turn it on, wait for it to boot, and start working.
Two Other Possible Options
For parents who are more hard core there is:
- Learn to Program with Minecraft Plugins: Create Flying Creepers and Flying Cows in Java
The second one is an interesting idea because Minecraft is Java and that will get kids programming hard-core, no doubt about it. But now we've gone into the world of modding games so now parents need to build a server, install a client with code, figure out the right modding tools (the book will no doubt help), stand up an IDE and a Java build chain and... yep. It's for older kids, I think.
What about LEGO NXT?
I'm going to be honest -- I don't really know what shape NXT is in these days. I feel like kids robotics has gone the way of the Arduino, processing, python, and duct tape. We're about to try out littleBits which also interfaces with LEGOs and the Arduino and presumably the Pi. So that's a less cheap but interesting direction to take things.
Also there's python and Blender for 3D graphics... the world is full of too many cool toys!
A Quick Conclusion
If kids are just starting out programming and they are 12 and under I recommend Scratch, hand's down. Scratch will get kids programming fast.
If they have blown through Scratch and are looking for a bigger challenge, I do recommend getting a Pi and getting into Python. Python opens the world to not just Pygame but all of the mods and hardware hacking that can go along with the Pi.