Probably the best advice I can give, that has not already been given

, is to have a goal in mind when you start to program. Something of your own devising that is realistic in scope, but concrete so that your son can say "I have done this" when he finishes the small project. Not only will he have learned some of the basics of programming, he will also have achieved a goal of his own which is very important.
I say this because I felt that learning from books was all well and good, but the toy problems they set are not really that interesting to most people and it can be easy to lose interest in the early stages of learning.
So, I suppose, first identify a task you want to do, like write a game, and then break it down into a number of smaller sub tasks, and so on until you have a number of small, simple, concrete problems to start with which can be used as the learning problems if the breakdown is done suitably.
E.g.
* read & write data from a file in order to load/save game state.
* capture input from different devices and use some of the captured data in some way. Such as a word recogniser that uses a list of words read in from a file that repeats words it recognises to the console and asks the user if it should write words it does not recognise back to the file.
and so on.
I can recommend Eclipse for C++ programmers as an IDE, which I runs best on linux as it already has a compiler. The only problem you will find if a slow machine will take a while to compile large programs, but I doubt your son will be doing those for a little while