Most Helpful Customer Reviews
|
|
71 of 73 people found the following review helpful:
3.0 out of 5 stars
Decent Introduction to OOA&D, March 6, 2007
I like the Head First series, and even Head Rush, for its innovative and fun approach for introductory software topics. I've had small concerns on all of them but I have never been as ambivalent as I have for this book. I know a big part of this problem was that it was rewritten expeditious (I am still not sure of the reason why) and it shows throughout the book with spelling, logic and code errors.
You can tell that the first chapter was rushed. There are several spelling and programming mistakes. The most egregious is where they ask you to look through some code to find what "FIRST" you change and then they answer that question with a much smaller problem (the main problem was they forgot to add a return statement (pg.5) and they write about the inconsistency of using String based searching). It has also been mentioned by several reviewers of the use of the method name "matches" which only makes sense for regex not for an equals operation. I also did not like the search example (how can you not think of price in a search?). The best part of this chapter is the mantra that should be practiced by many engineers: "Make sure your software does what the customer wants it to do."
The next few chapters are definitely better (though still some spelling mistakes). They are a good read for beginners and intermediate programmers on gathering requirements, change of these requirements and analysis. The ideas are a bit simplistic though it is good to get many programmers used to the idea of UML and use cases and using them to drive requirement gathering and textual analysis. Intermediate and advanced readers familiar with use cases will gain more from reading Alistair Cockburn's "Writing Effective Use Cases" (or will already have read it) and for further UML reading should go with "UML Distilled" by Martin Fowler.
When the book gets back to design I see some problems with the coding. The designer has this bizarre idea of abstracting all properties (under the guise of "encapsulate what varies") into a Map attribute to lessen the amount of subclasses for instruments. While initially this may seem a good idea it gets rid of all type-safe coding (you can now safely assign an instrument type to a backwood for the instrument), you cannot have behavior from the instruments (this is mentioned in the book) and if you put a property with one letter misspelled or capitalized out-of-place you now have a bug, one that you might have trouble finding thereby increasing maintenance costs. Too much flexibility makes the code ambiguous.
After design, the studies get to solving really big problems, architecture, design principles, and iterating and testing. These chapters I enjoyed much more especially the chapter on design principles with the beginning mantra that "Originality is Overrated." This chapter goes over basic principles such as OCP (open-closed principle), DRY (don't repeat yourself), SRP (single responsibility principle) and LSP (Liskov Substitution Principle).
Then the book last chapter (the ooa&d lifecycle) sums the lessons in the book in one large (somewhat contrived but these type of examples always are) program for the Objectville Subway. Then two terse appendixes dealing with ten additional OOA&D topics and OO concepts should make the reader realize that this book is just an introductory sliver of what needs to be learned for a sagacious software acumen.
This book is useful for programmers with a bit of Java (or C#) knowledge who want to get a good overview of OOA&D. This book is useful because it teaches important OO vernacular and a simple holistic approach to iterative development. If the book did not have a "quickly done" feeling, better design and fewer mistakes I would have liked this book more. This book is a good candidate for a second edition. If you want a more thorough explanation of these topics I recommend "The Object Primer" by Scott Ambler as one of my favorite books for a good introduction to OOA&D.
Help other customers find the most helpful reviews
Was this review helpful to you?
|
|
|
|
|
|
43 of 46 people found the following review helpful:
5.0 out of 5 stars
The most creative presentation of software design principles! (And especially for Beginners), December 11, 2006
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.
Help other customers find the most helpful reviews
Was this review helpful to you?
|
|
|
|
|
|
18 of 19 people found the following review helpful:
5.0 out of 5 stars
Another great Head First title, December 12, 2006
First off, I'm already a fan of the Head First series - especially the Head First Design Patterns book. This book follows the same entertaining style and keeps your attention page after page. To me, there are two kinds of Head First books, ones relating to technologies like Java, Servlets & JSPs, EJB, etc and ones that cover a more traditionally academic topics like Design Patterns and this book, OO Analysis and Design. Personally, I like the Head First treatment on the academic topics better than the others. So, if you weren't a fan of Head First Java (for example) you might want to give this book (or the Design Patterns one) a try.
Specifically for this book - I really liked the chapter layout and the progression as each chapter builds upon the next. The chapters explain the basics of OO principles, ease you into Use Cases and how to write good ones, and continues building upon OO Design principles. When the Head First Design Patterns book came out, we purchased a bunch for the office and held a few "lunch and learn" classes on design patterns for the team at work. I can easily see doing the same thing with this book, as the Head First books make it easy to use as instructional manuals as well.
If you have found other books (lectures, articles, etc) on OO Analysis and Design a bit intimidating or conceptually difficult to grasp, this is the book for you.
Help other customers find the most helpful reviews
Was this review helpful to you?
|
|
|
|
|
|
Most Recent Customer Reviews
|