I may be awake, but I haven't booted yet.

Stealth Bombers are more difficult to operate than Tricycles BECAUSE THEY CAN FLY!

Date/Time Permalink: 04/27/06 11:50:22 am
Category: General

If there were a concept that I would peg as "The Most Important Thing To Know About Computers" - it would be the lesson I'm going to lay down in this essay. Hereforeward, count yourself as one whom is enlightened, because after you've digested this concept, you will forever know the Big Secret that few are privy to.

Day after day, the cry of the befuddled computer user is heard: "I like program X better than program Y because it's easier to use." "I'm looking to switch to Linux - which one is the easiest to use?" "I want to learn programming; which programming language is the easiest to use?"

In a nutshell, "ease of use" is a complete illusion. Yes, really! It's the same as asking which kind of apple tastes the most like an orange.

But there is a valid concept - "ease of task". Yes, certainly, a given task can be easier than another. Playing Tetris is certainly easier than writing a device driver in assembly. Taking a nap is easier than rolling a boulder uphill. Making toast is easier than baking a Thanksgiving dinner with complete trimmings.

So, which one is easier to use? A toaster or an oven?

Nope, that's a trick question! If you answered "toaster", I'd ask you if you could fit a turkey into a toaster. If you answered "oven", I'd point out that an oven is a very inefficient thing to use to make toast!

The false idea that there exists "easier to use" programs is the thing that cripples minds the most in a computer user. It makes people ask for a program with the power of a Stealth Bomber and the interface of a Tricycle. People simply do not get the connection between interface and function.

If "easy to use" were the only desirable criteria, then we would all be wearing diapers, because a diaper's interface is easier to use than a toilet's. Everybody would stick to masturbation, because it's easier than sex. Everybody would be on welfare because it's easier to collect a check from the government than it is to go find a job. The downside of sticking to "easy to use" is that you're broke all the time, you're always alone, and you smell bad!

For some people, that's good enough. And that's OK! When it comes to computers, some people want only to surf the web, message, and play games. There's nothing wrong with that. Here is a tricycle, it should be excellent to peddle around the block; go have fun!

But what if you surf the web and get a bunch of spyware? What if you open an email and get a virus? What if your game crashes? It makes you want better technology, doesn't it? And see, there's nothing wrong with that, either. But with the advanced features of that advanced technology is going to come an advanced interface. Don't expect one button to do it all.

The idea that "ease of use" is the sole difference between one software product and another is not only useless, but damaging as well. It perpetuates this fallacy of the "technology elitist" which is the idea is that the only reason computers are hard is because some sadistic hacker sat down cackling with malign mirth to *deliberately* *made* *them* *hard*!

Which is an embarrassingly silly notion, if you stop to think about it: Who would the programmer have in mind to use this? After all, software designers have to use computers, too, even if only to design software for them. You might be thinking "Well, they give us the crappy interfaces and keep the good ones for themselves." No, as a matter of fact, a glance at the desktop of any programmer on any given day will in fact show all the stuff that people consider *hardest* to use: command lines, text editors, object-oriented IDEs, debuggers. They tend to eschew GUIs in favor of typing interfaces, since after all you *WRITE* a program, not *gesture* one.

A real-life example: In posting my wallpapers to my new gallery (which I wrote myself, because it was *simpler* in *function* than the *more* *sophisticated* Coppermine gallery I had been using), I have a back-up folder with all my images on my own machine and the gallery modules posted, which I decided should be 25 thumbnails per page. After the dust had cleared from the transition, I discovered that I had 13 gallery modules up (13*25=325) but typing "ls | wc -l" (a quick way to tell me how many files are in a directory) told me there were 350 in my backup folder. The error was easy to see: in building the gallery modules, I had inadvertently overwritten one of them.

Now, this is the same kind of clerical mistake that I'm sure we have all made at one time or another, but the problem was now, how to tell which of the 350 images didn't make it? In the GUI-only world, my only option would have been to view each page separately and check them one at a time. That would have been an all-day chore, with plenty of opportunities for further mistakes. Luckily, I use "hard to use" programs, so my solution was simply:

(1) use "lynx -dump" to download the HTML source of all 13 modules and save them to a file.

(2) use "grep .jpg" to sort out only lines containing names of the pictures posted. Pipe all that into a file.

(3) use "sed" to strip all the HTML formatting from around each filename, so that I was only left with a list of the image file names.

(4) use "sort" to sort the list, then also pipe the output of the "ls" command run on my image directory. Now I had two records, one of what I had, and one of what was posted online, sorted in order.

(5) use "comm -3" to compare the two lists and print out only the lines that were unique to one file. Sure enough, 25 filenames popped up!

I could then write a Bash loop to pull each of the filenames (I piped the 25 filenames to a new file, of course!) from the missing list back into my processing directory, and make the missing module from them.

I was done in 20 minutes!

Now, in an "easy to use" program, where, exactly, would have been the button or menu item that would have done all that for me?

This is the kind of point that you see being missed every single day on the Internet:

