Smartass Software

"The trouble with computers is that they do what you tell them, not what you want." -- D. Cohen

This lovely little quote is quite brilliant: It immediately strikes the hearts of every single computer user. "This is so true..."

But then, I'm brilliant too. I really am. And in fact I'm going to prove it right now: I'll pour some of my genius into making the statement even more brilliant, by means of an addendum:

The trouble with the previous statement is that many people attempt to remedy it.

Eh? What is that supposed to mean?!

(See? That immediately strikes your heart as well! ;-) )

But let's start at the beginning. Computers being able to perform extremely complex and varied tasks, we intuitively assume they must be pretty intelligent. And yet they are so immensly dumb. We have to explain what we expect in every detail -- things that often seem so obvious. This discrepancy is very annoying.

So, can computers -- or actually programs running on them -- be made smarter? This seems a rather logical conclusion: If programs are so annoying because of their dumbness, wouldn't they get more useful if they get smarter? Shouldn't we try our best to make them so?

The answer to that question is quite clear, and if you think you can guess it, you are probably wrong. The clear answer is "no". (Beware of conclusions that strongly suggest themself, and yet are totally wrong :-) )

The truth is that their apperent stupidity is actually one of the major strenghts of computers: The fact that they are perfectly deterministic; that -- if you understand the interface -- you always know exactly what effect a command will have.

It is annoying to have a dumb interface, which requires a lot of repetitive work every time you perform some command. But it's even more annoying to have a "smart" interface, which tries to guess the user's wishes: The problem being that inevitably it will sometimes guess wrong. "Nobody is perfect."

The smarter the software gets -- the more it tries to guess the user's wishes -- the less predictable it gets; the harder to control; the more frustrating. It can save a considerable amount of tedious repetitive actions, but the price is high: While the repetitive actions, being repetitive (am I repeating myself?...), will soon go almost unnoticed, the loss of predictability in "smart" software means that you have always to check whether it's doing what you want; you always have to think about it -- it always takes part of your attention. Not really a net win.

The "T9" text entry system for mobile phones is a typical example: The traditional way, where you have to press the keys the right number of times to get the desired letter, requires a lot more key presses in total -- but it's perfectly deterministic; you can even type blindly. (Really -- I do that sometimes. And I'm not saying that because I want to appear cool... Well, at least not only because of that :-) )

With T9 on the other hand, you have to check every word (except of course for the most common ones, which you know by heart); you have to loop on the feedback, sometimes multiple times, until you get the desired result. (Well, unless -- like many people tend to do -- you skip that part, and send messages that will pose a challenge to a cryptoanalyst, or else could pass for some form of modern art...)

It gets even more wretched when you want to type some word the T9 software doesn't yet know: You have to go back, change the mode, and type it again from the beginnig using the traditional way.

Or you can engage in some absurd manoeuvres, to trick it into giving the desired results: I have seen people try typing a similar but different word which T9 happens to know about, and then go back and fix it into the one they actually wanted to type. Or writing the individual constituents of a long word seperately, and then going back to join them together. (You must know, the German language has this interesting property that you can name pretty much anything with a single word, by connecting several other words into one. Just like Lego -- except that it blows up in your face if you don't follow the man page. Which reminds me of a toaster...)

I had some other good examples on my mind, but unfortunately I forgot them. I know that's a lame excuse, but it has a substantial advantage over any number of brilliant other excuses I could come up with: This one is true! I had to postpone finishing this post for more than a week, and that was admirably effective in making me totally forget what other example I wanted to present. I suck. Here it is, now I've said it. Are you satisfied? :-)

In consequence of this personal failure, finding other examples is conveniently left as an exercise for the reader. But then, I trust you are all smart people; one mind-bogglingly great example surely does suffice to convince you of the ultimate truth? :-)

A while back I wrote about DeepaMehta. While chiefly dwelling on the object navigation mechanism that forms the heart of DeepaMehta, I mentioned that there are some other ideas I like about it. One of them is considering the computer as a tool that is employed by the user to perform his work more effectively, rather than a cheap "assistent" that tries to do his work for him. (And -- like anything that is too cheap -- most likely falls short of any satisfying result...)

Now does this mean that everyone has to be content with dumb interfaces that require us to do a lot of tedious repetitive work? Certainly not -- we should do anything in our power to cut down on such redundancy: Streamlining the interface, providing shortcuts etc. -- anything that reduces the number of key presses and/or mouse clicks necessary to perform frequent tasks; yet always doing exactly what the user asks for, rather than trying to guess his wishes. That's the way to enlightement. See you on the other side ;-)