Am I really the first to write a review on this new installment? Well, let me start with a huge five stars for this new addition to the Head First series!
I had been waiting for this book to hit the shelves a while, since I absolutely loved the innovative approach of the Head First Design patterns book. This one was no different in the way it clearly and creatively presented key principles to good object-oriented design and educated the reader on how to approach designing software for the real world from requirements gathering all the way to anticipating and designing for change.
A few things about this book - in my opinion, there is probably no better way to present the world of software design to a beginner. Instead of talking about abstract concepts, the writers present the material using concrete scenarios, and through-out the book, the reader is encouraged heavily to think through the pitfalls and problems and come up with solutions - there is no better way to learn. There are lots of exercises and even specific places to write ones ideas down.
Some topics covered are of course good object oriented principles like encapsulation and delegation, requirements gathering, use cases, anticipating changes, class diagrams, UML and more. The book only briefly touches (but does not go into too much detail) on state diagrams, sequence diagrams, unit testing and other concepts which are a huge part of software design, in the last chapter. While it does not go into these subjects deeply, it does not leave the reader completely without any knowledge on these topics either.
It does cover more than enough to enable a reader to become very well versed in architectural principles. Best of all, the information is presented in a way where it will stick forever. The whole point is not to cover everything there is to know, but for you to really GET IT, on what is truly crucial to know.
This book is not for seasoned architects or for those who do not appreciate comical diagrams and pictures on every page (Even though, anyone with a sense of humor would appreciate the fun way the information was presented). If however, someone is confused about object oriented design and has only heard the buzz worlds but doesn't know how it all comes together - this book will ensure that they are never confused again. Not only that, but after reading this book, they will be armed with tried and tested principles of experience of what kind of design works for long term solutions vs what is a nightmare.
Another thing to mention is that all the code examples in this book are in Java (as all Head First books are). This is certainly not a problem, even if you do not code in Java, because the principles are the same no matter the language, and C# .NET users in particular will not have any problems following the code examples.
The book does assume prior programming knowledge of an object oriented language in order to follow the code. This is not a book to learn how to write code in a programming language. It teaches how to design and architect your project, with the whole software life-cycle in mind.
There are a few useful appendixes in the back to quickly define and explain the basics of software design elements used in the book (like UML for instance).
Overall, it is a great book for anyone interested in software design principles! Best of all, you will get through this book QUICKLY, because with the creative and fun way that you will be learning, it will be hard to put down.