Life at the Big Nerd Ranch
Introducing a new author — Mark Dalrymple (firstname.lastname@example.org), April 24, 2002
Want to dig even deeper? Post to the new MacEdition Forums (beta)!
Towards the end of March I returned from Big Nerd Ranch, a week-long course taught by Aaron Hillegass and held in rural North Carolina. The idea is to provide a thorough introduction to Cocoa, one of Apple’s core technologies for Mac OS X programming.
Big Nerd Ranch is held at Freedom Escape Lodge, a big and fancy house in Asheville, NC. The lodge has a huge common area with a dozen or so hotel-style private rooms around the perimeter. This “Great Room” includes a cheery fireplace, a porch in back with rocking chairs, a feeding area for the people and an “Activity Area” upstairs where the actual class is held. During down time, students had access to the large pond out back (with ducks!), several hiking trails, and a path down to the fields where the cows and llamas live.
The seven students in my class were set up at tables with Power Mac G4 Cubes and Studio Displays while Aaron had his Powerbook hooked up to a projector. He usually had up lecture notes from the BNR slideshow software (source code included with the course) but occasionally he led us through various tools and demos.
One of the phenomenal things about the Freedom Escape Lodge environment is the silence. This place is quiet. There is no noise from big-city traffic, no background hum of civilization, just the occasional cow mooing or a llama making whatever noises it is that llamas make. Even during class time, when we worked on exercises or personal projects, it was very quiet.
One of the downsides of being somewhere rural is the lousy cell phone coverage, which made checking in with the spousal overunits back home a difficult task. It was amusing watching the geeks (ok, we’re all geeks) walking around with our cell phones. “Hey, I’ve got two bars now! No wait, back down to one. Damn! No signal at all now!”
The class itself ran Sunday evening through Friday morning. Sunday was a “get to know the other Big Nerds in Training” dinner out, as well as a movie (The Matrix, of course). Monday morning was the first official lecture; it pretty much covered Aaron’s book Cocoa Programming for Mac OS X cover to cover plus a couple of other topics. Yes, that means we covered the whole book in four days. In comparison it took me about a month of part-time study to work through the whole book. On the first day in fact, the introductory lecture started out with:
There’s a lot to learn. Today will be like drinking from an open fire hydrant. It will be messy and your face is going to get wet. You’ll probably feel lost and exhausted and you may even hate me by the end of the day. But the next day will be better and, by the end of the week, you’ll be building Cocoa apps effortlessly.
Aaron’s lectures covered one chapter at a time. First he showed us an overview of each Cocoa API, sometimes pausing for a more in-depth description. (For me in particular, the lecture on “nil targeted actions and the responder chain” finally turned on the light bulb.) After this introduction we read through the chapter at hand and worked on exercises and “Challenges” (additional exercises that don’t have all the details spelled out). The lectures themselves were well organized, easy to follow and easy to understand. Be aware that there is an expectation that you know C; this is not a “start from scratch” class.
As we worked through the chapter, Aaron floated around the class
answering questions and getting us out of the corners we painted
ourselves into (I have a bad habit of getting two document
controllers for each document, leading to some really strange
behavior). Sometimes a weird question or problem would elicit an “I
don’t know, but I’ll find out!” response. In particular, someone
noticed that our simple “Big Letter View” class (a custom view that
displays a single letter when typed) didn’t properly handle Japanese
input methods. It turns out to support this fully you need to
NSTextInput protocol. So, while we worked
on an exercise, Aaron implemented the necessary methods (about a
dozen of them!) and then showed us what they were and how they
worked, including a demonstration of the Big Letter View working in
Japanese (requiring three or four keystrokes per character). One of
the cool things about Cocoa is that some of the character-based
functionality we had built earlier (taking the first character of a
string, displaying the string centered in an
copy, paste, and drag-and-drop) just worked with Japanese
We started each class around 8:30 in the morning after we had eaten our fill of breakfast, and then wrapped up for the day around 5:30 or 6:00. After class and during breaks was Personal Project time.
The registration materials recommended we bring a project to work on so we could ask Aaron design advice and implementation strategy for our own Real World issues. One student, an optometrist, brought some visual acuity test software to port (and ended up getting into some deep animation techniques). Another had some hurricane data he wanted to visualize and yet another was starting to port a large database system from 4th Dimension to Cocoa. I generally just played around with the material of the day, eventually writing a little image display program to help explore my 125,000-image clip art library. (Check out BorkSort for the program.)
For one particular session we were honored to have Aaron’s friend Jim DiPalma with us. Formerly of NeXT and Apple (and part of the Interface Builder team), Jim told us some fascinating details of how Interface Builder worked, some cool gdb tricks, as well as stories about what it was like at NeXT and Apple during the Great Merge. Not every class will have a Jim unit but for us it was a nice added perk.
One thing Aaron is very good at is the “gentle nudge in the right
direction”. In teaching there’s a fine line between just giving an
answer to a student (from which they might not learn) and not giving
them enough information so they end up thrashing and wasting a lot of
time. One of the little side-projects I was working on was a text
field that would grow as you typed into it (similar to the behavior
in some drawing programs). Typically, I’d work a little bit, get
stuck, Aaron would say “take a look at NSTextFooby”, and then ten
minutes after pawing through the documentation and header files I’d
find the magic call. I’m proud to say, though, that with this project
I managed to stump both Jim and Aaron for a while with a very weird
problem (text fields that wrapped would initially only draw the first
line, until you clicked into another text field – after that they’d
work fine). Eventually Jim discovered I had two
NSTextView calls reversed.
In addition to a stylish T-shirt and coffee mug, we received an
autographed copy of Aaron’s book along with a CD featuring solutions
to all of the exercises, all the lecture notes, tons of sample code
(including an Ogg Vorbis player and the slideshow program that was
used in the class) as well as some handouts of material that wasn’t
in the book. One of the best benefits, though, is post-class support:
being able to email Aaron directly with questions (and not feel
guilty about it) and a student mailing list. The nice thing about the
student mailing is that the members have been through the same
training that you’ve just finished. You don’t get FAQs like “how do I
keep an application from opening an untitled document on launch?”
that seem to pop up every other day on the general Cocoa mailing
lists. (By the way, the answer is implement
applicationShouldOpenUntitledFile in your application
delegate and return
The quickest way to a programmer’s heart is through the kitchen. The food there was absolutely fabulous, with three meals a day plus tea, cokes and cookies during class time. The Lodge has Brent, a professionally trained chef who not only prepares one treat after another but copes with the inevitable dietetic restrictions (two vegetarians, one lactose intolerant, and a melonophobe). Plus, the pizza we had on Friday rivaled any I’ve had before.
So, what if I’ve already read the book?
Since the Cocoa Programming for Mac OS X book is the foundation
for the class, does it make any sense to read the book beforehand? I
think so. I read the book cover to cover (and worked through all of
the exercises and challenges) and wrote a cheesy little app before
going. I know I did miss out on some of the nice little surprises,
the little epiphanies that accompany learning this technology such as
takeValue” methods that eliminate some of the tedious
coding you encounter in Java and C++. But it was nice seeing the
material a second time and hearing the accompanying lecture. Working
on more sophisticated side-projects and asking more interesting
questions is a bonus.
So, is it worth it?
At $3,500 a pop, is this class worth the money? Or should you just take the kids to Disneyworld and read the book? I paid for the class out of my own pocket (as did a number of my classmates), and I am glad I went. The course information and materials are very good. The environment is extremely conducive to absorbing a lot of information quickly. The lack of distractions let me hold a lot of information in my brain until it stuck. Also, I picked up a lot of trivia and generally useful information that’s not really published anywhere (or at least not published in a convenient form). Being able to ask design questions directly of an expert without wading through the noise of a mailing list is a major plus.
If you’re part of a corporate team interested in Cocoa, sending someone to this class would be a no-brainer. They’ll learn enough about Cocoa to make an intelligent decision about the technology, as well as having access to Aaron for direct questions afterwards.
One of the worst things about writing a review about a positive experience is coming across like a total suck-up fan-boy. I’ve racked my brain for things that could have been better about the week — and in fact Aaron asked us at the end of class what could be improved. Outside of some minor details (such as some additional challenges that aren’t in the book, and maybe a different pacing day-by-day), I couldn’t think of anything.
So in short, the Big Nerd Ranch is awesome. If you’re interested in the Cocoa technology, go take the class.