There are many books on "how to program", but they tend to err on the theoretical side. This wonderful book bridges the gap, by showing how some of those theoretical ideas can be made to work in reality. It is chock full of pragmatic techniques to help make you a better programmer, to make your programs more robust, more flexible, more usable, more what the user wanted, to make your process for producing those programs more effective and productive. Importantly, it also covers meta-techniques to help you continue to improve even further.
It covers the whole process: coding, testing, debugging, configuration management, documentation, tools, automation, architecture, design, requirements gathering. Obviously, not all of these can be covered in depth in a single book. So a short section describes each basic concept, then gives good references off to other books or web-sites that cover the topic in more depth. For example, the salient points of refactoring are covered in a few well-written pages, followed up with a pointer to Martin Fowler's in-depth treatment.
The whole book is very well written, with a lightness of touch that makes it a pleasure to read, yet covering some deep, thought-provoking material. It is clear the authors care deeply about their craft, and there is something in here for every programmer. Recommended.