For a different but useful approach, one book I liked is:<p>How to Solve it by Computer - by R. G. Dromey, a lecturer or professor at a university in Australia, IIRC:<p><a href="http://en.wikipedia.org/wiki/How_to_Solve_it_by_Computer" rel="nofollow">http://en.wikipedia.org/wiki/How_to_Solve_it_by_Computer</a><p>Acording to Wikipedia (and also mentioned in his book, IIRC), Dromey was inspired by the techniques of the book "How to Solve it" by George Polya, a famous mathematician, and applied some of his techniques to programming with data structures and algorithms.<p><a href="http://en.wikipedia.org/wiki/George_P%C3%B3lya" rel="nofollow">http://en.wikipedia.org/wiki/George_P%C3%B3lya</a><p>But he doesn't just translate the Polya book from the domain of mathematics to software; he builds up the solution to each problem posed in his book, in an incremental way, sort of as he discovers or invents them, sharing the reasoning behind the decisions as he goes along. I found this to be one of the good features of the book.<p>I had the good fortune to read Polya's book too, early on in college - I think it was rare even then. It had gems like "solve the more general problem" (if there is one), which will automatically solve the specific problem you are working on, as just another special case, and some times the solution to the more general problem may turn out to be simpler than the solution to the specific problem. But the book has much more than that, in terms of problem-solving advice.