I’m working on a new Mac app. At this stage in the game, I’m too embarrassed to tell you much about it. But in my long, agonizing quest to become a Cocoa Master, this is another stage in the journey, one I hope brings me measurably closer to my goal.
This past weekend, I had the opportunity to give that app my full attention. I took the lovely @erinlthomas for a writing retreat in the middle of winter-locked Prince Edward County, where we had nothing to do but focus on our projects. While she made brilliant progress, I found myself stuck, banging my head against Core Animation. Having read the documentation and poring over code samples, I couldn’t figure out what I was doing wrong. And despite my relentless pushing against the documentation and Build & Run, I wasn’t getting anywhere. It was deeply frustrating, and forced me to question myself (again).
Fortunately, last night was also one of our quarterly Tacow (Toronto Area Cocoa and WebObjects) group meetings. There, I received many encouraging words from my fellow Cocoa-heads. David Leber reminded me again of a great quote from Aaron Hillegass:
"Yes, this is hard. No, you are not stupid."
So it’s time to take a deep breath, revisit my assumptions, and rush once more unto the breach. This project is back on.
It was with thoughts of last night, that I reacted to this tweet tonight:
Of course I nodded my head at that one right away, but I also immediately grasped why that is. Unlike so many other development environments, Cocoa is adopted by people who share a very common purpose. It’s not to become rich. It’s not because our employer made us. It’s not because it’ll get us laid (unless, I suppose, you’re Wil Shipley). It’s because we fell in love with the platform that we’re developing for. We fell in love with the Mac and with the iPhone, and now we want to contribute to that platform.
And it turns out that it’s really hard to do. You can’t take a night course to learn Cocoa, and no university’s computer science department (with rare exceptions) is going to spend much time on Objective-C. There’s nothing (yet) mainstream about Cocoa, compared to the enterprise dominance of, say, Java and Windows. And to my unending dismay, there’s only a couple places you can really get training (Big Nerd Ranch and Pragmatic Studio are the ones I’ve found).
Ultimately, the only way to learn this stuff is to teach yourself. And it’s really, really hard. For many people, even experienced developers have a devil of a time figuring out how to work this thing. There are paradigms at work that are unique to Apple’s development environment — good things, to be sure, but damned different. Learning Objective-C, while not a total cake-walk, was the easy part. Learning about design patterns, delegates, KVC, memory management, Core Data… the entire Cocoa framework. Not easy. Take it from someone who has been trying to learn for years.
But for those who have learned, there’s a common bond. These are the people who have demonstrated a remarkable mental acuity: an ability to stay motivated, and to stay on task. To ship. They’ve learned something because they wanted to, dammit. They felt it was the right thing to learn. They value elegance in both code and in interface design. They understand the beauty of computing, and they want to bring a small piece of it to life on their own computer.
So what Steve Streza is expressing, is this community of autodidactic, aesthetically-minded, highly driven people, who have something quite rare in common: this platform, this mountain that we’ve all been climbing. And without doubt, we help each other up that mountain, and that breeds a community that actually works, and that engenders mutual respect.
So that’s why. And now, in poor imitation of the best of those people, I will attempt to join them on that mountain, one misguided line of code at a time.