We then tried a simple C-like language for use with a Lego Mindstorm - but this was too much for him to learn at once.
After some research, I downloaded a trial version of Phrogram - which I wound up buying and he used for quite a while. It is derived from Kids Programming Language (KPL) and targets teaching programming to high school aged kids. The language comes with an IDE with a compiler and debugger - and makes it fairly simple to do 2D and 3D graphics games. My son loved this language and has been writing software in it for about 8 months. However, he has recently been finding the Phrogram development libraries to be rather limiting and was getting frustrated with it - particularly in lack of GUI libraries.
So more research on languages. He recently switched to working with Process, which is a simple Java-based language and associated development environment with more extensive library support. However, it lacks an integrated debugger. I believe that stepping from Process to Java is probably a pretty small step, but we have not gotten there yet.
My son has not gone back to learning C/C++ yet, but I think he will get there eventually. He is only 10 - and he will have plenty of time to get there at his own pace.
I had looked at Python and Lisp for him - but I wanted something that was a little more kid friendly. My son loves to show off his projects - and they have all been visually oriented with 2D or 3D interfaces. So picking a language with strong support for graphics is important for him.
Most of his learning has been unsupervised. He spends a lot of time looking at code examples, borrowing ideas from these examples and building from there, I do spend time helping him figure out code bugs, etc. - but he has been self motivated in terms of what sorts of applications he develops.
As you look at different language options, you need to consider a number of things - why do they want to learn to program? Are the language and development libraries well documented and organized in a way that a kid can use? Are there a lot of examples to work with? Do things work reliably and predictably? (For example, a buggy environment such as the C-based environment for Lego Mindstorm was a big negative.) Is it easy to get some kind of visual reward or feedback (e.g., easy to compile and test a program and see it working)?
And - remember - positive feedback and encouragement coupled with lots of patience are probably the most important part of his educational process.
"The pathology is to want control, not that you ever get it, because of course you never do." -- Gregory Bateson