Update, Apr 2006: This seems to have recently attracted some attention. There is one common misconception I'd like to correct: The use of the term "sucking" is a reaction to the article linked in the first paragraph. This is specifically a reaction to the last paragraph:
It's easy to operate a car or a house without being a mechanic or a carpenter, even though it helps to have those skills. Can't the same be true for PCs? Will it be? How?
Some people have interpreted this article as a claim software will never be easy to use, ever, or that it's not getting better. Those are both obviously false. This article simply makes the claim that if you want to take full advantage of a computer, you're going to need to know things. Basically, the problem is you can never package up the infinite things that somebody may want to do into an "easy-to-use" interface; the two things are in fundamental conflict. (If you want to get technical, this is only true once you reach the Pareto optimality frontier for ease-of-use vs. features, but part of my point is that this is not hard to do.)
The canonical example of this today, which wasn't available to me in 2000 when I wrote this, are the specialized versions of graphics programs usually shipped with digital cameras for certain popular photo manipulations. On the one hand, they provide a great interface for removing red-eye or turning a picture black and white. On the other hand, no matter how hard the programmers work, they can't jam the full capabilities of Photoshop into such an interface, and leave it usable. (And while the Photoshop offering does have a lot of surprising capabilities if you poke it right, those capabilities were in my experience even harder to use than in Photoshop, because you weren't really "supposed" to get at them.)
I wouldn't write this article this way today, with another six years of writing development under my belt, but I've got work to do and in some ways I feel it's not fair to re-write the historical record, so, original article after the line:
OK, I can't resist, the events of the last few days in my personal life (setting up computers for a few people) have forced me to comment on this. A few days ago, Doc Searls said on his weblog,
It's easy to operate a car or a house without being a mechanic or a carpenter, even though it helps to have those skills. Can't the same be true for PCs? Will it be? How?
I think there are two things wrong with this view: One, we're not looking at the right aspect of the metaphor, and two, it's not really the right metaphor.
People often say that computers are just another tool, and using computers should be as easy as using a car without being a mechanic. Well, using computers for what? For all the complexity that goes into building a modern car, it is conceptually quite simple. It gets you from point A to point B. As tools go, it's very one-dimensional and doesn't involve much skill; you can learn to drive in a couple of weekend courses at your local high school, after all!
Compare this to a lathe, where you can spend years ferretting out the intricacies of what can be done, how to do it better, faster, and with fewer mistakes. How do you make a lathe easy to use for someone like me, who has never touched one? To put it bluntly, you can't. It's a fundamentally complicated device. It requires learning and effort to master.
What does this have with computers? Well, I submit to you that we've already achieved the ease of use of an automobile. With a couple of weekend courses worth of training, you can get on AOL and do quite a bit, including sending mail, searching the web, and with another hour or two, you can be running your own website with Manila or a similar product.
I think the real problem is that we're using the wrong metaphor. The question "Why can't using a computer without understanding it be as easy as using a car without understanding it?" may sound reasonable, but it's predicated on a fundamentally false assumption: That computers are like cars, simple and one-dimensional in capability. A more proper question would be this: "Why can't using a computer without understanding it be as simple as using writing without understanding it?"
Learning to read is a lengthy affair, but without it, you are intellectually crippled. We have accomodations for those who do not read (or do not read our language), such as symbols for men and women on public bathrooms, but nobody would claim that if you can just understand those symbols, the full range of reading experiences should be or are available. You must learn to read. There is no way to experience the full range of reading experiences without it.
English sucks. You have to spend years in school learning to read, learning to spell, and then you have to learn to write. Writing well is so hard that most people just skip it, doing just well enough to pass whatever classes they are forced to take. If you want to do anything that has to do with English beyond recognizing which bathroom you belong in, there's no shortcut, and never will be. English will never stop sucking.
I think much of this "software should be easy to use" stuff really means "software should not require the user to learn anything". What else in life works like this? Notice there's a direct correlation between "ease of use" (the "measuring stick" of software) and lack of power. Game consoles are easy to use... but they only play games. A fire pit is fairly easy to use, but it only burns things. It's impossible to make something both powerful and "easy to use" (i.e., hard to screw up). Cooking with an oven is more complicated then burning things in a fire pit, no matter how much you simplify the oven. Personal computers play games, but because they are designed to do a lot of things, it's never as easy as "Insert disk. Turn on power."
It is impossible to both expose the power to do umpteen millions of things that the programmer did not directryly anticipate and make it possible to just pick up and use. Fundamentally, even the act of selecting from among the millions of possibilities is going to be a task requiring training.
Software sucks. It takes time to learn, it takes time to learn to use well, and it takes more time to understand how to connect multiple tools to do something complicated. Granted, there's definate room for improvement in software as it now stands: better installs, better uninstalls, fewer silly hangups, better abilities to work together, better abilities to grow with the user instead of confining them. But if you want to move beyond the equivalent of wordless symbols that allow you to "Read Mail" and "Send Mail", you are going to need to actually learn something, or just deal with the fact that some capabilities will not be available to you unless someone pre-packages exactly what you need, which doesn't happen very often. There is a fundamental ratio of power/ease of use, beyond which we can never pass. Software will improve, but software will never completely stop sucking.