The Command Line

So as I was confronted with “you should learn to use the command line” again, here’s my opinion on this invention. The command line is the prompt where you can type in commands and those get executed by the operating system. It what Linux people need to use a lot, Mac people had to resort to when nothing else worked and Windows people didn’t need to use ever – as the command line never was very powerful on Windows.

bokeh Command
In my opinion this is also what directly impacts the platforms distribution. Windows 85%+, Linux 1% and the rest is Mac. But why should the distribution of a platform be directly connected with the platforms use of the command line? The first barriers seem to be easy to overcome.

First, you need to be able to type and grasp some basic concepts, like the way the file system is laid out, which types of other stuff in the operating system is mapped into the file system, and basic usage principles. This alone is enough reason most users won’t bother with this ever. Typing is strictly not what most users want to do, they want to surf the web, listen to music, watch movies and when typing is only needed for messenging or typing in profile information in Facebook.

Well, normal users stink anyways, you say, and as a programmer you should be comfortable with typing on a keyboard too. So let’s look at the positive aspects of the command line: it’s all just typing, you don’t need to take away your hands from the keyboard to use a mouse and thereby it’s all faster anyways and also, there are so many commands with so many fine grained parameters that you can do basically anything using the shell.

This is true, and I don’t want to argue with anyone here. Surprise! I don’t think the command line is inherently bad. Instead, I think it’s an expert system. If you have invested years and years learning commands, parameters and when to use which parameter and which parameter won’t work with another one. The leaning curve is steep. You’ll need to learn the use of every single command that you’ll need for every single of the the most trvial of actions. You’ll need to know that there is this command, and how to use it, you’ll need to learn with parameters do what and you’ll ask yourself who decided on the defaults parameters or the absense of them and you’ll read man pages over man pages for that.

So if you did that, congratulations, you have aquired a valuable skill. At least as long as there’s no good GUI based solution for that. But there’re more problems with only working in text mode:

You type, the program executes and you get output. The sequential cycle of this dance has no possibility to give you additional information while you type or while the program executes. When it dumps a lot of text on the screen, you scan it for what you need to know, and then you type and wait again. For a lot of problems this won’t matter at all. Sometimes it’s even faster, for example when you grep for a certain file you’re searching for. But in the shell, there’s no mouseover, no intuitive visual design that could give you clues what to do and how to do it, no spelling correction when you mistyped a character in the middle of a three line-wrapping command. Type and execute.

Don’t misunderstand me here: I wish I would be a master of the command line. As the myth of doing command line magic is what let’s us admire those who can. The basic thought in every person who needs to use the command line is always “damn, this is hard” and “it’s take forever till I get all this” and “I guess I have to learn all this stuff”. This makes us admire those who CAN do all the stuff and know all the commands even more.

But times are a’ changing. The first really well usable wide-spread operating system that you could accomplish pretty much everything with was Windows XP in 2003. In all other systems you always had to be mastering the command line to be able to do what you really wanted to do. It’s 8 years since, and a lot has changed. GUI programmers got better at what they’re doing and they’re giving ordinary users the power to use the computer. Windows 7 is a very nice OS, and MacOS gets better with every release.

To me, command line commands are a basic foundation that you can base an operating system on. But commands are badly designed by default, and therefore you should never have users be dependent on them. Never ever. And as it’s not 2003 anymore, you cannot expect power users to know or even aspire to know the command line anymore.

I can do work in the command line when I need to, but I’m always very slow at that and I’d always rather have a GUI based tool at hand, that shows me instantly what to do and how to do it instead of Googling and guessing – and for my part if something cannot be done conveniently without the command line in an OS, I think the OS is badly designed and needs work.

I’d rather stay clicking.

Creative Commons License photo credit: Robert S. Donovan

, Posted Sunday, March 6th, 2011 under Rant, Usability.


  1. Don’t blame the OS, when something can’t be done without the command line. That only means, that for this specific task nobody has afforded the work, to build a gui tool for that purpose. For instance, git and hg are not part of Mac OS X (yet?). At first there are only commands for the command line available, but if a tool is very handy, than someday someone will write a cool gui app for that purpose. This gui tool will perhaps even use the command line internally without exposing it to the user.

  2. Of course, your point. I’m just at the start of the learning curve, so I’m less positive about the whole thing. What I really meant is that you should never require users to use the command line – and having a repository set up is no standard user task of course.

    A side point: when computer brain interfaces finally make shell use via brain input possible, I’ll learn the command line too ;-)

  3. A few remarks:
    “Windows 85%+, Linux 1% and the rest is Mac” [citation needed]. Macs having 14% marketshare? I wanna see a source for that, the most optimistic estamation I have seen was 6% so far.

    “But commands are badly designed by default, and therefore you should never have users be dependent on them.” They are? Might just be because English is not your native language, but nobody designs their command line tool to be hard to use, they are not “badly designed by default”, they just have a different focus.

    The command line that people actually use (not some weird dos shell but something powerful) has a strong Unix background and yes, some tools might require some manpage/help page reading because they are powerful and configurable so it takes a while to understand how they work, but that is the same for GUI tools:

    Start Eclipse (or some other IDE you like). Can you automatically do everything with it? No, you gotta read help pages, you gotta figure things out, maybe test a few settings. No change to powerful command line tools.

    The difference between both UIs is that they can do different things well:
    Obviously GUIs can do manual graphics manipulation better than command lines. On the other hand the command line can do many file manipulation task a lot better than a GUI can (both just examples).

    One thing people that have been trained to click often forget is that the command line and its text-in and text-out interfaces (“pipes and filters”) allows easy and powerful automation and yes, you can hope that somebody builds a GUI for you to automate a simpel task, but if you know a little bit aout your shell, you just start making the computer do the work for you and not train yourself to click a certain pattern of buttons to get shit done.

    It’s just smart to have as many powerful tools at one’s disposal, so I think just discarding the command line cause its all “bad and hard to learn” is not really a smart move.

    Don’t get me wrong: I have to look up the manpage of many command line tools I use because there are just so many of them. But if I do something more than once (meaning I gotta look something up more than once) I automate it. And that works best in a shell.

  4. Hatebreeder says:

    Hmm, well. I do not need the command line very often, because I am just a user. May be with some more knowledge, not abilities, than other users, but nevertheless I really don’t like to use it. I have a pretty good feeling about how powerful it is and therefore I do not want to mess around. On the other hand, I just don’t want to call on my friends everytime I have a problem with my computer. So Akku has a point. You should not build a System for users which depends on active use of a tool as powerful as the command line and as complicated at the command line.

  5. Yeah, it’s just not intuitive. Picking Eclipse as an example is the perfect comparison in fact: it’s too complicated to use, and Eclipse has a boatload of features, that nearly nobody needs. But if you take a look at other GUI driven solutions, most at least try to be intuitively usable by a user the first time he sees the tool.

    What I really wanted to stress here is that there should always be a GUI solution for everything (that is not development-related – developers CAN always use the command line even if they don’t like it), because you can’t expect people nowadays to even bear the look of the command line anymore.

Leave a Reply