In this post I’ll review a few highlights of the book as well as offer a few suggestions (from my perspective) for improvement should another edition be forthcoming. Let’s begin with the highlights.
Early on in the book, I like how Aaron points out how an inexperienced Cocoa programmer might go about solving a problem versus how the “old hand” goes about accomplishing the same objective. I think most everyone new to a tool, language or framework leans toward whats familar or comfortable when learning. However, Aaron saves you from yourself by pointing out that what might seem like the right approach may not necessarily be the case when working with Objective-C and/or Cocoa.
Aaron often ends chapters with a “For the More Curious” section, which takes a deeper look and/or offers tips and tricks relevant to topics covered in the chapter. Along the same lines, some chapters include a “Challenge” which suggests how one might go about extending examples or otherwise writing code to build on concepts within the chapter.
Aaron has a knack for describing concepts in an easy to understand manner. For example, working with memory management using retain/release is often a common trouble spot for developers new to Cocoa/Objective-C. When explaining retain counts, Aaron states “an objects retain count should represent how many other objects have reference to it.” A simple explanation that makes it clear the relevance of a retain count and how that relates to an object’s lifetime. It’s not that the retain/release cycle is difficult to understand, it’s more about wrapping your brain around a visual that works and one that you can remember.
As mentioned above, there are challenges presented at the end of various chapters to provide suggestions for building upon code examples. What I would find interesting and a good learning tool would be for the author provide a solution to each challenge. Given there are typically many ways to approach solving a problem, having the opportunity to see how someone else approached the same problem would be very enlightening.
The back covers makes reference to the developer tools covered in the book: Xcode, Interface Builder and Instruments. Although the first two are used consistently throughout the book, Instruments is given just 2 1/2 pages, one which consists of two figures showing Instruments running. I would of expected more coverage of Instruments given it’s prominent placement and acknowledgment on the back cover.
On the nitpicking side, it would be nice to see updated object hierarchy diagrams. Given this is the third edition, and is often seen as the Cocoa book to have, updating the diagrams with a little more visual appeal would be a nice addition. On a similar note, I was impressed with the use of color in the book Xcode 3 Unleashed. Given Addison-Wesley is the publisher of both books, hopefully the addition of color figures and code examples will be on the docket for the next edition.
Finally, for those who are reading Cocoa as a foundation for building iPhone applications, it would be really nice if the book called out which content is specific only to Mac desktop applications. I realize this is an unlikely addition as the focus of the book is all things Cocoa, however, from a selfish perspective, I would find this extremely helpful.
Although this book is not specific to iPhone development, there is a fair amount of information that is applicable, whether you are writing desktop or iPhone applications. Teaching and writing must come naturally for Aaron, as it sure comes across that way. The content flows naturally, is well thought out and explained in a concise and easy to understand manner. This is an excellent reference for developers looking to learn the ropes of Cocoa programming.