I'm a great believer in getting kids to code early - after all, I'm of that generation that was taught
10 PRINT "HELLO" 20 GOTO 10
at the age of 9. There are quite a few approaches to teaching today's kids in an engaging way, but I'm a bit wary of the sandbox solutions that teach kids things like how to navigate a virtual thingie around the screen, or lets them create things in a limited virtual world. I don't think kids will easily make the leap between these sort of games to seeing the full potential of programming - they're too limited and have no context for the kids. It's just another game.
Kids need to understand how programming fits into their world, they need to understand the context of coding, if they're going to fall in love with it.
I like Jason Gorman's comparison of programming to music. Most people learn an instrument because they want to make the sort of music they hear on the radio. But you give them a recorder and teach them to play "snug as a bug in a rug" and they go off the idea entirely.
"So, is this a sexy tune, Mrs. Badcrumble? I just don’t think, Mrs. Badcrumble, that this is really gonna be a sexy tune.".
Eddie Izzard - Definite Article
Similarly, you give kids a sandbox environment specifically to learn programming for the sake of programming, and they're not going to see how this turns into Facebook or Google or the apps on their phones. They're going to continue seeing computer programs as something that magicians in a land far, far away made just for them. The same way breakfast cereal is grown in box only for them. They don't see programming as something they can do, they don't see the computer as something they can influence.
Just the slightest hint, the slightest push, to show them that they can be the magician, that they can have power over this world. That's the way in.
Many of my generation of programmers learnt by coding those godawful choose-your-own adventure games. They weren't pretty or elegant, but in a single lesson we learnt that a short magic incantation could create something that looked like those games we played. With a bit of persistence we could truly create our own adventure, with a story that we created, not just follow someone else's paths. And then we could inflict that on our little sisters. It was such a short distance from the BBC command line to a game that many of us saw what programming could create, and that programming was something we could do.
There's an argument these days that computers got so complicated, so elegant, so perfected, that "kids these days" don't have that.
This is not true.
It's just not. Don't be fooled by this. Sure, PCs in the 1990s made it more tricky to simply program the thing. And IDEs felt, to those of us who learnt from a blinking prompt, like cheating somehow. Or, at the very least, they divorced us from the internals of the machine, provided us with too much separation (what nonsense, by the way - an IDE must be much closer to the command line than BASIC is from ones and zeros).
But those days are waaay behind us. Several more levels of indirection later, and actually it's much easier to write something that gives the immediate feedback, something that has real context, that will help kids get it. This will help kids see why. They're the same as us, they can't just be expected to do it because, they want to know what's the point.
And these days it's easier. You've got:
To name but a few. That's not even including the fact that you can get coding web pages and python code pretty quickly and see instant feedback, or even use an IDE to create a UI in something like C#.
The first three items in the list are great for people who are very touchy-feely, who want to see something in the real world. Can you imagine how exciting it would be for your kid to see that they wrote a program that closes the curtains? It's a tiny, stupid thing, but you just gave them control of the physical world they live in. Let their imagination do the rest.
The other ideas are probably more directly related to the stuff they use the computer for. You're really providing them with a way to customise the tools they already use. Who doesn't want to imprint a bit of themselves on the virtual world? These sorts of thing let them control a world they understand - in the context of a tool they know (e.g. Facebook), they create a game or a plugin or whatever that works within that world. And they start to see that this tool they use to talk to their friends, this tool that is there to fill their spare time, is something they can control. Maybe they'll start small, but they'll soon learn that everything they use, everything they touch on the computer, is really only code that some other human has built. They'll start to see that the computer-machine is influenceable, that they can tell it to do stuff and it will do it.
That is addictive.
That's what we want. We want to open their minds to how their world is constructed, and show them that they can influence it. They can control it.
They can change the world.