"Ubuntu is easier to use than Slackware." No, it isn't. Ubuntu is designed for the "read-only user", but it would be miserable to hack in. Slackware is a "programmer's distro", but a low-function computer user would rightly find it "too hard" - of course, Slackware can do everything Ubuntu can (yes, it has package management, too!), but a whole lot more - and that "whole lot more" gets in your way when you only know how to (and only want to) net-surf and play games!

"BASIC is easier to use than C" Bull. BASIC is good for writing toy scripts. To write a BASIC interpreter, you have to use C. Similarly, C would be over-kill when you only needed a two-line quickie. (So you would use Bash or Python, example.)

"GUIs are easier than terminals" Hey, if all you need to do is visit web pages, GUIs are your ticket! If you need to do any kind of real work, you're almost always better off in a terminal.

"Program X is harder to use than Program Y" -no, not even correct in small, insignificant ways or special cases. Sit down and count each, individual function of each program. How many things can program X do? How many things can program Y do? How many buttons/commands/menu items does program X have? How many of each in program Y? Make a ratio of these two numbers - if the two ratios aren't within one percent of each other, you have forgotten to count a few functions in one of the programs - probably things that you've never used, and hence don't miss. "But there are design flaws in some -" - all design flaws
are insignificant in this equation, as the difference between whether you push a button or select a menu or type a command matter much less than whether the function called in this manner exists in the first place.

"Which programming language is easiest to learn?" All of them. Once you've mastered more than half a dozen programming languages, you'll notice that there's really little difference in their syntax. To print, you say "PRINT" in BASIC, "print" in python, "echo" in Bash and PHP, "printf" in C, "cout" in C++ (logical when you consider that C++ is referring to printing as 'output'), "princ" in Lisp... All languages that are designed "Turing complete" have functions related to input, output, fixed-iterative loops, conditionally-iterative loops, conditionals, data storage and manipulation, and a comment syntax or two. The rest is extended libraries and sugar-coating.

So where's the *harm* in "making things easy"? Well, you might have heard of "brain-damage" when people refer to such languages as BASIC, COBOL, and PASCAL, right? These were all languages "designed to make it easy" - which is just another way of saying "everybody else is rotten; you can only trust us!" Strangely, these languages have fallen mostly out of use. But here, why don't we take a simpler example?

I've decided that the alphabet is too hard to learn. We need a simpler alphabet that's easier to use. I know, I'll make my new alphabet have only six letters, and they'll have funny names in upper-case letters so they're easy to remember: FOOLY, BUHBOO, ZOOMBA, DINGUM, WUGGA, and QUACK. Here, I'll spell a new word using my new alphabet: "DINGUM-WUGGA-BUHBOO-QUACK". Now, you see how easy that was? Why, you've learned it already!!! That *PROVES* that my way is better!!! What's that you say, it isn't useful for a damn thing? Mere detail. I already have your money after you bought it because you found it easy in it's first five minutes of use. No refunds, sucker!

You still want to know the easiest programming language? Binary! Binary is fast to learn (only two commands, "0" and "1"!), most convenient to use (no compiler or interpreter, just 'rite 'n' run'!), most portable (every computer understands binary!), and most functional (everything that a computer can do can be expressed in binary!). No extended libraries or fancy GUIs required.

You still want to know the easiest computer programs? Well, I suppose you could simply erase your entire hard drive and turn the computer off. Then you will have...nothing! Ah, sweet nothing! The most incredibly easiest thing of all.


AFTERWARD: The main reaction I get when I show this to people is "hogwash!" People absolutely refuse to accept that there's any connection between interface and function whatsoever. I'm getting the idea that there are just Flat Earthers out there, and they may either understand the basic facts of the universe or be damned to ignorance. Well, this is the article I point people to, mainly to judge from their reaction whether it's worth trying to teach them anything else. I am the Carl Sagan of computer science on this issue, and I don't even have the skills of Carl Sagan to help me.

I have closed comments on this subject deliberately, the only time I have done so on this blog. There is neither room to argue with the facts of this entry nor anything to add. They are simple laws of nature. They are also self-evident to anybody with common sense, even if there were no such invention as computers.

You may see this article as the opposite of Donald A. Norman's "The Design of Everyday Things" (a book which was brought to my attention by a reader of this article). His view, of course, is the more popular one of blaming the designer: "The fault lies in product design that ignores the needs of users and the principles of cognitive psychology." The cover shows a teapot with the spout on the same side as the handle, so that if you try to get tea out of it, you burn yourself. Yes, if you want to go through life bitter and angry at your helpless fate in the hands of deliberately assinine designers who are all plotting against you and nothing is ever your fault because you were still new at it or hadn't learned enough yet, then this is the book for you. The reader is welcome to make up their mind who is right.

UPDATE: 9/29/06 I read "Ease of Use Shouldn't Neuter Products". And then I fainted. After years of being the lone raving loony on this topic, I finally get a back-up. I especially love the graphic with the German Shepherd and the plastic doggie pulltoy - not as clear as my Stealth Bomber and Tricycle, but hell, it works!

Follow me on Twitter for an update every time this blog gets a post.
Stumble it Reddit this share on Facebook

suddenly the moon