Head First Design Patterns: Building Extensible and Maintainable Object-Oriented Software (2nd Edition)
Building Extensible and Maintainable Object-Oriented Software
Eric Freeman and Elisabeth Robson
This book shows you the patterns that matter, when to use them and why, how to apply them to your own designs, and the object-oriented design principles on which they’re based. Join hundreds of thousands of developers who’ve improved their object-oriented design skills through Head First Design Patterns.
Regular readers to my blog and book reviews will know that I have previously reviewed a book on Software Design Patterns, Design Patterns: Elements of Reusable Object-Oriented Software which is as many developers would agree The Book on software design patterns and provides all the information you'll ever want to know about software design patterns, and I highly recommend it. However, I would also be the first to admit, it is also quite a difficult read, especially if you are new to software design patterns. It is written and approaches the subject from a very academic perspective, like so many software development text books written in the 90's do, primarily because that was the way things were back then.
Elements of Reusable Object-Oriented Software
23 patterns allow designers to create more flexible, elegant, and ultimately reusable designs without having to rediscover the design solutions themselves
Why did I read this book
Over the years I have often had people refer me to Head First Design Patterns: A Brain-Friendly Guide (1st Edition) often praising the book for how it made them understand and appreciate software design patterns in a way that the aforementioned book never did. However, for one reason or another I never bought the book.
It was while scrolling through books for Microservices, which is a subject I am diving deeper of late, I discovered that a Head First Design Patterns: Building Extensible and Maintainable Object-Oriented Software (2nd Edition) had recently been released after a hiatus of 25 years! I thought I might as well get it. I know that nothing fundamental will have changed with design patterns in particular but I am always keen to broaden my horizons and try different approaches to learning.
What I like about this book
This book does take an alternative approach, in some ways similar to the For Dummies series of books, which I actually have a lot of time for, I can't tell you how many times I have had to read a For Dummies book to gain an understanding of a subject before reading other books!
If you're used to fighting your way through thick academic text books, then you may want to take sometime as I did and actually read the Introduction to this book, because it does what it says on the tin and provides you an introduction on how to use and read the book providing an explanation as to why things are the way they are.
TheÂ book uses a metacognitive approach to learning, conveying the content using text, funny images, games. I have to be honest it is a very different reading and learning experience than I am previously used too.
Overall, I found it to be a rather positive experience. Which was able to transform a very dry subject of Software Design patterns into a somewhat entertaining experience.
I'm going to honest, and admit I haven't read this book cover to cover, and I really don't intend to either. It works great as reference book, and I dip in and out of it frequently. It been on my desktop for a good few weeks now and it has also inspired me to pick up my blog series on software design patterns in C# which came to screetching halt in 2019!
I'm sure I will be referencing this book as much as I referenced Design Patterns: Elements of Reusable Object-Oriented Software in the forthcoming series of new articles. I firmly believe the two books from equal companions to one another.
Why I recommend this book
Getting a grip on software design patterns and to understand the when, how and why to implement them. This book actually makes that learning process fun and engaging and doesn't bore you down with dry academic terms and jargon.
I would say the style of the book, may at first throw you off, but again this is only my opinion and others may vary, I do actually appreciate it.
This book does have a slight snag, if you're coming from a C# perspective, in that all the code samples etc are in Java, but I personally don't have an issue with that because I have read many books based on Java and have been easily to transfer the content to C#.
An example of a book that was heavily weighted to Java, which I really enjoyed was Philosophy Software Design which is another book I highly recommend.
A Philosophy of Software Design
addresses the topic of software design: how to decompose complex software systems into modules (such as classes and methods) that can be implemented relatively independently.