I've been using Scratch and showing them how HTML works and a little bit of word processing, but what's next?

What have y'all found effective in teaching children around 10ish about programming?

How deep can you go? Variables, control flow, iteration, recursion, message passing, ...?

link|improve this question
2  
+1 for Scratch. That looks pretty great. – Jared Updike Jul 17 '09 at 5:30
5  
lots and lots of related questions on stack overflow.. stackoverflow.com/questions/… – Jeff Atwood Jul 17 '09 at 5:38
3  
it's probably OK here though, with more of a focus on basic HTML and very simple game type programming – Jeff Atwood Jul 17 '09 at 5:39
5  
This question belong to stackoverflow, where is many questions about this topic. – MicTech Jul 17 '09 at 6:51
5  
I think it's suitable here. Btw Jeff, ever thought of a feature (maybe for moderators only) where a question can appear on either SO, SU or SF? It's good for questions that straddle between domains. – GeneQ Jul 17 '09 at 7:34
show 1 more comment
feedback

18 Answers

up vote 5 down vote accepted

I came across this book recently while browsing recent books from Manning:

Hello World! cover

Publisher link: Manning: "Hello World!"
Amazon link: "Hello World! Computer Programming for Kids and Other Beginners (Paperback)"

[...] Hello World! provides a gentle but thorough introduction to the world of computer programming. It's written in language a 12-year-old can follow, but anyone who wants to learn how to program a computer can use it. Even adults. Written by Warren Sande and his son, Carter, and reviewed by professional educators, this book is kid-tested and parent-approved. [...]

I haven't read it yet but I was thinking of picking it up for a youngster in the family.

link|improve this answer
feedback

Lego Mindstorms looks very cool.

Of course, we don't know what you've already taught him and this isn't going to teach him much of what goes on in the background. But Labview is very easy to program simple stuff with.

But as Joel would say: let them learn C!

link|improve this answer
Mindstorms was another great thing for me, because the product was cool and it would actually move! – jtbandes Jul 17 '09 at 5:34
Yes, we have MindStorms. But right now, my daughters are more interested in Lego houses and gardens than in gears. But I like it. :) – lavinio Jul 17 '09 at 5:46
I'm with you lavinio, I'm 38 and I'm into Mindstorms! Especially after I saw the YouTube video of the Rubik's Cube solver. And when they've learned C to satisfy Joel, they can start on MIT-Scheme to get them ready for their freshman year ;-) – avstrallen Jul 17 '09 at 11:07
feedback

Look no further, there's actually an entire learning platform/ OS designed for this very purpose: Sugar.

The OLPC (One Laptop Per Child) operating system called Sugar is now available to the general public and you can run it as a VM within all major operating systems such as Mac, Windows and Linux.

Download a copy at Sugar Labs.

One interesting activity included is called TurtleArt, a souped up 21st century version of Logo. Also has a kid friendly version of a Python IDE called Pippy. It actually teaches kids Python!

See TurtleArt and Pippy and the other activities found in Sugar.

