I forced myself to finish a chapter of GEB tonight, and it ended with Hofstadter's Law:

It always takes longer than you expect, even when you take Hofstadter's Law into account.

Although not originally about programming productivity - Hofstadter's example was about chess-playing programs - it's gained popularity in programming circles for being annoyingly accurate in software estimation.1

Unfortunately, I've felt Hofstadter's law weighing heavily on me recently. I recently started the django-repo-browser project, but to be honest, I don't have nearly enough time to devote to it. And even that is a small sliver of the larger programming ambitions I have: an open-source, Launchpad-like project hosting app, absorbing the features of Trac, the community of Django, and the multi-project abilities of Redmine or Launchpad.

But from the outset, the amount of code needed to make that happen could easily take a year for me to write - and combined with Hofstadter's law, my chances of actually completing it are pretty much laughable.

The good news is that Trac will probably get multi-project support at some point.

The bad news is that this state of affairs doesn't really help my general feeling of hopelessness when it comes to programming - I know that no matter how good I get, I'm still stuck at being just one person, and the code a single person can write is pitifully small. Sure, it can sometimes snowball - we all know the Linux story by now - but this just reinforces the underlying deficiency: nontrivial software is too complex for a single person to write in a single lifetime, let alone in a subset of that lifetime. Only a few immortals are granted exeption from this sad state of affairs - Knuth, Thompson & Ritchie, Cutler - but for the rest of us...

And so I'm struck with the possiblity of quite literally spending my entire life learning to be a better programmer, and having nothing to show for it at the end than being a marginally better programmer than I otherwise would have been. I'll still be bound by Hofstadter's law, and things will still take me far longer to accomplish than I expect (even, naturally, with Hofstadter's law taken into account) - meaning that I'll get far less done than I anticipate.

And that's why I've never considered programming something I'd like to have as a long-term career. In fact, I'm not sure I'd ever like to have a career, per se; the idea of doing the same thing for a decade - to say nothing of three! - feels downright bleak.


  1. It's also annoying in two other respects. First, it's really hard to spell. Second, how on earth is it pronounced, anyway? "Yegge" is hard enough.