Engineering Software

Jim Michmerhuizen, 1988

I am, by unpredictable turns, a Christian, a philosopher, and a poet. The Christian in me believes everything; the philosopher tries to believe as little as possible and deduce the rest; and the poet is convinced that belief is not the central issue in life anyway.

It will be readily apparent, then, that in taking up software engineering some years ago, I was only embracing my destiny.

While the analogies with, say, hardware engineering are numerous and generally wellfounded, there is one overriding characteristic about software engineering that makes it quite unlike any of the other technological crafts: its objects are intangible. The objects that I deal with, and the relations I set up or discover among them, are as ghostly as the objects of mathematics or theology.

Yes, yes, I "write programs". And I examine them, textually represented, on terminals and in listings. But these representations are ancillary, not fundamental; when you interrupt me in my real work, and I open my eyes, and the distance you see in them remains for several groggy minutes, it was not listings that I was seeing in my mind.

Well, on the other hand it wasn't angels and devils, or quaternions, or Hilbert spaces either (usually). What I usually picture, if I were to draw it for you, would look a little like plumbing. Or maybe a tree, somersaulting like Joyce Kilmer's to catch bits of information in its leaves; or lists expanding and contracting and coiling like strands of DNA, or something like a vinecovered trellis... .

But now these images are no more "the program" than the listings are. Like the listings, these images (and they vary, among the members of my profession, surprisingly little) are only ways of grasping and working on our material; they are not themselves the object of our work.

Hang it all, what is the object of our work?

The behavior of machines.

That's why it's intangible. And also why its intangibility is of a perfectly ordinary sort.

There are two kinds of people, in my own profession, who will disagree with what I have to say here. One consists of those novices who believe that the listing is in fact the object of their exercises. The other will consist of the theoreticians: because even the machines whose behavior they prescribe and examine are imaginary, the intangible nature of their object is not "perfectly ordinary". No one has ever built a Turing machine.

I will respond to these objections later. In the meantime, we deal with the behavior of machines. We prescribe such behavior, we diagnose misbehavior and discipline it, we invent elaborate languages with which to describe it to each other, and we confess ourselves at fault (usually) when it miscarries.

This, in part, is what distinguishes our work, even at its most abstracted heights, from - say - pure mathematics. For the behavior of machines is inescapably a temporal affair, while mathematics is not. To put the matter as crudely as possible, in our work it always takes some finite amount of time for

 sin( pi/2 ) = 1 

In computer science there are no timeless truths: for every truth is about the behavior of a machine.

We would like to escape this, we software people. We, like many of our fellow humans, aspire to eternity. So we devise "virtual" machines and reason about them; we assert theorems, and prove them, and disprove them. Like the desert saints, we struggle to escape the flesh of our dirty little pieces of silicon, their contorted instruction sets, their registers about as general as my refrigerator.

This intangibility of our objects - of the universe we create with each new program, of the behavioral structures we struggle to render coherent, of the execution paths we agonize to illuminate - accounts, possibly, for the colloquialisms that have nagged the profession from its earliest days: guru, wizard, priesthood, giant brains, thinking machines, and so on.

(These had also other causes, of course; one of them the mere size of the early machines. A desktop PC, although it is many times faster and more powerful than the early computers, simply does not have the mana that those behemoths did. Who could be in awe of something he bought at Sears?)

No, I've never felt comfortable about words like wizard or guru, whether applied to me or to any of my colleagues. That may seem surprising in the light of my insistence, up to now, on the intangible nature of our work. But, as I indicated earlier, I'm also insisting that there is nothing odd or occult about that intangibility.

For in fact the behavior of anything, abstracted from the thing behaving, is ghostly. What is the shape of this vase, abstracted from the vase itself? Can I exhibit it without in fact drawing a picture of the vase? And yet we humans live among such intangibles every day we breathe: you recognize your son in the crowd, or your father, without knowing how.

The space through which I drive to work every morning is a feature space; it has far more than only three dimensions; its dimensions are perhaps not even countable. This is the space in which you recognize your son, I my daughter, and we each other. In such a world, what could possibly be mysterious about the behavior of machines? What spiritual about the work of prescribing it?

Nothing, surely. Nothing at all.

Copyright © Jim Michmerhuizen 2000