Kids tend to become interested in programming through being consumers. So it’s likely that if your child expresses interest in programming, it will be such activities as making app’s for the iPod or becoming a computer game programmer. The problem is, those are not really attainable as first goals, and trying to attain them too early may either turn your child off to future attempts, or teach him bad habits that will cause him trouble later.
My husband is a computer scientist with strong opinions about what make bad programming. He sees it all the time in his line of work. So when our son first started expressing interest in programming, we wanted to find a good way to proceed that would lead him to understand programming, restrict him from making frustrating mistakes, and also allow him to have fun.
At the time, the options were a bit more limited. We found Microworlds, which is based on the Logo programming language. Microworlds is made by a for-profit company, and thus does cost money. But it’s an excellent starting place, especially if you have a really young child and start with Microworlds JR. Of the programming environments we’ve used, JR is the only one that is 100% usable for a pre-reading child. Our son was 6 when he started using it, so he only used it for a short time, but if you’re starting with a younger child, I would definitely suggest this as the way to go.
(I will insert the caveat that my husband and I, as a computer scientist and a writer/graphic designer who use computers a lot in our daily lives, did not believe that screen time was appropriate or in any way beneficial for our preschool-aged children, so we had no need for computer-based applications for pre-reading children.)
Our son moved up to Microworlds EX, which is a very wide-ranging, adaptable programming language for kids. The makers of EX recommend this environment for kids in fourth grade and higher, and after using it with a younger child and then going on to other programming environments, I would agree. Because EX involves typing, and typing is not the forte of many younger children, it’s easy to introduce syntax errors into programs. Now that our son is older, I’ve asked him to go back to it to see if it has capabilities that he wasn’t ready to use at a younger age.
Our next discovery was Scratch, a fabulous and free programming environment from MIT. Scratch offers a number of advantages for kids who want to program.
First of all, Scratch is visually based. The bits of each program are contained in “blocks” which you fit together very much like blocks in the real world. Though this might sound limiting, it’s actually freeing for a child who is not ready to conceive of a program in a language, but can visualize it as blocks of activity. It correlates well with the way kids play with ideas.
Second, because Scratch is contained within this block world, it’s impossible for a child to run into the sorts of problems that the freedom of a programming language offers. An analogy is this: Your child wants to play. You could choose the construction site down the street, which would be very, very fun! However, it contains real tools that a child could cut her hand off with, and real girders above real concrete where she could fall. So instead, we create playgrounds which, if they are good ones, are both safe and offer activities that teach our children skills through play. Scratch is like the coolest safe playground on your computer.
Third, the biggest strength of Scratch is the wonderful, safe, online community. Our son loved posting his work and getting comments, and seeing the work that everyone else was doing. Programming is something that can tend to lead to lots of time in a dark room staring at a glowing screen. Scratch gets kids at least metaphorically out of that dark room so they can share with each other. If you live, as we do, in a community where there are few opportunities for young programmers to get together, the online Scratch community is very valuable.
My son says that the main drawback of Scratch is its limitation on creating new commands. He recommends that more advanced programmers should check out BYOB, an extension to Scratch that allows more creativity in programming. This is not, however, the version that new users should start with.
Our most recent discovery is Alice, a free environment offered by Carnegie Mellon. Alice is a very seductive environment for kids who are born storytellers. You start an Alice program by creating a “world” and populating it with characters and objects, all of which can be manipulated. If you’re looking to interest a child who isn’t naturally attracted to programming, Alice is a good place to start. It’s possible to create things in Alice without even knowing that you are programming!
Like Scratch, Alice is heavy on the need to read, but light on demands for typing skills. I am running a club for young Alice users, ranging from 7 to 11, and it’s fascinating to watch. I have fantasies of devising child psychology experiments using Alice, because kids love to play with it, but each of them plays differently. Some kids just love the silliness that can be created with clicks of the mouse. Some kids immediately want to tell a story. Others figure out pretty quickly that storytelling is only the beginning in Alice, and they can entice the viewer to interact with the story or play a game. Some of my kids are creating rich and varied worlds with little story at all.
I’ve noticed that kids who think of programming as a more serious pursuit might be tempted to think that Alice is an environment just for playing, but Alice is deceiving that way. After assuring me that Alice couldn’t possibly do the math that he was doing in a Scratch program, my son and I did a little research and found that Alice could, in fact, do the same thing. But a programming environment is a bit like a car: the type of car you’re in will inspire you to drive differently. Alice is certainly more playful and narrative than Scratch on its face, but Alice is deeper and offers more insight into how programming works once you graduate to a “real” programming language.
The Alice blog offers this post about the difference between Alice and Scratch. My experience bears out their points well: Scratch was really great for our son’s self-directed explorations. With Alice, the kids have needed a lot more guidance, but it seems like Alice offers a wider range of opportunities for stepping into the study of real-world programming (especially Java, which is its basis). We have only been using it a couple of months, and have hardly scratched the surface. It would be nice if there were a community analogous to Scratch’s community, but so far I haven’t found one (Alice’s online community is much more geared toward teachers).
In summary, I believe that kids wanting to program are offered a lot of great choices, and which you use depends on their needs and interests, as well as your ability to mentor them. All of the environments we’ve used allow kids to learn the basics of programming, so that if they continue to be interested once they get what programming really is, they’ll be set up with a solid foundation. (Some kids try out programming, and find out that even though they love to use software, creating it just isn’t their cup of tea!) Using visually based environments made especially for kids allows kids to explore in ways that will save them from the frustration and headaches of too many choices and too many demands they’re not ready for.
So if your child tells you they want to start by programming iPod app’s, you might want to offer them a period first of learning programming through tools that will help them understand what programming is. Just like a climbing wall is a better starting place to learn climbing than Half Dome, these environments can offer fun and learning that will spark creativity and well-developed logical and spacial reasoning abilities before your child goes on to the wild world of programming.
Note: See the comment below for links to Alice tutorials.
Here are tutorials that I’ve found for Alice:
http://www.cs.duke.edu/csed/alice/aliceInSchools/
http://www.dickbaldwin.com/tocalice.htm
http://media.pearsoncmg.com/aw/aw_snyder_fluency_3/alice/index.html
http://lycofs01.lycoming.edu/~pelusoem/Sabbatical2010/
Thank you for this comparison and review of learning to program options. I know my (almost) 10 year-old daughter wants to play around and create things on her computer, but she’s always leaping too far ahead to things she’s not equipped for and I’m not prepped to teach. We’re going to start exploring these and find which one will be the best fit for her.
Suki, Great article. I’ll be teaching Alice in a homeschool co-op for middle/high school – any suggestions to strengthen the learning experience from younger kids? I’m blessed to get to spend two weeks at Duke this summer learning how to implement Alice in a classroom. Looking forward to it. What pitfalls did you find?
Hi April, The biggest problem I had was a very wide age range — 7 to 11 at the beginning. I was faced with some problems that you won’t be with middle schoolers — having to spell everything for the 7 yo’s, for example! But I think the biggest programming hurdle that all kids have to get over is the idea of compartmentalizing. They all seem to want to start at A and go to Z in a linear way, instead of thinking of each piece of a program as a method. Sometimes I try to get their hands off the keyboard and we do games or have discussions without computers in front of us. I think this helps link the ideas behind programming into the concrete world. I got some ideas from this site: http://csunplugged.org/ . Good luck!
More details: If you have younger kids and want to teach programming concepts without computers, there is an excellent website called Computer Science Unplugged. You can download PDFs of their games, which teach all sorts of concepts your kids will need when they eventually start programming: http://csunplugged.org/activities