Is software engineering "engineering"?

I have previously said what I think software engineering is, but is it really engineering? There are those who would argue that software engineering is not in fact engineering, basing their definition of engineering on variations on the phrase "the practical application of science and mathematics". I know there are some computer scientists who say that we can only claim to be doing engineering if we can provide guarantees about the correctness of the software. Such people clearly do not know what engineering is.

The definition above implies you must have the scientific theories and necessary mathematics before you can have engineering. Clearly this is not true. I don't see how anyone can deny that the Great Pyramid of Giza are a fantastic feat of engineering. A well-known commentator and communicator of engineering, Henry Petroski makes this point explicitly. He observes, in an article entitled Engineering is not Science that "The era of the steam engine, notably, was well into its second century before a fully formed science of thermodynamics had been developed." Which isn't to say theories of how to build steam engines did not exist — steam engines were built based on principles (or at least heuristics) that everyone understood at the time. They just weren't theories that came from science, or underwent anything that might be considered scientific investigation.

So any argument that software engineering is not engineering because there is no science is on dubious grounds. So what makes it engineering? To answer this I use examples from the past — the Great Pyramid of Giza, Roman Colosseum, The Great Wall of China (you don't have to take my word for this — I took these examples from 25 of mankind's greatest engineering achievements. A unifying feature of these examples is that their construction was complex, in some cases mind-bogglingly complex. The fact that these projects were completed was a huge achievement, and only possible by what we generally refer to as "engineering".

Well if you want complexity, especially of the mind-boggling kind, you need look no further than software. In many ways it is the embodiment of complexity, for where else can the change of a value from 0 to 1 (1 bit) change the outcome from success to absolute catastrophe. This being the case, it should not be a surprise that we have so many software failures, instead we should more greatly appreciate the significant successes — from the world-spanning telephone system to iTunes. What's especially impressive about many of these systems is that they work so well that very few people who use them understand really how complex they are - both the telephone system and iTunes being great examples. Now THAT'S engineering!

Note that I have deliberately compared examples from centuries ago to software engineering, because in many ways that is the state of the discipline. Yes it is true we do not have much science (perhaps slightly more than the pyramid builders), but that doesn't make it "not engineering", that just makes it with "still a ways to go" to catch up with more traditional engineer.

History

Late 2014
First conceived and drafts written.
2015-07-24
Made public