Bruce Byfield's blog

Fear and loathing at the command line

Long ago, I lost any queasiness about the command line. I’m not one of those who think it’s the only way to interact with their computers, but it’s a rare day that I don’t use it three or four times on my GNU/Linux system. No big deal – it’s just the easiest way to do some administration tasks. Yet I’m very much aware that my nonchalance is a minority reaction. To average users, the suggestion that they use the command line – or the shell, or the terminal, or whatever else you want to call it — is only slightly less welcome than the suggestion that they go out and deliberately contract AIDS. It’s a reaction that seems compounded of equal parts fear of the unknown, poor previous experiences, a terror of the arcane, and a wish for instant gratification.

Those of us who regularly try two or three operating systems every month can easily forget how habit-bound most computer users are. The early days of the personal computers, when users were explorers of new territory, are long gone. Now, the permanent settlers have moved in. The average computer user is no longer interested in exploration, but in getting their daily tasks done with as little effort as possible. For many, changing word processors is a large step, let alone changing interfaces. And both Windows and OS X encourage this over-cautious clinging to the familiar by hiding the command line away and promoting the idea that everything you need to do you can do from the desktop. The truth, of course, is that you can almost always do less from a desktop application than its command line equivalent, but the average user has no experience that would help them understand that.

Moreover, those who have taken the step of entering cmd into the Run command on the Windows menu have not found the experience a pleasant one. DOS, which remains the command line that is most familiar to people, is an extremely poor example of its kind. Unlike BASH, the most common GNU/Linux command line, DOS has only a limited set of commands and options. It has no history that lasts between sessions. Even the act of navigating from one directory to the next is complicated by the fact that it views each partition and drive as a separate entity, rather than as part of a general structure. Add such shortcomings to the ugly, mostly unconfigurable window allotted to DOS in recent versions of windows, and it’s no wonder that DOS causes something close to post-traumatic stress syndrome in average users. And, not having seen a better command line interface, most people naturally assume that BASH or any other alternative is just as stressful.

Yet I sometimes wonder if the main reason for nervousness about the command line isn’t that it’s seen as the area of the expert. In recent years, many people’s experience of the command line is of a sysadmin coming to their workstation, opening a previously unsuspected window, and solving problems by typing something too fast for them to see from the corner into which they’ve edged. From these encounters, many people seem to have taken away the idea that the command line is powerful and efficient. That, to their minds, makes it dangerous – certainly far too dangerous for them to dare trying it (assuming they could find the icon for it by themselves).

And in a sense, of course, they’re right. In GNU/Linux, a command line remains the only interface that gives complete access to a system. Nor are the man or info pages much help; they are often cryptically concise, and some of the man pages must have come down to us almost unchanged from the 1960s.

The fact that they are also wrong is beside the point. Many users aren’t clear on the concept of root accounts, file permissions, or any of the other safeguards that help to minimize the trouble uninformed users can blunder into.

The trouble is, understanding these safeguards takes time, and investing time in learning is something that fits poorly with our demand for instant gratification. By contrast, using a mouse to select from menus and dialogs is something that people can pick up in a matter of minutes. Just as importantly, the eye-candy provided by desktops makes them look sophisticated and advanced. Surely these signs of modishness must be preferable to the starkness of the command line? From this attitude, insisting on the usefulness of the command line is an anachronism, like insisting on driving a Model T when you could have a Lexus.

The truth is, learning the command line is like learning to touch-type: in return for enduring the slowness and repetitiousness of learning, you gain expertise and efficiency. By contrast, using a graphical desktop is like two-fingered typing: you can learn it quickly, but you don’t progress very fast or far. To someone interested in results, the superiority of the command line seems obvious, but, when instant gratification and fashion is your priority, the desktop’s superiority seems equally obvious.

And guess which one our culture (to say nothing of proprietary software) teaches us to value? As a colleague used to say, people like to view computers as an appliance, not as something they have to sit down and learn about. And, what’s more the distinction only becomes apparent to most people after they start to know their way around the command line.

Whatever the reasons, fear and loathing of the command line is so strong that the claim that GNU/Linux still requires its frequent use is enough to convince many people to stick with their current operating system. The claim is no longer true, but you can’t expect people to understand that when the claim plays on so many of their basic fears about computing.

