Google

Net Neutrality Canada - Neutrality.ca
Save the Net

I was playing with some GUI toolkits recently, and looking at the sizes of typical Hello World applications with various toolkits, platforms and languages. It's really apalling.. somewhere between 1 and 3 MB of executable just to have a single top-level window or dialog and some static text.

Why? There are entire usable applications (like Spread32) that fit inside 1.5MB.. in fact there is a whole site dedicated to collecting them. Too bad their collection is so small, because it shows just how few apps qualify.

How about speed? Memory requirements? I think we've all noticed that the minimum hardware requirements keep going up every time an app is upgraded, but what are we really getting for all that extra power and capacity? Not much, if you look - mostly eye candy like alpha-blended menus and animated window minimizing. People used to optimize their code.. seems like these days we write all sorts of junk and then just tell users to buy new hardware to compensate.

And last, what about the quality? I think the overall quality of software might actually be improving! But, there's still far too many programs out there that crash 'randomly' from an untested corner case, an off-by-one in a loop, an unchecked pointer.. something. Or the ones with that one particular feature that doesn't work. The menu that sometimes won't open. The help that has a missing page. The plugin finder that doesn't. I'm sure we all have some programs in mind by now.

So I got to thinking 'what makes a program good, then?' Well, here's my short list.

  • Functional. It should do what it says it does, and do it well. It shouldn't do anything unadvertised or unexpected. It should be optimized so that the most common tasks a user would want to do are the easiest to find and perform.
  • Secure. There should be bounds checks, asserts, validation of all untrusted input, encrypted I/O if it will use untrusted networks, and so on.
  • Efficient. It should be light on resources, small on disk, and fast. This is not unattainable. Many solid apps do all three, even while remaining secure and robust.
  • Solid. The program should be well-tested and handle errors gracefully if they do occur.

I think this is a pretty modest proposal, and I challenge all programmers (including myself) to try to live up to it. Some do already, and they deserve a round of applause. For the rest of us, it's something to strive for.