Here's a book recommendation from Charles Simonyi :
"SIMONYI: There are a lot of formulas for making a good candidate into a good programmer. We hire talented people. I don't know how they got their talent and I don't care. But they are talented. From then on, there is a hell of a lot the environment can do.
Programmers get a couple of books on their first day here. One of them, called How to Solve It, is by George Polya, the mathematician. [Simonyi takes the book from a bookcase next to his desk and opens it to a certain page.] These two pages are important. The rest of the book just elaborates on these two pages. This is like a checklist for problem solving. This is the preflight, the takeoff, and the landing checklist. It doesn't mean this will tell you how to fly, but it does mean if you don't do this, then you can crash even if you already know how to fly.
We follow these four steps of problem solving: first, understanding the problem, then devising a plan, carrying out the plan, and, finally, looking back. We have about four books like this and I think we make the programmers better than when they arrive
"
Source : http://programmersatwork.wordpress.com/programmers-at-work-charles-simonyi/