23 Responses

Strangely I’ve been wondering if we may be on the verge of a command line renaissance.

Not in the sense you are writing about but a command line none the less. Applications like Spotlight and QuickSilver on the Mac and Vista’s search features are giving users a safe, ‘graphical command line’. Clearly these aren’t as functional as BASH but they do demonstrate the speed and some of the advantages of a command line over traditional GUI designs.

When I was younger, it seemed to me that computer interfaces had evolved *from* the command line *to* the GUI. As a kid in the ’80s, I was blown away by the new Macs and saw them as being the future. It felt like a backward step to me in the ’90s when I switched to Windows and had to deal with DOS occasionally. It did bug me, though, that to achieve some quite basic tasks (eg. find all duplicate files; mass-renaming of files etc.) I would have to download various limited-function GUI shareware utilities.

Then I started experimenting with Linux and was initially frustrated at how much I had to use a command line. But eventually, I learned a few of the key commands and discovered how powerful BASH really is and how much I could do. Suddenly, it was so much easier to find, search, manipulate, move, rename, convert, encode, decode, transcode, download, upload, compress, decompress and read files, one or thousand at a time. In the end, I found I had evolved from preferring the GUI to preferring the command line.

interesting… i must agree command line definitely can get things done easier and more powerful. however, i believe there must be segregation of computer users to a variety of level. a business user has his own business processes to do. and that’s why you see excel being the application of choice. you probably don’t see a business user crunching their data in the terminal, do you? but for someone who needs to work more in detail with the system, command line seems more logical, no?

It is nothing but a phobia – no more logical than any other hysterical fear of harmless phenomena.

“I don’t use command lines.”, says Average User, typing into the (command line) chat box before returning to his web browser where he types in the (command line) URL to go to Google and type in the (command line) search box to go find blogs that hate the command line like he does. Later he will answer his (command line) email and perhaps respond to a post like yours in the (command line) comment box.

Every time we use a keyboard/keypad on a digital device, we are using a command line. They’re disguised with the trappings of a GUI, though, so they think it’s not the same thing. If they could see the POST and GET strings flying around in the background at their every action, they’d faint dead away.

I take exception to your comment on man pages, “… Nor are the man or info pages much help; they are often cryptically concise, and some of the man pages must have come down to us almost unchanged from the 1960s.”

Man pages are not tutorials (info pages sometimes appear to be, but usually fall short), they are explicit descriptions of programs or APIs and their arguments–the man pages that define APIs are exceptional. If that information has not changed since the original program or library was written in the 70’s, there is no reason for the man page to be updated.

It is expected that you have learned from other sources why and how to use the programs. When that point on the learning curve has been achieved, rather than having to hunt down a book to find the correct syntax or return values, we have a single source of program/API specific help.

The only complaint I have ever had about man pages is their organization. It would be helpful if they were grouped into categories, such as filesystem, networking, useradmin, etc. instead of man1, man2, etc. While I have never cared for apropo, I have found something like:

