Scratch from MIT is designed to help with this: http://scratch.mit.edu/
For more formal programming Processing is a great learning enviroment: http://processing.org/
In both I would say the best method is to find challenges your son wants to undertake for himself. Learning to explore, play and fail is the way forward.