I've met a good friend today, entirely by chance. We had a coffee and as none of us has a time for a beer-talk anymore, we started the usual rant drinking coffee. We have been talking software quality, especially the quality of software design. We have agreed that the situation is worse than bad. If software really works than it is mostly only a miracle. And even if it works, it works unreliably, insecurely, does not perform, does not scale, cannot be operated and maintained ... or (most frequently) all of that at the same time.
My friend proposed quite a disturbing vision: He imagined that the users will eventually get really angry, they will drag all the software engineers out, get them up against the wall and have them shot. While I can really understand that such a solution may appeal to many (most?) software users, I don't think this affair will get that far. Hopefully.
We have also talked why civil engineering and architecture works quite well while software architectures fail. I think there are two principal reasons:
- Civil engineers have hundreds of years' worth more experience than software engineers. They have transformed experience to knowledge and fed knowledge back to practice, gaining more experience. They went through that circle many times, much more than we could even hope for. And even thou there was a major progress in material and building technologies in last hundred or so years, there were only few really revolutionary changes. In software, we have a major "revolution" every decade. Time sharing, parallelism, networking, Internet, Web ... there are only few equivalents to the development of cheap steel in construction technologies. We don't have enough time to learn and gain experience before a new revolutionary technology appears.
- Civil engineers and architects have responsibility. We haven't. If civil engineer makes a mistake and big building is about to collapse, he would rather kill himself than to face the consequences. If software engineer makes a mistake, endangering security of millions of people, the company employing that engineer does not even take the time to apologize.
I think that Bruce Schneier is right. We should take responsibility. Yes, the software will get more expensive. And yes, the progress will slow down. But the results may be better. More reliable, secure and efficient software. Maybe we could get even to the ... er ... sustainable progress?