Sections
Domain Driven Design
Domain-Driven Design. Tackling complexity in the Hearth of Software. Eric Evans
The founding and reference book of DDD, often called the “Blue Book”. This book is not necessarily the most digestible, but its content is very deep and the examples very well chosen. The chapter on the Bounded Context (Part 4, Chap 14) is really worth reading because it is the most innovative aspect of DDD.
Domain Driven Design Quickly. Infoq
Domain Driven Design Using Naked Objects. Dan Haywood
I have been observing the evolution of this framework and approach since its creation more than 20 years ago. I’ve always been fascinated and attracted by this concept which poses a very strong constraint (the UI is completely deduced from the domain model) and which therefore “forces” to end up with a domain directly understandable by the end users (here is the slides of an experience feedback talk about Naked Object).
Implementing Domain-Driven Design. Vaughn Vernon
A book that deals with very concrete aspects of DDD, a good complement to the “Blue Book”.
Patterns, Principles, and Practices of Domain-Driven Design
Analysis Patterns. Martin Fowler
A rather old but still relevant book that shows concrete examples of increasingly sophisticated solutions to recurring problems in various fields (observations and measurements, inventories and accounting, etc.)
Introducing Event Storming
EventStorming is an essential technique for exploring a domain at the start of a project with experts in that domain.
Living Documentation. Cyrille Martraire
An excellent book on the documentation aspects of a software, related to DDD of course.
Data and Reality. William Kent
Data and Reality book is about the fundamental principles of data modeling and how data and reality are related. The content is timeless and technology independent. The concepts of naming and identification alone are a must-have for anyone that needs to models data.
Organization and Management
Team Topologies, Matthew Skelton, Manuel Pais
Behavior-Driven Development
BDD in Action, John Ferguson Smart
BDD is the complementary approach to DDD, in the sense that a design, i.e. a solution, is only good if it is adapted to the use that will be made of it. And there is nothing better than BDD to define this usage!
Specification By Example. Gojko Adzic
A book that redefined this old notion of specification, the BDD is a major part of it.
Architectures
Release It! 2nd Edition. Michael Nygard. The Pragmatic Programmers
A reference book on software architecture and its resilience with the famous stability patterns (as well as anti-patterns) described in this book, the production incident story telling by Michael Nygard is excellent.
Designing Data-Intensive Applications. Martin Kleppmann
A reference book on the technical mechanisms and issues of handling data at scale, in a distributed manner and from first principles.
Software Architecture: The Hard Parts, Neal Ford
Fundamentals of Software Architecture: An Engineering Approach, Neal Ford
Patterns of Enterprise Application Architecture. Martin Fowler. Addison Wesley
A rather old book, not necessarily up to date on some architectural styles (event sourcing, etc.) but the patterns in it describe a large number of frameworks that are found quite frequently (MVC, ORM, etc.)
Enterprise Integration Patterns. Gregor Hohpe, Bobby Woolf. Addison Wesley
Refactoring and Clean Code
Clean Code. Robert “Bob” Martin
Refactoring. Martin Fowler
Working Effectively with Legacy Code. Michael Feathers
Pragmatic Programmer. Andrew Hunt
Code Complete. Steven McConnel
Refactoring Databases. Scott Ambler
User Interactions
Design of Everyday Things. Donald Norman.
One of the few books that really made an impact on me by taking the blinders off about the objects I interact with on a daily basis. A “must-read”.
Don’t Make Me Think. Steve Krug
A more practical and concrete book than the previous one with a direct application to web page design. A good complement.
Functional paradigm
The functional paradigm seems far from object-oriented programming but in practice the state management approach of functional languages allows an implementation very close to DDD, see this Clojure language article on state management.
Functional Programming for the Java Developers. Dean Wampler. O’Reilly’
Functional Programming for the Object-Oriented Programmer. Brian Marick
Seven Languages In Seven Weeks. Bruce Tate. Pragmatic Programmers
The Joy Of Clojure. Michael Fogus, Chris Houser. Manning. 2nd Ed.
A “must-read” that made me discover Clojure a few years ago, the introduction and practical aspect of the language is less obvious than “Clojure Programming”, it brings however the “why” of each aspect of the language and the philosophy behind each element.