MacEdition Logo
 

Life at the Big Nerd Ranch

Introducing a new author — Mark Dalrymple (markd@borkware.com), April 24, 2002

Feedback Farm

Have something to say about this article? Let us know below and your post might be the Post of the Month! Please read our Official Rules and Sponsor List.

Forums

Want to dig even deeper? Post to the new MacEdition Forums!

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.

The Environment

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

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 implement the 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 NSView, copy, paste, and drag-and-drop) just worked with Japanese characters.

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.

Goodies

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 NO.)

The Food

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 NSObject’s “valueForKey” and “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.

Mop-up

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.

E-mail this story to a friend

Talkback on this story!