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
Eric Evans
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!
http://www.domaindrivendesign.org/
Patterns of Enterprise Application Architecture
Martin Fowler
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.
http://www.awprofessional.com/title/0201633612
Effective Java Programming Language Guide
Joshua Bloch
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).
http://java.sun.com/docs/books/effective/
UML Distilled
Martin Fowler
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.
http://www.martinfowler.com/books.html#uml
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.
http://www.scmpatterns.com/book/
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
Fiction
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.
Happy reading!
/Patrik
Kurser i Domain-Driven Design - VĂ¥ren 2012
Monday, February 28, 2005
Wednesday, February 23, 2005
On Shipping Crap
You have to read this. You have to. http://www.butunclebob.com/ArticleS.UncleBob.TheNextBigThing
Now read it again.
What are you going to do about it?
Peace, out, till next time,
/Patrik
Now read it again.
What are you going to do about it?
Peace, out, till next time,
/Patrik
Thursday, February 17, 2005
Learn a Language
The Pragmatic Programmers tell us to learn one new language (computer language, that is) a year. So, if you feel that you are falling behind, let me suggest:
Brainfuck, http://www.muppetlabs.com/~breadbox/bf/
and
ETA, http://www.miketaylor.org.uk/tech/eta/doc/manual.html
If you feel that two new languages are not enough (or perhaps just need something more, let's say, useful), there is always Ruby:
Ruby Brainfuck Interpreter http://www.stephensykes.com/bf.html
Ruby ETA Interpreter http://www.stephensykes.com/ruby.html
Peace, out, till next time,
/Patrik
Brainfuck, http://www.muppetlabs.com/~breadbox/bf/
and
ETA, http://www.miketaylor.org.uk/tech/eta/doc/manual.html
If you feel that two new languages are not enough (or perhaps just need something more, let's say, useful), there is always Ruby:
Ruby Brainfuck Interpreter http://www.stephensykes.com/bf.html
Ruby ETA Interpreter http://www.stephensykes.com/ruby.html
Peace, out, till next time,
/Patrik
Subscribe to:
Posts (Atom)