An interesting blog post from Steve McConnell about whether software is engineering.
I actually come more from the engineering end of things (educationally, at least) than the Comp Sci route. I hold a Masters of Engineering, and my degree involved more electronics and mathematics than software.
The parallels between ‘proper’ engineering, and software engineering are compelling. I guess that the difference is the ‘environment’ the work takes place in – traditional engineering disciplines have to deal with the real world, and minor hinderances like physics. Software engineering takes place in an environment which is – somewhat – divorced from that.
(Sure, you’ve got problems like bandwidth, speed of light, heat build up, electrical supply. But those are dealt with by other engineers).
That sad thing, I think, is that although software development should be like traditional engineering, usually it isn’t. Failure is acceptable, even expected – “To err is human, but to really f%^k up takes a computer”. Time and again I see projects with inadequate specification, unclear goals, unrealistic budget, etc. and I think ‘This isn’t how you’d build an aeroplane’. Well, okay, sometimes it’s a car, a bridge, or a rocket.
I guess it’s a question of consequences. If a server falls over, you restart it. If a plane falls from the sky, it’s a big deal. So planes are expensive, and don’t crash very often, and servers aren’t, and do.
I read Richard Feynman’s “Personal observations on the reliability of the shuttle” and the thing that really struck me was how he actually praised the quality of the Shuttle’s software. And it seems to me that they achieved this by treating the software exactly like an engineering discipline, and accepting that this adds time, effort and cost. Sadly, most companies will not accept this. Sure, they might say they want 99.99% reliability, but you try getting them to pay for it. The difference is, NASA can’t afford failure.
Comments from my old blog:
Great post – I agree totally.
The costs associated with commercial development projects show why open source software has found a very solid position in the market – for the “mission critical” tasks such as web servers and database servers.
It’s the difference between something being built “good enough for the money they paid”, and “as good as it can be”.