Alan Kay was behind some of the novel concepts in Sugar OS which is actually a modern incarnation of his visionary DynaBook. Even as an adult (who's an engineer), I find it fun to play with.

And if you love Sugar as a VM, you can even buy the hardware and at the same time help a poor kid somewhere else in the world.

Engadget explains : OLPC XO Buy-One, Give-One program underway

OLPC OX

As a bonus to us adults, Sugar is derived from Fedora. So it's a real and complete Linux based OS. Should be fun to hack. ;-)

link|improve this answer
2  
+1 for suggesting an updated "Logo". That's how I got my start about 25 years ago ;) – Russell Heilling Jul 17 '09 at 8:49
Squeak is also on Sugar, which is an intro to Scheme and Lisp; however it's more advanced than Turtle Art. – Broam Dec 3 '09 at 15:37
feedback

Alice from Carnegie Mellon is one that, in addition to Scratch, I plan to introduce to my niece.

From the web site:

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.

link|improve this answer
Since I already have MindStorms and Scratch, those comments didn't help. But Alice looks right up their alley. – lavinio Jul 20 '09 at 14:27
For some reason, Alice crashes my computer. I get a BSOD whenever I try to run a program. – ephilip Aug 19 '09 at 12:36
feedback

One of the things most useful for me (as a current 16-year-old) was to come up with a project — something I really wanted to do, or to make work. Then I worked through whatever I needed, and at the end not only had I made something neat, I'd learned something. 7 years of that worked great for me. I think I started by making a family website — maybe you can have them do that? I started with the HTML, then that took me into JavaScript once I found some nifty things to copy & paste in. From there I went on to other languages.

link|improve this answer
feedback

The problem, as I see it, is complexity.

Today programming seems to be something that one needs to teach to children, rather than one children can learn.

By the time I was 10, I had outgrown my BASIC interpreter, and had taught myself 6502 assembly and Pascal. I could do this because each of these three languages is small, self-contained, and complete technical manuals came with my computer.

(I don't think I'm bragging. I'm not even the best programmer in my family. And I can always point to far more gifted programmers, like L. Peter Deutsch, who wrote the PDP-1 Lisp 1.5 compiler when he was 12.)

We don't write programs any more -- we write "systems". They're big and complex, and even when we make the languages simpler (Python), they have a gazillion libraries, and need to communicate with a gazillion other programs (like operating systems and web browsers) to make anything useful happen.

Simply put, the reason kids can't teach themselves to program any more is because they have to deal with 50 years of complexity that we've dumped on them. If they only had to deal with C=64s and PDP-1s they'd be writing assembly code and Lisp compilers on their own, too. We wouldn't need snap-together-blocks and cartoon cats to try to make it artificially fun.

You asked about "variables, control flow, iteration", etc. These are not hard concepts for kids to get. But if you sit them down at, say, a quad-core Mac OS X or Vista workstation, they start by looking at a box with fancy 3d graphics and animation and a UI that isn't consistent -- it's all magic.

It's like if you're trying to teach kids how a car works, you don't start with a Lexus Hybrid. I'm sure it's a great car, but it's fantastically complex inside (I've worked on hybrids before). It has 2 completely different engine systems routed to the user interface of "press pedal, make car go faster" -- magic. Instead, you get an old crappy clunker with a manual transmission so they can learn the basics.

(This isn't just old-versus-new, and I'm not just a bitter old-timer. All my friends with C=64s and Apple-IIs ended up programming them, and my friends with Amigas and Macs didn't. Also, none of my friends with Lexuses work on their cars -- if you want your kid to know how to fix a car, I wouldn't buy a Lexus. They're just too nice, reliable, and magical.)

Thus, do the same for computers. I hear some suggestions to limit the scope like "Python and the web". I say, go even further. Get an Apple II and C=64, including all the technical manuals. Python and the web are still loaded with tons of legacy cruft.

link|improve this answer
feedback

Get them to work on a Python console.

One instruction at a time. Then combine those to create a program.

link|improve this answer
feedback

My advice is make sure that they're having fun.

I started doing "programming" when I was about 8 or so.. I started off with HTML because it's fairly easy to understand for beginners - show them some simple stuff like adding images to the page, showing bits of text; this works quite well because they can get visible results immediately, and in a fairly short amount of time, so they're likely to be more engaged and not get bored.

Another thing I used was LOGO; although slightly outdated now, you may want to consider showing them some stuff with it, because again, comparatively, it's quite a straightforward language to pick up, and you can, again, create visible results in fairly short spaces of time, and do more complex stuff like drawing shapes, doing simple animations, which is quite easy to do and more interesting than simply using static content.

How deep can you go? Variables, control flow, iteration, recursion, message passing, ...?

Just don't rush them - if they don't enjoy what they're doing with programming, it might be a bit of a turnoff.. Just take things one step at a time, and make sure that they're enjoying themselves. All the time since I've been programming, I've been doing it because I've enjoyed it - that makes it a fun thing to do, and if you ask any programmer, they're almost certain to do it because they enjoy it. Only in the last few years have I begun to look at more complex topics like the ones you describe, because some of the subject matters can be quite hard to grasp, and require more focus to understand. They also don't have clear results - with message passing, for example, it's a very important and useful topic to learn, but it's hard to see how it fits into things, and is not as obvious as say, drawing stuff on the screen or showing some images or text.

If you start looking at other languages, such as Javascript, then perhaps you can start to show them some simple language features, such as variables, or conditionals, which are more advanced than simply putting images on a webpage, and are also useful and integral to lots of languages.

But just make sure that they're having fun with what they do, and don't rush them.

link|improve this answer
feedback

I learned on GW-BASIC at that age (9?). I was writing text adventure games and interactive (text) trivia games. I can't image how cool it would be to learn to program in this day and age, with all the F/OSS programming resources... and the web!

Sure, variables, control flow, iteration. Especially teach math and algebra or motivate the child to learn the math they need to be a good programmer. That's how I got into algebra at a young age.

link|improve this answer
I was working with TI-BASIC on the TI-83s all through middle school, which was great as well. – jtbandes Jul 17 '09 at 5:33
I started on TRS-80s, Apple IIs and Commodore PETs at around 11 or 12. Part of the problem is there is so much... – lavinio Jul 17 '09 at 5:47
Yeah not long after that I was hacking away at TI-85 Basic. – Jared Updike Jul 17 '09 at 7:24
feedback

Kodu, if you have an Xbox 360.

link|improve this answer
feedback

Just came across the following link to a Wired How-To Wiki:

Teach a Kid to Program

link|improve this answer
feedback

I asked a similar question on twitter, specifically about Ruby (my current favorite language). Here's the resources I got back.

Some other random, less useful. I'm reading through Learn to Program and will be sitting down with my 10 yr old next week to start. She's excited, though neither of us knows what she's going to get into.

link|improve this answer
feedback

Kara is a pretty neat programming learning software. It's a little bug robot, that has a few sensors. you can tell the bug what to do on which conditions and solve simple puzzles.

When that is no problem any more, you can go on to a programming language, like Java-, J avaScript-, Python-, Ruby- or even LegoKara, and program the commands and conditions in a very basic way.

It's what I give to my pupils who want to learn more about programming.

link|improve this answer
feedback

get them to play LightBot. it's a Flash game which you have to guide a robot to go to a destination, and you have to give it instructions that remind programming (like loops, functions).

link|improve this answer
feedback

Not necessarily a serious answer, but this game looks like fun and is described as a programing learning experience for the young. C Jump

I doubt how much it is worth in actuall learning to program, but again, it does look like fun.

link|improve this answer
feedback

PC Pro (a UK PC magazine) recently had a series of articles to help you get started. They split it into 3 age ranges

The first one isn't really programming, but does get them into the tools.

link|improve this answer
feedback

In my opinion if they want to do it themselves and have a real interest in it, they'll decide themselves what to use like we all probably did in the olden days ;)

link|improve this answer
feedback

I read somewhere a blog about a guy that introduced programming to his kids through Microsoft's Small Basic. Maybe you can give that a shot.

link|improve this answer
feedback

Your Answer

 
or
required, but never shown

Not the answer you're looking for? Browse other questions tagged or ask your own question.