Coder: The Audiobook
First off, let me state: I’m not a developer. Or a hacker, or even a programmer. At best, I’d throw myself in the category of “coder,” because I do write some code. Not as much as I’d like, but still.
I am, at the moment, a video editor. Both offline (takes the raw footage and makes something of it) and online (takes the offline edit and polishes it for broadcast). I also do a bit of motion graphics and the nebulous idea of “design” wends its way throughout these and any number of smaller static, interactive and motion projects that I take on in my copious spare time.
But I digress. This is merely to inform you that I’m coming at Mac and iPad development from a different direction than you may expect.
I’ve been trying to get an app — any app — up and running since… February 2006 is my first source code file, assuming we’re only counting recent history. (For the purpose of discussion, let’s forget my Atari 800 and Univax BASIC experience, and that one summer in high school I spent laying out a local guy’s “Intro to C” and “Intro to C++” lessons in PageMaker.) Admittedly, I still don’t really have that first app done. It’s gone through several iterations, from Ruby command-line tool to half-baked Cocoa-based Mac app that’s somewhat useful toward its original purpose of assisting online editors, but certainly has never been finished to the point that I’d be willing to share it with editors other than myself.
I can blame it on any number of things: Foremost, my own damn fault for not making time. Getting caught up with paying work and just not wanting to sit in front of the computer at the end of the day. Trying to learn a new skill, like Objective-C, or the bare bones of Foundation, or any number of tiny little ratholes of Cocoa or Core This or Core That that I need to figure out to make this app work. Making my way halfway through a technical book that purports to teach me such arcane skills in an “easy” fashion “meant for beginners” and then getting bogged down in some unrelated contract work, dropping it for a while because I don’t have the mental energy to comprehend code after hours of beating my head against some nascent TV show, and coming back to it in earnest three months later, having to start all over again because I’ve totally forgotten whatever it was I’d barely started to learn. Done that innumerable times. Drives me nuts.
But then, I am easily distracted, as evidenced by my personal motto: “Ooh, Shiny.”
I’m interrupted by half-baked ideas for other apps, marketing videos and cool designs. I have to really fight to keep focused on building a thing, instead of thinking up cool ways to promote a thing that doesn’t yet exist. It’s just what my mind goes to automatically, instead of staying on the task at hand. More annoying than awesome, really.
Not that I’m any great hand at design, really. Or marketing. Tons of ideas, sure. Execution? Somewhere in the low fractions of a percent.
But here’s the thing — and I hope this is something that will be useful to someone stuck in a rut like this — You’ve got to stop thinking so damn big.
This app I’ve been developing for video work, it’s huge. Well, no, not really. Not to a seasoned developer. It’s probably something a beard-and-suspenders type could bang out on his lunch break. But to me, the guy who is essentially learning everything from scratch just to put this one app out into the world, it’s a monster. A giant mythological beast that is to be slain by a man who needs to find iron ore and learn metallurgy and forge his own sword before he can even think about the years of martial arts training he’ll need to even begin thinking about slaying it.
So I quit.
For a bit, anyway. I’ve switched to another app; an iPad app this time. And it’s something small. This is an important bit here. Small.
Of course, I’m already fighting myself to keep it small. The Hydra of feature creep is rearing its many heads. But so far, I’m succeeding. And you know what? I’m making progress. And it feels good.
I’m still a total newbie, but I finally feel like it’s clicking. I’m making progress, and I’m starting to actually understand how things work in this weird world of Cocoa, instead of just pretending I do enough to stumble through to the next chapter’s exercise. Actually using it several times a week is a huge help in grokking this stuff. One night a week at NSCoder isn’t enough.
I took this smaller one on because it seemed like something I could figure out, build and ship within a few months. Something to give me a bit of confidence that I can actually finish an app. Of course, it’ll end up taking longer than I think (natch), but especially now that I have a good chunk of the display (a.k.a. “View”) code in the bag, I’m really excited to start filling it out with real data. I think that, like Matt Gemmell said at NSConference, I really need to start with the interface and work backwards. It really makes more sense to me from a design sense (get the features really, really right on paper, then write the code you need to support just that much), and so far, that tack seems to make motivational sense to me from a coding standpoint as well. It’s ever so much more satisfying to see something actually take form on the iPad display (even if it’s gibberish) than it is to stay bogged down in XML internals for months on end without having anything to really show for it.
I’ve worried that I’ll never completely get this whole development thing because I didn’t learn this skill of programming from the ground up in college when my brain was still malleable; but as Rob Rhyne pointed out recently, I’m coming at it from a different angle than most everyone else who came up through the CompSci ranks, and perhaps that will prove itself to be a strength. I still wished I grokked this stuff at a deeper level — and I suppose that will come with time — but this smaller project gives me a bit of confidence that I’m not wrong in trying to come at it this way, from what may be a slightly more practical standpoint, instead of learning all this theory first. I’m actually making visible progress. It is indeed possible.
I do think code itself is really cool (just ask AAlgar: I do love the esoteric technobabble), but its coolness almost solely lies in the power it gives you to craft an app to your will. I’m excited again to be creating something. Seeing something coming into existence. Seeing the progress. That’s what matters.
So, if you’re new to all this “code” stuff and find yourself bogged down in your Epic Application of Great Purpose, not seeing a light at the end of the tunnel: Give up. Do something small. If your other app really is all that epic, it’ll still be there when you get back, and you’ll have the weapons, armor and experience you’ll need to kill it dead.