I remember being incredibly incensed by a Catalyst conference panel some years ago, where one of the panelists haughtily declared something to the effect of “if engineers built bridges the way coders wrote programs”… you can guess the rest of the analogy.
That kind of a statement raises my ire as well.
The engineer's job in designing the bridge is so easy:
- Engineers don't get blamed for someone driving or jumping off the side of the bridge. That's the common user model that programmers have to develop against (and we can't figure out all of the possible ways the dumb user might try to go -- there doesn't seem to be alot of "stay in your lane" mentality for computer users).
- Engineers don't get blamed when someone accidentally or purposefully damages the bridge. That's the primary security threat for a programmer.
- Engineers even take shortcuts in their bridge design.. Many bridge deck components are only attached on one side -- the other side is just resting on the vertical structure. This allows the engineer to ignore some of the lateral forces from expansion and contraction since the unattached side can move back and forth. This gave my wife a wonderful feeling when I told her about it and pointed to the place where you can see the bridge just resting (e.g. not bolted) on one end.
Note that I'm not making an excuse for bad code and when I write code I tend to try to anticipate many such situations to protect from them. I'm just saying that comparing the two jobs is like comparing first grade addition to multi-variable calculus. There's just no comparison.