Cocoa Bootcamp at the Big Nerd Ranch
I recently participated in the Big Nerd Ranch's Cocoa Bootcamp. Cocoa, as you may well know, is the primary application programming environment for Mac OS X. Although I've been writing scientific tools in C for over fifteen years and have made limited graphical user interfaces for some of those tools, it's been difficult to keep pace with the advances in application development. The Cocoa Bootcamp was the ideal opportunity to bring myself up to speed on OS X programming. I'd like to tell you a little about my experiences at the Bootcamp. If you're pressed for time, here's the short version: if you want to develop applications for Mac OS X, you should head over to the Big Nerd Ranch and sign up for the course.
The Cocoa Bootcamp is taught by Aaron Hillegass, who not coincidentally, has written one of the finest books on learning Cocoa, called Cocoa Programming for Mac OS X. Aaron was formerly an instructor at NeXT and then at Apple, and later left to start his own programming-instruction company. The goal of his Big Nerd Ranch is to provide developers with a distraction-free, immersive environment for learning programming skills.
Our Bootcamp was a five-day long course in early April, 2008, and was held at the scenic Lodges at Historic Banning Mills, southwest of Atlanta, about midway between Newnan and Carrollton, Georgia. The course consists of short lectures by Aaron, followed by reading and working the tutorials in his book. If we finished a project early, there was often a challenge problem that required more thought and independent work to solve. We worked from the galley proofs of the third edition of his book, which will be published by Addison-Wesley this May. Aaron's lectures were lucid. He has a natural sense of whether students understand the material and he is exceptionally patient with their questions. His enthusiasm is infectious; you really get the sense that he thoroughly enjoys programming. His lectures are more detailed the first morning while everyone is coming up to speed, but by the last morning, his lectures were appropriately minimal. In addition to working through the book, we also did a few exercises not in the book, including a tasty glimpse of how to develop for the iPhone. Roughly a quarter of the twenty-two students in our class were interested solely in the iPhone, and a knowledge of Cocoa is good preparation for learning that platform.
You may well be asking why you should take this course when you could just read the book. I asked myself that question, particularly when it came time to write the check for the course. There are three strong reasons for taking the course instead of going it alone.
First, the Big Nerd Ranch instructors are top-notch. Having worked through portions of the second edition of Cocoa Programming for Mac OS X, I can say there's something irreplaceable about hearing an authority describe the concepts in addition to reading about them. In addition to Aaron, we had a second instructor, Mark Fenoglio. Mark didn't lecture much, but was always circulating, answering questions (as was Aaron) while students worked on their exercises. Aaron and Mark were great at helping us understand the root of our mistakes. They patiently explained the causes of any erros and their explanations almost always suggested approaches for avoiding future mistakes. I learned much from them about how XCode works, including the debugger, the documentation, the performance tools, auto completion, and useful preferences settings. All of this has substantially improved my skill with XCode, a significant extra that I hadn't anticipated.
Second, the setting makes a huge difference. The Big Nerd Ranch emphasizes distraction-free environments and they know how to produce them. The course is held at a remote location, free from the noise of traffic and sprawl that siphons away our attention and fuels our aggravation. The environment at Banning Mills is serene. You can clear your head with just a step outside, or you can take a walk in the woods for those more recalcitrant problems. A group walk in the woods is actually part of the schedule. Every day at 2:00, the entire group goes for a short hike and this never failed to sweep those post-lunch, mid-afternoon dust bunnies from my mind. The overall schedule is predictable: breakfast at 8:30, lunch at 12:30, and dinner at 6:30, with instruction between meals. The food at Banning Mills is delicious and servings are generous. Snacks are always available, too. The days are packed and the pace is vigorous, but the days don't start too early or go too late. Some days reminded me of that Gary Larson cartoon, where a boy raises his hand in class and asks to be excused because his brain was full. Even so, it was obvious that Aaron has found that sweet spot of enough instruction to keep things challenging but not enough to overwhelm. At Banning Mills, some students stayed in the lodge and some had single-occupancy cabins, as I did. My cabin was comfortable and I enjoyed the solitude after a full day. The distraction-free environment at the Bootcamp was great and it's impossible overestimate how it improves the learning. I strongly recommend trying to live distraction-free while you're in the course. Ignore your e-mail, take a break from your daily web browsing, don't bring books to read, skip TV, and turn off your phone. Focusing on the subject makes all the difference. When I worked through Aaron's book on my own, I'd cover a chapter a night. We'd complete six to eight chapters a day during the course.
Third, my peers in the course were an unexpected bonus. Many times, they'd ask a question that I hadn't thought of that turned out to be critical for a richer understanding of the material. Many of the students are also exceptionally talented programmers. I had the good fortune to have chosen my seat next to one of them and I picked up innumerable tips from him and was often saved from my own mistakes by his careful eyes. I still hear his voice when some piece of code just isn't behaving: "This code isn't doing what you think it's doing", and I realize that I need to take a different approach. It was also great to hear about the projects other students are working on and to hear how they're solving problems that arise. After the course, students join an alumni mailing list where Cocoa problems are discussed. It hasn't been an overly chatty forum and I've already picked up useful tips.
The test of any course is whether it works, and Cocoa Bootcamp does. In the week I've been back, I've already made good progress in developing a new interface and new capabilities for my Analytic Rarefaction program and I hope to release it in a few weeks. I can also envision how to develop more ambitious programs that I've pondered for quite some time. Code examples on the web make more sense now, as do the code examples in Aaron's book. All of this makes it easier to modify those examples to suit my needs, and to see how other APIs can be applied to my problems. As Aaron presented the material, he was clearly focused on the long-term issue: how to turn students into independent learners. Not only did he discuss specific methods and classes, but he also showed how to get more information from the documentation and several useful websites.
Cocoa Bootcamp is a great course and if you're interested in developing for Mac OS X, you owe it to yourself to take it. The Big Nerd Ranch also offers courses on nearly a dozen other topics, so check out their offerings. You're sure to find one that will take your programming to a higher level.