“How to Solve It” is the classic book on problem-solving by G. Polya that shows how to approach and attack problems in a way that you are ultimately able to solve them as well as verify your solutions. Polya provides heuristics for mathematical problems but I think the approach applies quite well to problems in other domains as well.
The basic approach is described in a short chapter at the beginning of the book. The bulk of the book is taken up by a quaint “dictionary” which is a collection of articles each explaining a particular term or phrase that is referenced (in uppercase letters) elsewhere in the book, including within other articles of the dictionary. There are a few problems given towards the end of the book for you to try out your newly-acquired problem-solving skills, followed by hints for these problems and then the solutions for them.
In my personal opinion, the book could have been a bit shorter and less repetitive and the dictionary could have been dispensed with entirely, with the articles of the dictionary absorbed into the main material of the book. As it stands, it requires a bit of perseverance from people like me (with short attention spans) for them to be able to finish it. Despite this, I still found the book to be immensely useful and I would gladly recommend it to anyone wishing to improve their problem-solving skills and especially young programmers. There is a reason why this book is mandatory reading in a few software companies out there.