Most helpful positive review
219 of 220 people found the following review helpful
If only there were more programming books like this one...
on July 28, 2004
This book is the most lucid book on programming I have ever read. Having a little (self-taught) experience in C, this book was recommended to me as a good foundation before trying to learn Cocoa for programming on Max OS X. I fully expected to be confronted with the sort of doorstopper that I would never finish, as has been the case with several C++ books; instead, I found a straightforward, uncluttered guide, written by somebody with a genuine talent for teaching.
The author takes the approach of not trying to teach you C first, and this has two advantages: first, if you have no C experience, you get started immediately learning Objective-C, so you don't get taught one thing only to be told to forget it later; second, if you do have some C experience, you are thrown into object-oriented programming right from the start. The explanations are consistently concise but clear, and I found myself getting through a chapter or two every night after work and feeling that I was learning something significant on every page. I read someone describe it elsewhere as "Teach Yourself Objective-C in 21 Days," except that this book really could live up to such a title. I wholeheartedly agree - it took me only three weeks to work through the whole book, including nearly all of the exercises. If, like me, you have seen terms such as "polymorphism", "inheritance", "instance method" and "subclassing" bandied around only to stare at them in mute incomprehension, this book is a revelation. The author introduces all such major concepts very gently - in fact they seem to creep up on you, so that by the time you are presented with the proper terminology you either already know what it means or find yourself exclaiming - as I did - "Oh, so that's all polymorphism is!"
My only gripe - and it is very minor - is that the explanations of bitwise operators and bitfields are near incomprehensible to anybody who doesn't have a programming background (or rather, they are explained well, but there is no indication of when you would ever use them), and the author does occasionally (though rarely) seem to assume that the reader has a solid maths background (when there are those of us out there from humanities and arts backgrounds who want to learn to program, too). These topics take up little more than several paragraphs of the 500 or so pages, though, so if you're a novice, don't let them daunt you as they are the exception rather than the rule.
One thing I appreciated about this book was that full code is provided for 99% of the examples - you are never left with an example that won't compile because the author assumed you could guess the rest yourself. Moreover, whilst the examples and exercises do develop on code from previous chapters - in particular, you will develop a Calculator, Fraction, and Rectangle class in the first part of the book, and AddressCard and AddressBook classes in the second part - the author wisely avoids the build-one-big-program approach that some books adopt. This keeps things fresh and lively - you have to type in different examples, meaning you become familiar with the language through repetition, but at the same time you are doing different things in the examples themselves. Moreover the exercises at the end of each chapter are well judged - you are forced to think and look back through the book to recap on what you have learned, and they are difficult without being too difficult. (Don't skip them!)
In the second part of the book, the author moves on to the Foundation framework, which forms half of Cocoa (Cocoa also uses the AppKit for creating GUI's). You will learn how to use NSString, NSArray, NSDictionary (and their mutable counterparts) and a lot more. It builds on everything you've learned in Part One and provides a bridge between the basics of Objective-C and moving on to Cocoa. I expect that this part of the book especially will become dog-eared very quickly. To sum up, this book took me from knowing nothing about Ojbective-C to feeling as though I could write all the background code for the app I have in mind (ie. everything except the GUI). I am now just hoping that Hillegass's book on Cocoa is half as good.
A word of advice: I urge anybody who buys this book to print off the errata on the author's website (the address is given in the book), as there are a few minor errors that might stump you if you don't. Also, if you use Xcode instead of the command-line tools, you will need to delete the contents of the automatically-generated ..._Prefix.pch file as well as the #import line at the top of main.m each time you start a project (the book only specifies the latter). The prefix file caused me some headaches in one of the later chapters.
A lot of people on various forums say that this is the only book from which to learn Objective-C, and I can see why. In short, if you are reading this review you are probably thinking about learning Objective-C, either for its own sake or as groundwork for moving on to Cocoa. Which means that if you are reading this review, you should buy this book.