I am a programming god.

At least, I program. One of the happy recent developments in my life (out of some that have not been so happy) is that the programming thing is starting to come together.

What this really means is that if I apply myself to a programming task, usually in the form of hacking on an existing codebase from an established project, I am now able with considerable persistence and a fair amount of hair-pulling and alienation of my girlfriend, to push out a passable solution.

I can submit as evidence:

  • A patch (and follow-up patch) to enable Banshee support for the music track listener in Gajim.
  • The work I do as maintainer of the Alexandria1 project.

I find that progress in programming skill proceeds somewhat arithmetically. There are days that I have spent hours banging my head against a problem only to come up with a solution that consists of a single line change. So I’m doing better if I make one more significant line change than yesterday, two more, etc. I just wrote about 8-10 lines of code in the course of about 5 hours. Pretty good! This is the rate I maintain when hunting and fixing bugs. I do slightly better when I’m adding incremental features, in part because I’m busy introducing new bugs and because my own code tends to be verbose. There’s some backsliding in this metric when I figure out/remember how to be more concise (for example, using collect and writing blocks for functions in Ruby and using list comprehensions in Python2), but this a good thing.

The last step is to learn how to properly design a program from the ground up. Learning how to think OO3 is the last to come for me. Studying the Alexandria codebase has helped me a lot; the previous development team was a clever bunch of guys, full of meta-programming tricks and “expressive” Ruby code that have caused me endless hours of frustration and led me to some pleasing razor’s-edge-of-duress epiphanies. I’m working on a program called Chronology that will give me some practice with designing a program from scratch.

In another life, I got a CS degree and this is all easy for me.

  1. The current webpage sucks. To see what I do look here, here and here. I’m ‘method’. [back]
  2. But never lambda or map. Python, I hardly knew ye. [back]
  3. Object-Oriented Programming. [back]