Wednesday, 23 October 2013


So I've been a computer programmer for a year now. I'm just about beginning to be useful, and I think that in a few years' time I could be a reasonably solid employee. Programming involves pretty extreme amounts of abstract thought; a friend emailed me some advice which included this:
"If there are two things to learn in your career as a developer it is algorithms and design patterns. Both last much longer than any language or framework. By having those core approaches constantly in mind most programming tasks can be distilled into elegant solutions that help you to transcend their superficial drudgery and reveal their inner mathematical beauty."
(He's been doing this much longer than me, I don't find any of it at all like drudgery yet.) So the eventual aim is to be language-agnostic (which is a wierd term because it seems like you don't know for sure whether or not languages exist) and instead to see the organisation that underlies clean programming structures. But at the moment I am concentrating on Java (and Scala), because I am all new.

The study of Anglo-Saxon manuscripts may be obscure but it's reasonably instantly engaging when you try to explain it to people. It was rather easier to talk to strangers about at a superficial level. I can tell someone about a beautiful manuscript and probably make them understand why it's beautiful to me -- most people can imagine seeing a book and thinking "that's beautiful" even if they've never looked at a medieval manuscript in their lives. It's harder to explain why Scala is beautiful, and why Prolog is beautiful, and why some clean, concise, flexible code is beautiful. I can't think of anything else that's quite the same. Maybe the nearest thing is a really good bit of prose. If you write a well-made phrase, or, more probably at least in my case, read one, the feeling of rightness is quite similar. Some of the Religio Medici makes me feel like that, or Gibbon's Decline and Fall. But I don't think I can easily explain why it's also true of this definition in Scala of all the prime numbers there are, using Eratosthenes sieve:
def sieve(s: Stream[Int]): Stream[Int] = s.head #:: sieve(s.tail filter (_ % s.head != 0))
And really that's a very similar thing: the elegant and concise capturing of meaning. I recently started to read a book called The Structure and Interpretation of Computer Programs and was intrigued by this:
"Underlying our approach to this subject is our conviction that "computer science" is not a science and that its significance has little to do with computers. The computer revolution is a revolution in the way we think and in the way we express what we think."
I don't know that I agree with that but it's an interesting thought. (It's a shame in a way that this idea is hidden in a book which no one will read unless they're looking for a tough programming primer.)

I've been thinking about whether I would have moved in the other direction if I had started out on the CompSci side of things. It would have been much harder to do, I think. The humanities are a bit indefinite and easy to feel bad at. However insecure you are in your work, at least in computing if you do well in an exam that's no one's judgement call; it's an independent endorsement. So it would have been harder to change to being a humanities person in my (early) middle age than it has been to change over to computing. It would have taken a lot more courage to plunge into the less tangible world of essays and conference papers.

So at present I am feeling really good about having made the change. It's not just that I'm enjoying my work, it's also the first time I'm ever been able to think years ahead with any degree of confidence in what I might be doing. I've never had a contract longer than three years, and most of them have been considerably shorter. I do hope to finish off a few Anglo-Saxon things at some point -- I don't really want to at the moment but I hope to want to in future.

1 comment:

  1. That's great, I'm really happy for you. I can't pretend to understand programming, but I think I can see how there might be beauty in finding an elegant, efficient way of doing something.
    We used to play a very old board game called 'Careers' where you had to decide at the outset what balance you wanted between Money, Fame, and Happiness, and then try to achieve those totals as you went round the board. I still think it's not a bad analogy for life; perhaps just in the broad sense of deciding what you really want, then going for it.