As I rummage in Eric Evans’ Domain Driven Design again, I thougt I’d collect my favourite software engineering books to provide a list of what you as a software professional should have taken a glance at. Althought it seems to be a hitlist, actually there is no real ranking between the chosen.
This book focuses on software design and on distilling domain knowledge into it. Thus unlike the GoF book that covers rather technical patterns, DDD tends to be coming from a more business point of view. Eric introduces Entities, Value Objects, Aggregates, Services, Repository (DAO) and so on. I especially like this point of view as it focuses on functional requirements and derives patterns from them. Erics core aim is to tie software design to an ubiquitous language so that developers and business persons speak in the same terms, thus letting the software artifacts created reflect the business more incisively.
Definiately the first book I hand to beginners as it provides a basic pattern catalogue along with a mindset I really think is indispensable - building easy to understand abstractions, care about design, about code, about functional requirements.
## Martin Fowler - Refactoring
Recently I discovered a presentation of Martin Fowler on SOA where he accidentally gave the key rational to refactoring: accept change as intrinsic trait of software development and be prepared to adapt to it. Now refactoring is the key concept that enables you treating your code not to be carved in stone but rather allows you to adopt emerging changes.
Martin introduces a lot of core refactoring concepts and patterns. Most of the can be found in state-of-the-art IDEs like Eclipse or IntelliJ.
## Johannes Link - Softwaretests mit JUnit
Agile software development builds on various heuristics and methodologies like continuos integration and first of all unit testing or even Test Driven Development (TDD). Trying to become agile without adopting these techniques you will find your self in a mess very fastly. Softwaretests mit JUnit introduces core testing principles and methodologies. Although there are much more sophisticated testing frameworks like TestNG available today the book reads well because of the its very basic starting point. It was published in times when unit testing was not that of a prominent idea. Thus it really gives an introduction from the very first steps.
## Steve McConnell - Code Complete
That’s a really huge one. And all on coding? This has to be boring! Well, it isn’t. Code complete is on a much more technical level of abstraction that DDD but it takes a look on code from the same point of view: communication. Steve discusses everyday quests developers fight: method naming, method’s lengths.
This one’s a must-read for every developer IMHO. It was eye-opening to me and influence my attitude towards code totally. Actually the current version is named Code Complete 2, althought it’ just a second edition of the original one. I guess, it’s because of the amount of changes that were made throughout the update.
Martin Fowler - Patterns of Enterprise Application Architecture
This one is rather technical. Technical in a sense, that it adresses non-functional requirements much more than DDD thus being much more relevant for architecture decisions and development. So you will find patterns like Adaptor, Gateway, Unit of Work, Plugin etc.
In fact, this is not a beginner one but is rather an architects groundwork to build further knowledge and experience on.