Blog: 

Aug
Jul
Jun
It Should be Software Engineering
Eric Wise over at CodeBetter.com
writes that we should not call programming
"software engineering" because he claims that building software is not like building a bridge.
Au contraire. Building software is exactly like building a bridge. Anyone who thinks
otherwise is in serious trouble.
Wise seems to think that laws of physics and information about materials science is a necessary
condition of engineering disciplines. Software is constrained by the laws of physics; you have
to build systems that conform to the physical limitations of the target hardware.
The materials used by software engineers have well-defined constraints, such as
limitations on storage and transaction sizes. Even fundamental building blocks of
software are important: you must select the right variable type, and you can
only pass by value if the stack can handle it. Software development is engineering.
There's no question that engineering is not manufacturing, as Wise seems to argue.
Every engineering problem is unique. No two bridges are exactly alike. Software and civil engineers
both must compromise to meet environmental conditions, user requirements, material limitations, budgets and
future extensibility. Just because you've built 500 bridges before does not mean the 501st will be
a cinch.
Every bridge is not the same.
His article also claims that software estimation is effectively impossible. While thorough estimation
is almost never done in real life, it's
not that hard.
Estimation is just something nobody likes to do. This is no reason to say it's impossible.
Wise also makes the standard attack on software development engineering methodologies, which is to cite
a bunch of studies that show some programmers are "10 times as productive" as others. Since there are
no drywall installers (his example) that are a thousand percent faster than the next guy, software
programming can't be engineering, right?
This argument would hold if programmers were only responsible for doing one, simple, repetitive task on
an application. In fact, we do almost everything. We build user interfaces, develop complex database
structures, write business and presentation logic, invent and implement specific algorithms and
interface with third party components, often all in the same day! If a programmer is even
competent at dozens of types of technical work, they are likely to be more than ten times
faster than someone who is an expert in only one or two.
Finally, engineering is full of information hiding, contrary to what Wise claims. Bridge builders,
for example, often keep safety margins a secret from other teams to prevent groups from depending
on each other too much. Spacecraft designers use multiple implementations of the same
specifications developed by different teams and an automated voting system to agree on results.
However, Wise's main point is that when information is shared between teams, it "lead[s]
to a lot of infighting where developers would cross team boundaries and try to impose their
biases and design preferences upon other teams which [is] horrible for productivity."
Thankfully, this is not a major element of engineering. Professional respect is too important
to true engineers.
Of course, very little of the software produced in the world looks anything like engineering.
Most of it is built in the way people create birdhouses, a continous string of artistic
expression guided by a few pesky syntatical requirements. Software development
should be an engineering discipline. Gunslingers with the attitude of Eric Wise
are part of the problem, not the solution.
Would you like to leave a comment?
Read this.
###