Don't think about languages, think what you want them to create..
Basically, when their parents ask them "So, what did you learn?", I think the answer should be "How to [create a website/make my own video game/control a robot]!", rather than "I learned [Python/Java/C#/PHP/...]!"
Robots?
Perhaps a bunch of LEGO Mindstorms kits (how I first got interested in programming)? Or the BASIC Stamp based Boe-bot?
Both possibly a bit expensive, but it's the best way to get kids to care about programming - instead of making it display Hello $name
in a boring terminal, they get to make little robots move around, obeying their every command!
This is how MIT are teaching their electrical engineering and computer science courses now, since it more mimics real-world development - badly documented APIs, and machines that never quite do what they're supposed to, meaning lots of experimentation and debugging (the Stackoverflow podcast #55 or #56 explained it better, but the transcript doesn't cover that part yet)
One good thing about "robots" are they are pretty simple.. Once you teach them the basic commands (forward, turn left/right and wait x seconds
) you can quickly set up competitions and challenges (like navigate this simple maze, or be able to avoid obstacles)
There's software equivalents, things like LOGO (there's a LOGO-like Python module called "Trutle"), and more advanced 3D ~games where you program robots - although it's not quite the same as seeing a physical machine move around like you just told it to.. but may be more practical.
Games?
Potentially more complicated. There is plenty of frameworks around, but to get to a point where something is fun can require a lot of time and prior knowledge.
For example, PyGame requires a reasonable knowledge of Python, if you have to teach that first the kids may get bored before you can let them create anything interesting (Whereas with the robots, once you teach them the commands to move it forwards/turn, and a delay, you can do a lot)
Something like The 3D Game Maker, or DarkBasic or Torque may be better, as it could provide more immediate feedback
Websites?
Rails, or Django or something might be "best", but if you start out teaching that, you have to explain loads of other stuff, like using a terminal to create a new rails app, how to generate controllers (and what a controller is), edit HTML (and explain what HTML is..), how the page magically gets generated from those random files everywhere..
I would say teach them HTML (not CSS, at least initially). Things like how to format text, how to change the page title, how to use tables.
When they can make reasonable websites, show them how to add basic PHP to the page, say have an "Enter your name" form, then print "Hello $name" in the title. Then perhaps something with MySQL, say a guestbook type thing? If you serve their code via a central web-server they could leave each other messages. When that is done, show them how to break their own website (using XSS and SQL injections), and show them things like mysql_escape()
and htmlentities()
. There's lots of ways of progress, say with CSS for better design, Javascript for interactivity, more advanced PHP (for example, authentication? Interacting with third-party APIs, like.. Twitter? Google search?)
Desktop Applications?
I'm not sure what sort of application you'd have them create.. You could maybe combine this with another project, say making a guestbook in PHP, and having a desktop application to post to it?
I would suggest using Shoes, or Visual BASIC (or Visual C#, which really isn't all that more complicated to learn), as they all give good immediate feedback.