Whenever the term ‘software engineering’ gets brought up there’s a big question of if it’s a thing and if it’s as good as ‘real engineering.’ Programmers have an almost mythical notion of what engineers in other disciplines do.
Hillel Wayne’s Crossover Project is worth it.
Some musings I scribbled down:
The short answer is “yes,” but most readers will want more detail than that.
To answer the question, we must first define what makes something engineering, and then looks at whether there are practices around producing software that satisfy those requirements.
Engineering, based on my discussions over the past few decades with my father and some of my close friends who are engineers in traditional fields, is driven by the necessity for people to be able to stand up in court and prove that it’s not their fault. This is what an engineer’s seal says. A house that an architect designed falls down. In court, she points to her civil engineer’s seal on the plans, and says, “The engineer signed off on it, so it’s not my fault.” A worker brings a lawsuit saying that the HVAC in her workplace made her sick. In court, the building manager points to the inspection certificate of the commissioning engineer and says, “The engineer signed off on it, so it’s not my fault.” A chemical company goes ten times over budget setting up a new production process. The manager of the section goes to his boss and says, “The engineer signed off on the estimate, so it’s not my fault.”
Any time someone says that, the engineer herself is going to be called up next, and, if she wants to last as a professional whipping boy, she had better be invulnerable. When the building falls down, she had better be able to walk through the plans and say, “If they were built as designed, it would not have fallen down.” When the worker gets sick, the engineer had better to be able to say, “The building wide HVAC couldn’t have contributed more than any other building the worker spent time in.” When the construction went over budget, she had better to be able to say, “The estimate was sound, so there have been unforseeable circumstances that drove the project off.” And she has to make it stick despite other engineers, hired by the opposition, trying to tear her arguments apart.
So software engineering requires people to be able to point to the software engineer and say, “The engineer signed off on it, so it’s not my fault.” This could be when a project goes over budget or over schedule or when the software fails in the field. And this is certainly within the job description of many software engineers.
Now, a particular engineer won’t be able to sign off on everything in her field. A specialist in roof trusses isn’t going to be able to provide good estimates or sign off on the design of a suspension bridge, and no civil engineer may be able to sign off on the cutting edge design of a modernist architect without running a massive research program first. Similarly, someone who builds database CRUD apps with web frontends could not estimate or sign off on control software for a car engine, and no software engineer could estimate or sign off on a project to create the latest science fiction idea of an artificially intelligent assistant.
So there certainly are software engineers, and such a thing as software engineering. We can stop arguing about that. On the other hand, what constitutes reasonable practice for software engineers is fertile territory for acrimonious dispute.