After the Gold Rush
McConnell posits Engineering as the ideal model for that professional maturation process, and he makes many solid arguments in its favor. Most of these points are based on the central idea of reusability. This is not just recycling the data access library you wrote for your last project...
Patterns of Enterprise Application Architecture
Patterns of Enterprise Application Architecture does exactly what it sets out to do: provide the reader with a catalog of proven enterprise level patterns and the knowledge to use them. Fowler describes an architectural pattern as...
Software Craftsmanship: The New Imperative
Software engineering is a term often used to encompass the entire range of software development, from creating high-level architectural designs to low-level coding. In Software Craftsmanship: The New Imperitive, Pete McBreen proposes a more strict definition...
The Pragmatic Programmer: From Journeyman to Master
Hunt and Thomas's The Pragmatic Programmer is the logical companion to another great book about software construction, Steve McConnell's Code Complete. Indeed, these two books make great companion volumes. Were they from the same publisher, they could be sold as a set.
The Design of Everyday Things
While this is not specifically a computer-oriented book, it is nonetheless a must-read for anyone who designs and develops computer software. I have learned more about design, especially user interface design, from this book than any other book that I've read...
Understanding the Professional Programmer
This is probably my favorite book on the subject of software development. It is definitely my favorite of Weinberg's many excellent books. I return to this book again and again, and find something new every time.
Refactoring: Improving the Design of Existing Code
This book is essential reading for anyone involved in the construction of software using object oriented languages. Fowler and his fellow contributors do an incredible job of simultaneously introducing and formalizing a code improvement technique called "refactoring."