|Jack Herrington's Code Generation in Action is a book I love to recommend for two reasons. |
First, the very premise that we should make the most of the tools at our disposal to continuously strive to improve the efficiency and maintainability of software systems appeals to deep-set values, probably ingrained during my education as an Industrial Engineer with a focus on productive systems.
Second, the book's approach lays plain the author's thorough investigation of the subject such that we learn methods and patterns that transcend any particular technology while keeping the examples very much grounded in specific, real applications. Not many technology books manage to so carefully balance the academic/generic with the practical/cookbook. Although the examples will eventually become dated (such as generating EJB data access layers), the book will remain relevant for many years to come as a guide to a "way of thinking" rather than for the specific examples.
It is interesting to note that the book's use of ruby as the exemplary language nudges towards the convention over configuration ethos of rails. Database migrations in rails may not owe any direct lineage to the work of Harrington, but it is easy to see how they could have.
If you like reflecting on how you work with software in order to improve over time - in a sense to think about thinking - then this book will surely capture your imagination and perhaps lead you to a better place.
Postscript: I've blogged about the applicability of the concepts in the book to Oracle JDeveloper here.