I was 35 when I started to program. And immediately I loved it. It was as if a part of my brain that had been locked away could suddenly cavort in the broad daylight of ongoing life.
Having developed other skills and burnt though other passions, I was self-conscious about the joys of programming; I wanted to know what this new thing was, and why it thrilled me.
Some joys were not specific to programming per se but would attend the learning of any skill. Obviously, it’s cool to know how to do stuff. I remember vividly the stultification of my three brothers (an accountant, a lawyer, an engineer) when they started their careers, and even more vividly how they slowly got pulled into the details and the drama of their craft. As Moby Dick proved with whole chapters on subjects like stripping of whale carcasses, almost anything can be made intriguing. In the future, maybe bird-watching, souffle and design patterns will each have a cable channel devoted to them.
Then there were the programming-specific joys:
Direct Power Just about any activity can be described as a feedback loop: act, observe, act again. And just about any job, too. But, as you might be aware, in most jobs, the loop is broken, or just as often, necessarily indirect or complicated.
The act of programming in contrast is a freaking video game. The result of your action is as immediate as a trace(), and the solution is in your power, Space Cadet Jones! I’m exaggerating, but between the M.B.A. with her estimates and the painter standing back to appraise his latest stroke, the programmer stands nearer the painter.
Program as Person I can track my evolution as a programmer by relative prominence of bug types: first the mangled syntax, then the logical slips, then the crossed wires, and so on.
At some point, the bugs become weirdly…inflected. They seem stupid and stubborn, yes, especially when the debugging has gone on too long, but also cute, ironic, tart. This happens when the program becomes so complex that you can’t load all its mechanisms in your mind at once. At that point, the program begins to seem autonomous, like a separate, self-directed entity.
Human beings have demonstrated a capacity to “humanize,” personifying trees, rubber dolls, cars, etc. So it shouldn’t be be surprising when programmers relate to their thinking machines likewise. In fact, I was not surprised when I found myself being cross with a program, sometimes even feeling betrayed. I’ve kicked and cursed my Honda, after all.
What did surprise me was the flip side of this low-level personification. If I felt hostile sometimes, sometimes I also felt like the program was like an especially helpful comrade, or an interesting woman who entices and eludes me, or a child in need of nurturing. Maybe I should get out of the house more, but I count these feelings among the joys of programming.
Cosmic Delusion There’s a great scene in Johnson’s Rasselas where Rasselas and his roving crew visit an astronomer. The astronomer lives alone in a tower, and he sheepishly confesses that he has come to believe his thoughts can move the stars.
As I start dealing with non-language specific patterns and information architecture, I often remember the astronomer, because the more abstract my programming becomes, the more prone I become to random cosmic sensations like those I had as a LSD-addled youth watching cigarette smoke swirl: “It’s all part of this vast…system.”
These sensations are partly triggered by the abstraction. Once you construct a useful model, it’s easy, like Plato, to think the model itself is a higher, better reality.
But there is also something in the nature of programming itself that gooses the mind’s ambitions. First, it’s an odd mixture of subjective and objective. A programmer works alone at his desk writing characters in a text file, knowing full well there are myriad ways to write these characters, depending on his habits and mood…and at the same time, the result of this extremely subjective process is objective: it works, and works the same for anyone who runs the code. So it’s understandable if a programmer having a very productive day mistakes his over-caffeinated intuitions with something grand or objective.
Second, programming demonstrates the astonishing power of reduction. The first rush of a neophyte programmer is realizing that programming languages largely depends on a small set of concepts: conditionals, datatypes, arrays, loops, etc. Once she masters these, the next language is just a few weekends and a “hello world!” away. The next rush is realizing what a broad spectrum of problems can be solved by combining these narrow concepts. It’s as if you’ve just learned the 26 letters of the alphabet and realized that you could write an entire dictionary. (The only comparable rush I’ve had is reading German philosophers, who permutate a small number of concepts with such subtlety that their systems seem to absorb any fact, no matter how particular.)
Scientist gave up the idea that the whole universe can be explained by a few basic laws in the nineteenth century…but when a programmer wrestles with a stretch of code, making it simpler and simpler until simplicity, beauty and utility converge, then, for a bit, the old-timey dream of a few special, cosmic keys revives.
I don’t mean to imply here that programmers are more cosmically-inclined than the average person. The reverse is definitely the case. I’m just guessing at the whys and wherefores of the transient highs I’ve felt while coding. Nor I am criticizing those joys based on delusion. I accept that most pleasures are laced with delusion. When I look at my Rosario Dawson wallpaper, some small, silly part of me thinks I might get to sleep with her, just as when I was a student and swam far into the Pacific ocean with a fearless, seal-like Norwegian buddy of mine, some small, silly part of me exulted that death was cheatable.
Of course, I’m never going to sleep with Rosario Dawson, or cheat the Grimster. But I’m going to treasure that wallpaper and keep swimming, and I hope programming remains a blast.
Tags: culture · code · random4 Comments
4 responses so far ↓
Matt, I really liked this essay. You were able to distill a lot of the feelings I too have felt about programming… except the Rosario Dawson part. :)
Very very good, Matt. I’ve been away from programming some years ago, now I’m back at full throttle, and it’s really exhilarating when “simplicity, beauty, and utility converge”.
Great post.
What was your previous interests? And since I agree with the already commented lines I’d like to just add that you are a good writer, the last paragraph is good and caused the so-desired among writters goosebumps effect.
Cheers!
Very interesting, exciting writing.
You defined what has been on my tongue for so long :).