So, I accidentally insulted worthy people with my comment yesterday about software engineers not actually being engineers in my opinion. First, I apologize. I wasn’t trying to say one profession was better than another but that’s obviously how it came across; I have a long-standing belief that I should only insult people who I think should be made to feel worse about themselves, which was not the case here. I’m sorry.
I do believe there’s an important distinction to be made between traditional engineering design (in chronological order of development of the modern disciplines: civil, structural, mechanical, electrical, and chemical engineering before 1900, with nuclear and other branches following later) and software design. Yesterday, I described engineering (in my second try) as manipulation of the non-biological physical world. The magic word in this discussion is “design”, which despite being at the core of several professions – engineering being the one I’m discussing – is not well understood.
To use my work as an example, I had to design an addition to a rowhouse today. As is usually true, there were a number of possible solutions to the problems that the architectural design (!) posed for me. Some of those solutions don’t meet code and are therefore not allowed even if I believe them to be safe in this case, some are much more expensive than others, some are literally unbuildable. I winnow down the list until I have a few possible solutions left (since I’ve done this kind of project several hundred times, that process takes about ten minutes) and then I look at the numbers. How big will the beams be if I use possible solution A? Solution B?
There is no question that personal biases – what in architectural design might be called a personal style – play a role in how I decide which solution I will use. However (HERE COMES THE REAL ARGUMENT) the difference between a successful solution and an unsuccessful one is determined in large part by nature, by aspects of reality outside of my control. Gravity’s acceleration, the density of concrete, the weight of snow on a roof, the elastic modulus of steel, and so on ad infinitum, are things that no one can control and that figure very large in the analysis portion of my design. Any of the engineering disciplines I mentioned above has its own set of natural constraints that play such a large role in design that they could be said to drive it.
This is where I may accidentally insult software designers again: I don’t see that constraint in software design. When I said that there were only economic consequences to failure in software, I didn’t mean in operation. Software controls a lot of machinery that can kill a lot of people if it’s wrong, as was pointed out by several patient commenters. But those consequences are in the physical world, not in the software. A badly-written piece of software (say, Windows Me) will crash and cost someone their work since last saving, but the crash is not due to real-world constraints. The crash was caused by internal inconsistencies.
Failure of a structure is caused by insufficient strength to withstand an external force. I can, and do, make the argument that a given building that cannot be analyzed (say, because its structure is hidden by finishes that cannot be removed) is safe because I have a load history and a record of performance of that structure. In other words, I have empirical evidence of how it responds to real-world input. Unless I really am missing the point, software cannot be analyzed in this manner because it’s not part of the physical world: because the performance of software is determined by its internal workings and not by its interaction with the outside world, how it performed yesterday does not predict how it will perform tomorrow. Hence my belief that software design is not engineering: I’ve defined engineering as dealing with the physical world. Software is no less important to our lives today, but it’s a different thing. I think.
ON EDIT: Maybe an example would help. The software that connects the controls of a real flight simulator to the hydraulics that move it is nearly identical to the software that connects the controls of the same model plane to its control surfaces. The physical-world stuff is quite different, but since the software does not directly deal withe the physical world, it doesn’t matter.