Consulting
Musings
Bio + Résumé Contact
Home >> Musings >> Blog >> It Should be Software Engineering

Blog:

It Should be Software Engineering
Posted 28-Jun-2007 by Robby Slaughter (@robbyslaughter)

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.

###

Blog: Turning Left Against Traffic
Current Project Email List
signup@right.here
Low Volume, Spam Free