Programming is not Engineering
What do I know about engineering? Admittedly, not much. However I did study engineering for four years at one of the best places and I worked (briefly) at two engineering companies. We also have engineers in the family.
I have now spent well over a decade writing software, primarily web applications. What I do these days has nothing in common with engineering.
Engineering is solving problems by applying mathematics and natural sciences to the physical world around us. Inevitably, no matter what you’re doing, you’ll need to solve second order partial differential equations and look up physical constants in dense reference books.
(I haven’t looked up the dictionary definition of engineering, but if you look up “boring” in the phone book it says, “See civil engineering.”)
Programming does’t involve any of this.
What is Programming?
The Guardian used to profile writers in a series called something like How I Write, or maybe Writers' Routines (I can’t find it now unfortunately). Reading about the various approaches people took to constructing plots, editing their prose, finding the right voice, etc, reminded me strongly of how I felt writing software.
The more I thought about it, the more I came to believe programming is like writing. We write software; we don’t engineer it.
Just as every writer develops their own style over time, I believe every programmer develops their own style too. Some are terse, some are loquacious, some are “clever”, and so on. In contrast there aren’t really any stylistic variations in calculations for the bending moment of a steel truss.
As it happens DHH, the originator of Rails, thinks the same: “Programming of information systems is more like French poetry than physics.”
Another metaphor I think works well is composing music (notwithstanding programmatic music composition). However it’s a little confusing to say you compose software because composition has a specific meaning within programming.
Incidentally, in saying programming is not engineering I’m not saying programming is easy (though clearly programming has a far lower barrier to entry). It’s hard to program well – just as it’s hard to write well. Being a good programmer doesn’t make you a good engineer just as being a good engineer doesn’t make you a good programmer.
So when other people ask what I do, I say I mostly write software. I know what engineering is and I’m not doing it.