On 'Software Engineering'

Ten days off work makes fertile reflection time for a rant

03 January 2021

I’ve said before (as have many others) that it’s a smart bet to put ‘Software Engineer’ on your CV. Over any other job title for this field, it seems to attract better salary, more ambitious challenges, and more prestige.

However, it also seems clear to me - and has done for some time - that our profession couldn’t be further from an engineering discipline.[0]

Let’s face it, if it was, we’d be required to produce formal proofs. We’d have to be more careful about specs and up-front design. Agile wouldn’t be a thing. We’d all be programming in Haskell, or Idris, or ‘research’ typed languages that can help us with the problem of ‘correctness.’

So if Software Engineering is not, in fact, an engineering discipline, then what is it?

It’s a creative art, I suppose, as it doesn’t strike me as a humanities or social sciences discipline[1]. I think this makes it clear why I’ve always found the idea that you can excel as a programmer if you just treat it as a job ridiculous - because you wouldn’t say that of any other creative art. Writing, music, dance, performance - these things, except in a few outlier cases are perfected only through years of practice, of heartache, of study. If you don’t continually critique your work, your thinking, and seek to improve, to take the path less travelled, to study under others who are better than you, then you’re unlikely to get far. There’s a musician’s saying that goes ‘always be the worst musician in a band,’ and that’s not unlike the guild system discussed in Apprenticeship Patterns, where the process of apprenticing - first as an apprentice proper, then as a journeyman - usually means you’ve always got people of a substantially higher skill level than yourself around.

Speaking of which - I’ve long been a fan of Apprenticeship Patterns, by Adewale Oshineye and Dave Hoover. Their analogy of programming being a vocational subject - a craft that would have been covered by the guild system in the past, is an attractive one, and has guided me well in my own career, going from an apprentice to a journeyman programmer.

Given how rare it is to have the purpose afforded by a vocational job, I can’t really understand why you wouldn’t seek mastery in the end. The path to being a master craftsperson, like that of being an artist, requires study and practice, and it has clearly documented steps which can be followed. Many journeymen never achieve mastery, and I don’t claim to presume that I will, but why not try to get there?

[0] For a rejoinder, and excellent discussion that comes to the opposite conclusion, see this article from Hillel Wayne.

[1] Actually there are elements of both in the reality of engineering, whether it’s software or bridges, but let’s not get bogged down in that.

Fork me on GitHub