There are a few books that I bring to most of my software development projects. These are books that I mostly use as reference throughout the project, but many of them can also be read from cover to cover. They provide a level of comfort, much like friends that you can ask for advice. And just like friends may grow apart, books age or for other reasons reach a point where they don’t provide much value any longer, when this happens they are replaced by other books. To stretch the analogy just a bit too far, good books are also hard to come by, and aren’t easily replaced. OK, enough of this, here’s the current list:
Domain-Driven Design: Tackling Complexity in the Heart of Software
This is an excellent book on domain driven design and on OO design in general. Now when the promise of transparent object relational persistence seems to finally start to deliver we’re able to design object oriented systems as they were meant to be designed: Object-Oriented. This book contains tons of ideas, tricks and patterns on how to create a powerful domain model to use when solving domain related problems and creating software for the domain. What else can I say: It’s great, go buy now!
Patterns of Enterprise Application Architecture
This book is divided into two parts; first a tutorial part on enterprise application architecture and then a catalog of patterns. Here you’ll find patterns such as Value Object, Service Layer, Domain Model and, the not all uncontroversial, Data Transfer Object. Examples are provided in Java and C# with diagrams in UML, and since it is not as technology centric as, say, J2EE Core Patterns, my guess is that it will age a little more gracefully.
Brief descriptions of all the patterns are available at http://www.martinfowler.com/eaaCatalog/
Fowler is currently working on Further Enterprise Application Architecture Patterns, they are published at http://martinfowler.com/eaaDev/
Design Patterns: Elements of Reusable Object-Oriented Software
Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides
Yes, this is one of the classics that have been around for quite awhile and doesn’t need much of an introduction. Although one could wish for an updated edition with UML diagrams, and although Java and C# developers may find it easy to get lost in the Smalltalk example code it’s nevertheless a great book. The fact that this book still feels relevant after ten years is pretty cool in itself.
Effective Java Programming Language Guide
Before leaving Sun for Google Joshua Bloch made many important contributions to the Java language, including the Collections Framework. This book is crammed with great advice and design rules on OO programming in general and Java programming in particular. The discussion on why adding an aspect by extending an instantiable class will fail to preserve the equals contract (Item 3, Obey the General Contract When Overriding Equals) makes it worth its price alone. The book also works as an inspiration when designing you own APIs.
Now we’re only wishing for an update that will cover Java 1.5 (or Java 5 or Java2 version 5.0 or whatever it is called today).
This is a thin UML reference with descriptions of the symbols, the different diagrams and their usage. It has pretty much all the info you need about UML and with one diagram type per chapter it’s an easy read whenever you need to brush up your UML skills.
Software Configuration Management Patterns: Effective Teamwork, Practical Integration
Steve Berczuk with Brad Appleton
This is a patterns book on software configuration management. It’s a good read if you need to set up or adjust your configuration management process. Examples are provided for implementing the patterns with popular VCS tools, including Subversion, CVS, Perforce (and, if you must, Visual SourceSafe). Some patterns are also available online, such as Streamed Lines: Branching Patterns for Parallel Software Development.
SCM Patterns – Steve Berczuk, ISBN: 0201741172
UML Distilled – Martin Fowler, ISBN: 0321193687
Effective Java Programming – Joshua Bloch, ISBN: 0201310058
Design Patterns - Erich Gamma et al, ISBN: 0201633612
Patterns of Enterprise Application Architecture – Martin Fowler, ISBN: 0321127420
Domain Driven Design – Eric Evans, ISBN: 0321125215
Books with specific technology focus
If you are looking for books on a specific technology, I’d go this way:
EJB: Enterprise JavaBeans, Monson-Haefel et al, 059600530X
Servlets/JSP: Java Servlet Programming, Hunter et al, 0596000405
J2EE Architecture: Core J2EE Patterns: Best Practices and Design Strategies, Alur et al, 0131422464
Hibernate: Hibernate in Action, Bauer et al, 193239415X
When you feel like reading something that is not related to work, why not check out one of my favorite fiction writers Ben Elton. Blast From the Past and High Society are good starting points.