Friday, 23 March 2012

Best conceptual books for enterprise developers and architects.

They are the best of what I know in terms of stunningness / time spent reading ratio. Here I will tell you about just serious stuff books, not even obvious and kindergarden ones like GOF Patterns or Refactoring. Everybody have read them already anyways. If not, rush to read them, they are the ABC. This article is not for newbie, it is rather for high level developer, who want to to become a really elite one. Books that I will list are really fundamental. Every one of them was a turning point in my head. The problem of many developers is shallow knowledge. They tend to operate technologies, not an ideas or concepts that sit behind. Normally in one technology there can be many concepts. E.g. in Spring the central concept is dependency injection, spiced with cross cutting concerns (AOP), it is using external, xml based DSLS, convention over configuration, etc. Dissecting any technology into subconcepts like this is crucial. Operating with concepts is much more powerful, it can be used to easily replace technologies, e.g. to use Guice for DI or Pico Container. Learning new technologies are also much easier if to know underlying concept. Another example. Hibernate as technology is an ORM (concept) and can be replaced with Toplink, Data Nucleus, JDO (technologies), wrapped with JPA, and so on. Some concepts are big, container ones, composed of other, many smaller sub concepts. Listed books are not new and somewhat classic, but still number one, since old relational model is still ruling the enterprise.

1.  Fantastic
  Patterns of Enterprise Application Architecture. Martin Fowler.  Overall Marting is one of the best authors in IT now. Although not all the ideas are his own, but he has really a talent to aggregate what is hot now, understand and describe for reader so that it is interesting to read. Main thing here is deep understanding, which is surprisingly rear talent for most book writers. He also writes from concept perspective, not technology. This book covers the very heart of enterprise: domain model, ORM, transactions and many other valuable things. You will quickly know why procedural approach aka "transaction script" is bad and objects aka "domain" are good.  Well, reading just this book will give you +100 points to enterprise wisdom easily. Most of Martin's books are worth reading. E.g. the latest  DSL book is great. Some of his signature series books and blog are worth checking too.

2. DDD aka the big blue book, aka Domain-Driven Design from Eric Evans.
Great Author, the main his book. His voice in Software Engineering Radio podcast is a bit drowsy, but to read his book was great experience for me. Domain - the holy grail of enterprise. It is very hard to build, but it is very valuable. You will know how to do it not just in theory, but practically, with source code examples. I guarantee, you will never be the same again after this book. Also there is a free concise version of book from InfoQ. Highly valuable patterns. They cover EJB, Spring, Hibernate areas conceptually. After the books 1 and 2 you will not only know how to use technologies, you will know why they are needed and the rest derives from it. Stay with me, do not faint yet.

3. Main TDD book. Guess who, Beck?, Buch?, Bloch?, Borat? No.
Of course gorgeous  Michael Feathers. The title is very misleading. I think to hide this knowledge from aliens if they come :)  It is
Working Effectively with Legacy Code. And the thing is, the code that you wrote, writing now, or will write today evening is already legacy. Why the best book about TDD? Because everybody knows all the dull obviousity, like tests are good, write test then code, tests should be independent, and so on. Nobody can tell how actually to write the toughest part, how to do it in real life, especially in existing system. And the toughest part is how to cut dependencies. So in this book Michael shows 1000 and 1 way of how to cut dependencies. He has very interesting vision of good design. It is good if it is testable, that is it. Very simple and pragmatic. So e.g. final class is bad. Surprised? Read the book. As a bonus, some great techniques like Scratch Refactoring and Naked CRC. After that I promise, You will be the super TDD guy. Very effective. Also as somebody wrote in the web,  "Before learning DDD and TDD my programming was nothing but blind hacking" Very very true I must admit. So reading 2 and 3 you will get a super power. I invented a special name for it: T5D (TDD + DDD) Why TDD is ever mentioned in this list? You won't build  reliable DDD without it. As simple as that. Also TDD is very useful on dull projects. You can entertain yourself by sticking unit tests here and there.

4. So 1,2 covers the enterprise, what is left? SOA? joking, joking. Don't hit me hard, but to me SOA smells bad. First, nobody can explain what it is, because the term became too ambigous. Uhm is more concret word. And also it is coarse grained interfaces and looks like old procedural approach, similar to remote EJB 2. To SOA I prefer the word integration. Really tough area. Do not overuse it, do just if forced to. It is an area of her majesty Event. So the book is:
Enterprise Integration Patterns. Gregor Hohpe and Bobby Woolf. Best concepts book on subject. Things like MOM, middleware, queue engines, JMS, MDBs in Java, etc. are all about this not simple topic. All conceptualized wisdom in one place. So good that many companies were trying to implement some product, and where beaten, after Apache Camel poped up. It just implemented all the patterns from the book, named them as in book and became number one product for many developers in the integration area.

Listed 4 books are great ones and are quite famous.
Another 2 guys I want to mention, are unfairly forgotten I think.
Ted Neward. He has written an excellent conceptual book, mainly about Java:
Effective Enterprise Java. Besides solid background of enterprise, he writes a books in a shortcuts collection style, putting so many great references to other books and resources. The style is very good and motivational. After first pages you will want to close his book and run get those ones that he mentions. I found many new interesting ideas for me, e.g. rule engines. He also has a nice blog, especially older posts. Unfortunately does not update it often last time.

Real World Java EE Patterns Rethinking Best Practices. Another great guy. Adam Bien. Not that famous, but writes good architecture books. Is actively writing nowadays. Recently issued a new book. Highly recommended.

So we have covered most of enterprise.
Great reading!

1 comment:

  1. Enterprise architects use various methods and tools to capture the structure and dynamics of an enterprise. In doing so, they produce taxonomies, diagrams, documents and models, together called artifacts. These artifacts describe the logical organization of business functions, business capabilities, business processes, people organization, information resources, business systems, software applications, computing capabilities, information exchange and communications infrastructure within the enterprise.EDI