In Search of Perfect Software
Posted Fri, Apr 11, 2008 in:The Problem
There are many pieces of software in the world, but very few of them are anywhere near what one would consider “perfect.”
I don’t blame anyone in particular for this. Writing perfect software is quite difficult if the software is to accomplish any sort of non-trivial task. Some come close to the lofty goal of perfection.
Even still, there are certain areas where the mark has always been missed, if only enough to be slightly annoying. I’m being purposely vague here because there are lots of different things wrong with lots of different pieces of software. I’ll get more specific later.
Probably the biggest contributer to this problem is the fact that nobody really knows what perfect software is. I usually know what annoys me about a particular piece of software, but I’m not always sure what would be a better solution.
My solution
There are some types of software which have gotten closer than others to perfection. Web browsers, for example. I’ll readily admit that there are things which annoy me about Firefox, but on the whole it’s a good piece of software, and improving all the time. I have some ideas of my own about the was a browser should do certain things, and I’m not about to go hacking about in the monstrous labyrinth that is the Mozilla source code, so I’ve started my own browser project. It will probably never catch up with the other, “real” browsers, but it will keep me entertained and provide me a way to prototype various ideas I have for user interfaces.
There are also some good programming languages out there. Languages like Python, Erlang, and many others make programming “fun again.” Still, for every language there’s something that’s missing, or something that might be cool to be able to do, some area which has been left mostly unexplored. Once again, I’ve started some prototyping so I can play around with some new ideas and push some boundaries which I think should be pushed (or at least ones which look as though they may be fun to push).
So what’s the way to write perfect software?
It has occurred to me that the general theme in my recent projects and interest in other projects: simple, easily extensible software. Even if the software isn’t perfect when you write it, it should be easy for you or others to improve.
One of the things that annoys me the most is when a single piece of software tries to do everything itself. It’s fine if there are plugins which can make a certain piece of software do everything, but having that sort of thing built in annoys me to no end, especially when I don’t like the way that a certain thing is done. If I can remove a default portion of something, then it’s less annoying because I can make it work the “right” way instead of the default, “wrong,” way.
People tend to be very opinionated about how a program should do certain things, and so it pays to let your users, especially those who are programmers, customize a program. What’s perfect for me isn’t going to be what’s perfect for you.
A program which lets it’s users redefine how it works has a much better chance at becoming a perfect piece of software for any given user.