Home page

Homilies

Email me
What's my line? Scott Adams thinks he knows, and so does Richard Stallman. But are they right?

Engineering Work In Progress

Anyone who travels on British Rail knows what to expect when he sees the above notice: inconvenience, delays, outages. I think that's what the phrase engineering work conveys to most people. That's why I've never given up being surprised at the way so many people in the my field of work refer to themselves as 'software engineers'.
In The Dilbert Zone, they even elide the 'software' part in context: "Have you got what it takes to be an engineer?" asks Dilbert in one.
"No, guv," I'd have to say, if he were asking me. "I'm not wearing a grease-stained navy-blue boiler suit, nor a flat cap, neither of my hands currently contains a spanner, and I wouldn't know an engrailed flange from a swivel clevis even if one were riveted to my soffit board". I don't mess with mountains, so I'm not a mountaineer. I don't mess with engines, so I'm not an engineer.
Moreover, and crucially, what I do isn't analogous to engineering either. Some of the elements are there: the hard rules of the underlying system, the pragmatism, the beer-drinking and curry-eating -- but what I do has an aesthetic for which I just don't think engineering is a good metaphor.
I remember my director of studies at university grumbling that some professional body, the IEE or BCS or somesuch thing, was visiting the department to "accredit" the degree course as including the proper elements of software engineering. He said he'd felt like standing at the door, debarring them and shouting "Go away! I won't allow you to accredit our course! It's not about engineering!", but English propriety won him over and he did no such thing.
I agreed with him about that, especially after he pointed out exactly which lecture courses had been included in the degree only because the professional body had required them. One was a course on COBOL, which sounds dreadful but was leavened considerably by the lecturer's dry wit and his air of finding the extraordinary language as laughable as the rest of us did.
The other course was actually entitled 'Software engineering', and by contrast was even more dreadful than it sounds. It was lectured by someone who had, in a previous course, made something quite interesting seem dull and, without him ever saying so, we all soon realised that he was only lecturing the software engineering course that year because he'd drawn the short straw in the department. By the end of the course he was boring himself silly as well as us: "I won't bother drawing a diagram of this", then a long look at the ceiling and a deep sigh, "well, I suppose I ought to" and doing so.
Although I agreed with him that computing is not a branch of engineering, I didn't pursue the argument as I think I was then going to disagree with him about what it is. He thought that with its discoveries, its carefully described rules, it was a science -- the degree course was called "Computer Science" -- and, as he was a great arguer whether or not he was right, I didn't feel like pressing the point that I don't think it's a science either. I think it's a craft.
Look in the back pages of MSJ or InfoWorld: 'software engineer' has become the standard phrase for we who conjure computers to do our bidding. Even my own job title was 'software engineer' until recently -- it's now 'senior software engineer'. A new phrase was undoubtedly needed to replace 'computer programmer', as people think they know what that means now and it's no fun admitting at parties to being one. 'Software engineer' just doesn't describe the job, though.
'Software craftsman'? Craftsperson? 'Software artisan' (with its echoes of artisan boulanger)? 'Software writer'? None sounds right, but all are better descriptions than 'engineer'. There is that about being a good whatever-it-is that cannot be taught. That is to say, you can teach almost anyone to be an okay software writer (it has that, at least, in common with engineering): someone whose programs don't fall over much. Companies who advertise for 'software engineers' are likely to get just such okay software writers, and some might not even notice. But there's a difference between an architect whose buildings don't fall over much, and a good architect, and the same is true of software writers.
How to describe these craftworkers? It seems fitting, as a counterculture to an industry which, when left unchecked, defines an API as 'a way of leveraging core functionality' where 'a system call' would do just as well, that the best-sounding description I can come up with is shorter than either 'software engineer' or 'computer programmer'.
At parties now I say, "I'm a coder". People aren't sure they know what this is, but often vaguely associate it with New Media, if they know what New Media are. (I, like most people who know the score, abhor the recent trend of describing HTML authors, like that Higher Source lot, as "computer programmers".)
It still says 'senior software engineer' on my contract, but I'm not worked up about getting them to change it. 'Software engineer' is so common in the language now that it's got entirely holistic semantics: in people's minds it inherits little or nothing from the semantics of 'engineer'. I view the phrase as an atom, and, except in job adverts demanding five years' COBOL experience, inwardly translate software engineer and senior software engineer into, respectively, coder and well-'ard coder.

-- Peter Hartley, 3rd April 1997

See also

The Dilbert Zone
The Manifesto of the Futurist Programmers
"API: A way of leveraging core functionality" is a genuine entry from the glossary in Microsoft's Win32 online documentation
All Rites Reversed -- Copy What You Like