I found this classic book on problem-solving by G. Polya to be worthy of every praise that has been heaped on it by generations of budding mathematicians and programmers. It requires a bit of perseverance and suspension of cynicism to fully benefit from this book. As with most self-help books (if I may use the term), the basic approach and the given heuristics are rather simple and "obvious", but the real benefit for the reader lies in appreciating their significance and in applying them consistently to solving problems. Very highly recommended.