In which I learn new things

7/31/08

Unlike all other developers who have ever touched a mac, I’ve been trying to learn how to write software for the iPhone.

Because right now would be a very, very good time to be in that business. What would’ve been a better time would be back when the App store launched — that boat’s well and truly sailed, of course, but the quality of the apps in there right now still leaves me confident that I could carve out a reasonably profitable niche for myself if I don’t put it off too long.

What I’ve learned so far is, A) I’ve successfully taught myself a lot of new languages over the years, because that’s part of what being a software developer is, but B) they’ve nearly all been conceptually similar languages to something I already knew pretty well, and they all fit into a framework that I was intimately familar with, i.e. The IntarWeb, so the parts that are new to me are self-contained, and C) transitioning from mostly web-based scripting languages for which I have easy access to zillions of open examples to learn from, to a compiled C-based language with a complicated set of APIs that I have to learn from scratch and which everyone’s still prevented from discussing due to the developer NDA is… hard.

I mean, I’m mostly getting it. I already had a reasonably good handle on object-oriented code, I know the difference between a variable and a pointer and why it matters, and I can usually sort out what the API docs are trying to tell me if I squint at them long enough… I’m not totally at sea, is what I’m saying.

But I’m constantly getting hung up for hours on what I know are trivial syntax issues which I just don’t have a quick way to resolve. That’s normal, if irritating.

Worse, I’m often second-guessing myself and backtracking, wondering if I’m doing things the Wrong Way, or if there’s some underlying concept that I’m just completely failing to grasp. Back when I was learning my first real coding language, I got past this stage mostly by being young and stupid enough to not care if I was doing it Wrong, as long as it worked (and by doing it in perl, which makes something of a fetish out of there being no wrong way to do anything anyway.) This time around, either because I’m older and wiser, or older and more timid, I’m having a harder time getting past that.

The biggest hurdle for me, honestly, is all the timesaving shortcuts the language offers. Instead of having to write a lot of repetitive getter and setter functions, you can just drag a few connections around in the Interface Builder, or use stuff like Core Data which magically deals with all the gruntwork of manipulating and structuring data in standard ways — so the only code you actually have to write is the bits and pieces that don’t work in standard ways. This is awesome, if you already know what you’re doing. But it’s an incredible pain in the ass if you’re trying to learn, because even if you have a functional example to look at, you can’t necessarily figure out how it works by looking at the code, because a lot of what makes it work isn’t code, it’s invisible magic.

So it’s slow going, you could say.

I’m sure I’ll get there eventually, but it’s been a long time since the distance between where I am and where I want to be has seemed so far.