Domain-Driven Design
by Eric Evans
This book is on my must-read list. It teaches how to design software so that it becomes easier to maintain the older it gets, a feat most will tell you is impossible. Towards the end of the book, Evans uses the following analogy:
A new leather jacket is stiff and uncomfortable, but after the first day of wear the elbows have flexed a few times and are becoming easier to bend. After a few more wearings, the shoulders have loosened up, and the jacket is easier to put on. After months of wear, the leather becomes supple and is comfortable and easy to move in.
I learned many patterns, techniques and tools used to keep designs easy to change, understand, and manage. Half the book is taken up by extensive examples of applying and using the patterns he recommends. The most important points are printed in bold type, making reviewing the material easier.
I have read no finer book on software design.
