I'd previously tried my 12-year old son (another James!) with Logo, but he got bored with drawing boxes fairly quickly, and the Lisp-like syntax proved to be pretty impenetrable when it came to doing anything more complicated - all in all Logo wasn't a great success.
Over the weekend I'd had another try, teaching him the rudiments of OO programming using Java and NetBeans as a quick way of compiling and running some simple examples, but to be honest NetBeans was really a bit of overkill. Coincidentally James Gosling posted a recommendation yesterday on his blog for a learning environment for Java. The package is called BlueJ, and it's basically an IDE for Java where the explicit goals are to make it easy to create and explore the behaviour of an OO program - for example it allows you to instantiate and exercise the methods of your class without having to have a completed program.
James G also recommended an associated book - Objects First with Java - A Practical Introduction using BlueJ. The first two chapters are available online, so before I splashed out and ordered the book I installed a copy of BlueJ, printed off the sample chapters and let James B loose on them. I'm extremely impressed with BlueJ - the developers have obviously spent a lot of time considering not just what features to include, but also what features to leave out, and the result is a system that allows people to get to grips with OO concepts without getting swamped by the details of editing and compiling the code. What I've seen so far of the book is excellent, for example rather than getting bogged down in the details of syntax and control structures it starts by explaining (and illustrating) the OO fundamentals - classes, objects and their attributes and behaviours. I was impressed enough to order a copy :-)
As I was digging around I found this thread in response to an article on BlueJ on java.net, and I really was astonished by the whining on it, which could be summarised as falling into one of two categories - the first one being "IDEs are bad, everyone should use the command line". That strikes me as a pretty dumb complaint, somewhat equivalent to insisting that everyone has to understand how an ECU works before they can have driving lessons. The second complaint is along the lines of "BlueJ isn't suitable for building enterprise applications", i.e. "How come I can't shift this using this?". Well, Duh!. BlueJ does in fact have the ability to export code to other IDEs, so what exactly is the issue here?....
In my experience, people with an engineering bent first get interested in stuff by playing with something they think is neat, then they get really hooked by taking it apart and learning how it works, and on that basis I think the BlueJ environment and the associated book are an excellent starting point - certainly my James thinks so!