I often get asked about teaching kids programming
I've been programming for over 30 years. I also homeschooled our kids, interacted with other homeschooled kids wanting to learn programming and also taught stuff at regular schools.
When people say their kids want to learn programming, they are often stumped. Mum and dad and teachers typically know nothing and don't know ehere to turn.
First thing I tell them to do is to get interested in problem solving. Fiddling with Lego is a good idea. Sure, both my kids (now post school age) are good programmers. Most of that they learned knee deep in the Lego.
Some games are good too. I tell them to play CastleMouse. http://jayisgames.com/archives/2010/02/castlemouse.php This game requires much of the sequential & parellel cause/effect thinking that programming does. If you're stumped by Castle Mouse, you'll never be a programmer.
Messing about with robotics is a good idea too. Watch how the kids observe the robot doing things. Some are obviously making a connection between the code running in the robot and what the robot actually does, others see these as disjointed operations: I pour some code in here and the robot does something over there...
The most important attribute for being a good programmer is to be able to observe system behaviour/failure, figue out what is happening and then actively trying to fix the problem. Actual skills (& languages) count for nothing. Those can be learned later.
What we're looking for in a kid is the same thing as we look for in good employees: the "spark". The ability to figure stuff out.
Slightly OT, but when I did a lot of hiring, one of the best people I ever hired for embedded programming (understanding circuit diagrams, writing interrupt service routines in C and assembler etc) came to us with a business computing background: BASIC, access data bases etc. No embedded skills, but he knew how to break down a problem and fill in the gaps as he learned. I spent about half an hour explaining to him how basic digital circuits work. Pointed him at some code segments to read and within a few days he was solving problems and generating useful code. Within weeks he became one of the hottest programmers on the team.
There is no point in trying to develop the programmer in every kid out there. Doing so just holds hack classes while dumb Johnny gets it.
Society is served far better by putting the effort into those who really CAN and leaving those that can't to do drama or burger-flipping 101.