These are excellent suggestions, as he obviously needs to gain a deeper understanding in general CS issues.
SICP - Structure and Interpretation of Computer Program is a terrific book, and you can find the free online version of the second edition here !
It is written to be very interesting and to cover a lot of areas of CS. Its exercises are great, a pleasure to prepare. The book teaches in Scheme, but it is an easy language to grasp. Besides, a couple of days ago there was a discussion to try and rewrite all examples & exercises of SICP in Perl (using its functional programming constructs - anonymous subs, eval, map and such) - maybe you want to be the one to do it - I'm sure you'll get support for this in the Perlmonks community. It will be a rewarding & teaching experience, and you will surely become a better programmer.
I'm speaking from personal experience - I'm sure I became a much better programmer after working through SICP in a course (we did everything in Scheme - but it doesn't _really_ matter).