@Mossie`Ol Chin
“you probably don’t see a business user crunching their data in the terminal, do you?”

YES. Our organization use to do all of our monthly reports in Excel. It took nearly two weeks to compile, aggregate, format and print all of them. We now do everything from a BASH script. It’s scheduled as a Cron job that executes during the night when our offices are closed, takes about 15min. to run, and all of the reports are sitting on the printer when we open.

Having learned DOS in the early 90’s, I was given a Unix account in 1993,
rapidly discovered how much more powerful and easy to use the shell was by
comparison with the DOS command line, and was instantly addicted. I still am.

Many of the best programs available for Linux and Unix offer greater power,
efficiency, flexibility and choice in exchange for the responsibility, on the
user’s part, to learn how to use them properly. As an author whose name I’ve
forgotten put it, if anyone were to invent a user interface as powerful as
that of Vi, but without requiring the investment in learning, this would be a
major advance in user interface design. So far, this hasn’t happened, and
there’s nothing like it on the horizon either. My intuition is that this is
probably a necessary trade-off, and the Linux/Unix tradition is one of the few
places in which one has a choice to take the higher road – the shell and its
utilities, Emacs or Vi, TeX/LaTeX instead of a word processor, editing
configuration files instead of pointing and grunting, etc. Were it not that
way, I think Linux would lose a significant portion of its users, not to
mention its developers.

I also think it would be valuable if more people were to appreciate the
possibilities. This will require education and encouragement, and as you
suggest, it runs contrary to much of what proprietary interests demand, in
emphasizing ease of learning over everything else – as though learning is
difficult and to be resisted whenever possible – hardly the message that
encourages an informed, literate and thoughtful culture of the kind we need to
confront present and future challenges.

This has actually caused friction between my co-workers and me, because having entered the business in the early nineties, I have no concept of someone who claims to be a computer professional who works primarily in GUI’s. It irritates them even more that I can have five commands entered at the prompt before a typical bloated Windows utility even gets initialized. They get unhappy when I show them how to do something, but it’s all at a command line: I have to translate into GUI if I’m writing them instructions. The pernicious side effect is that they don’t learn how to write batch files. They’ll tell me they “couldn’t” do something, when it was entirely possible, it was just cumbersome or impossible with their GUI-based tools.

I try to remember that keyboards and CRT’s were innovations not so long ago and there’s someone out there who thought I wasn’t a real professional for needing them then.

I could not do my job without the command line. It’s the most important part really. I need the tools that I’ve used so much. The GUI is ok for people that just want to browse the intarweb or write letters, but I really need things like route, netstat, ping, traceroute, perl etc.

I wish to make a more general comment than specific one on this subject. In the very early days of the automobile an owner/driver had to be a master mechanic and know all about the inner workings of the automobile to keep it running and performing its task. Gradually, those requirements were engineered out of the automobile so that, now, an ordinary person with only ordinary training and some small amount of experience can utilize an automobile. I think it is WAYYYYY past time for the computer industry to follow the lead of the automobile industry and produce hardware and software that doesn’t require the equivalent of “master mechanic” to utilize. For the vast majority of us, a computer is simply a tool to assist us in our lives, and is not what our life revolves around. Let’s throw command lines, configuration specifications, and all such out the window and just make a computer to work. “User friendly” and “backward compatible” needs to return to our vocabularies!!!!

Oh, for Pete’s sake. The desktop isn’t considered more useful by a large number of people because of “instant gratification and fashion.” It’s because a desktop allows you to use more cortical skills in interacting with a computer. One can remember how to do something by where it is, or what it looks like, or what color it is, or by hierarchical menus. There is virtually NO context when you type in a command line interface, which makes it inherently far more difficult to learn for people with global processing tendencies.

I’m a mathematician–you’d think I could manage analytical processing. But all the tutorials I run across either assume more knowledge than I have of computing, or have so many commands to learn before anything I would ever want to DO shows up that it’s difficult to see how the CLI is anything better than knowing all the metakey-LETTER combinations that you’d use… well, working from the desktop.

The “instant gratification and fashion” apply to the reason why people reject learning the command line: it takes time, and they just want to accomplish what they have to.

I think the argument isn’t that using the desktop is somehow bad, but that people seem to reject using the command line even when it makes more sense. This is very true of computer professionals as well.

If I’m looking for something on the LAN, running Windows, I don’t bother finding and clicking “My network places”, then “Entire Network”, then “Windows network”, then wait, then find and click the appropriate domain, then wait, then search for the correct server, and only then be able to double-click the server and see which shares are available.

Instead, I hit the “Windows” key, then Run (or the shortcut to the above, Windows key + R), then start typing in the name of the server I’m looking for. Typically, Windows start searching for matches, and long before I finish typing the server name, it’s presenting it as a possible match. Between the auto-complete offered by the “Run” dialog and my own knowledge of what I’m looking for, I can find what I’m looking for usually by the time a GUI-only user is looking for the correct domain to click.

And this is in Windows, which doesn’t have a decent command line. But you take advantage of what you have.

So why don’t more people do this? Primarily, because it LOOKS like it’s harder.

Of course, probably the main reason to learn the command line is that it’s a short step from there to being able to write a script to accomplish the same goal, which you or someone else can just run, or create as an icon that just requires a double-click to execute in the future.

And I couldn’t agree more. But, then, I also don’t watch television, I shout at the radio from time to time (okay, all the time), and I’d rather ride my bike than drive–and I’m a sysadmin by trade: It is a losing battle; and all an ‘alt’ type can ever hope for is a few allies in the world. And few converts.

I personally would not expect the average user to get their hands dirty, so to speak. But, sadly, this aversion to adventure, or fear of the unknown, or whatever, exists even among those whom you’d expect should be masters. The masters come from this culture, after all. So, we see sysadmins who make a good show of knowing a thing or two, but it turns out they only know how to read a manual (handed to them by the supervisor), click through some menus and reboot! Oh, well. Job security, I guess.

I understand the fear of the command line, but the way I found to overcome it, is to have a problem and discover (to your delight) that the man pages have a quick resolution for you that you won’t find in the GUI. (Yup, the learning curve is steep!) Then, you develop a thirst to learn more because you’ve discovered the impressive power of the CLI. It’ll save your butt. But then, I’m the curious, exploring type who (like some mentioned above) installs various LInux distros just to see what they have to offer and have fun. No, I’m not any kind of guru! Maybe it all boils down to curiousity and having a desire to learn because it’s fun and rewarding (for some).

As someone who is now retired, & have come to PCs late in life, I HAVE seen DOS, but not used it familiarly, though can find directories & IP addresses
My problem with the command line is fairly well highlighted by the nature of the defenders of it, PLEASE allow for the fact that people do NOT publish a quicklist of useful commands, and a concise explanation of what it does – simple as that, really
I like the mathematician’s answer, and relate to it, as I don’t know Windows shortcuts, let alone bash ones
So, to get more converts – publish good, everyday, working examples, please
Jinklebert

“Instant gratification?” Bullshit. I learned to use the command line out of necessity and even though I do things with it that I couldn’t otherwise I still hate it. I need to be able to read in order to remember and the command line has no words, only strings of letters separated in what still (ten years of practice later) seem like arbitrary bits of other stuff. It is totally unintuitive and while I have learned an entire new language (Mandarin) in the last ten years I still can’t remember what commands do what in the command line. I have to keep a file folder full of them.

To me the command line makes even less sense than the latest new text messaging thing – those at least you can try to pronounce to figure out what they are. The command line remains gibberish even though I use it every day.
I think the real rpoblem is that all of the commands were designed by people who can’t read english.

BELOW are some excerpts from “Why Windows Cause Stupidity”:
“Using computers” isn’t something you learn and do; it’s something you learn and learn more. It’s NOT an item, it’s a FIELD.

Computers are not appliances:
A specific-purpose computer( i.e., a computing appliance/device ) has a specific (and small) set of possible inputs, and a specific (and small) set of possible outputs. A general-purpose computer( i.e., a desktop/laptop computer ) has an enormous (practically infinite) set of possible inputs and a similarly-sized set of possible outputs. Anything can be manipulated in an almost endless number of ways. You CAN’T make that trivial, and the harder you try, the more you succeed in doing nothing but destroying the very power and flexibility that brought you to computers in the first place.

Computers Are Hard:
Accept it. Move on. Your life will be much simpler.

Accept that it’ll take work. Accept that it’ll take learning. Accept that it’ll take trial and error. Accept that it’ll mean just accepting things without understanding why until further down the road. …

Bullshit. Using a graphical interface isn’t like typing with 2 fingers, who the hell are you kidding?
Businesses would use the command line in two seconds if it would save them a dime, the reason they don’t do it isn’t for “instant gratification” it’s because it’s . Just. More. Efficient. There’s no cryptic puzzle to solve here.
The command line doesn’t help with accounting, writing a legal paper, listening to music, watching movies, or hell, even programming most of the time.
The command line is necessary and useful a tiny fraction of the time and yet Linux decides to shove it down your throat two fistfuls at a time from the moment you boot the damn thing up.

I don’t mind Linux, it has its uses, but the condescending bullshittery that you get from the hardcore Linux users is rivaled only by Apple fanboys. If you’d pull your head out of your ass you’d understand why Linux isn’t used by 90%+ of the population; Because it’s a fucking pain in the ass for the average users and provides nothing in return for putting up with that pain in the ass unless you want to do something that is both obscure and pointless.

Your post makes pretty clear that you know very little about the command line, and even less about Linux. I suspect that on some level you realize your limits, or you wouldn’t make such efforts to be emphatic.