The GUI vs. The Command Line

When some computer users are asked to do something that does not involve using a GUI (Graphical User Interface), they think that what they are being asked to do is old fashioned. They might say something along the lines of:

This is like DOS. It is what people used before Windows came out. Why would I want to type all of these arcane commands? It looks like an obsolete technology that was probably invented before the mouse and is not easy to use. I cannot be productive with this.

People who say these types of things are only half right. I agree with them that they probably find it easier to use a GUI. However, I disagree with their notion that using a GUI is more advanced and that using the command line is obsolete. Instead I will argue that a GUI is less powerful than a command line and that for advanced users the command line is the superior interface. The implication of this conclusion is that as a user becomes more advanced he/she will use the command line more.

1. The Place of a GUI

GUIs have made computers easy to use for the masses. In the past the average person would think of a computer as boring and would probably prefer to watch TV. But as time progressed GUIs became nicer to look at and using a computer became more like watching TV.

You can probably relate this to your personal experience. For me, there had always been a computer in my house as I was growing up, but when I bought my own computer in 1995 I was thinking along the lines of: "My new computer is cool. I don't have to type those stupid commands anymore. This thing (Windows 95) is much more advanced".

When I started studying Computer Science at college I wasn't to crazy about having to use Unix at first. I wanted my pretty colors and pull down menus that slid out from the top and made "high-tech" noises (you can actually have such GUI features on Unixoid systems (KDE, GNOME, etc) but I didn't know that at the time). To me those features made the system seem much more advanced. I did end up learning enough Unix commands to get my homework done, but I viewed Unix as a legacy system that would soon be replaced. I was very interested in computers when I formed this opinion, but I didn't really know anything about them. The opinion I formed at that time was that of a person who liked computers but wasn't able to do anything advanced with them. Now that I know more I have a different opinion, but I am still able to relate to the people I meet who can't understand why I would prefer to use text based non-GUI software (such as bash and emacs).

GUIs have made computer usage more pleasant for the average user. If you accept that the average person should have a computer, then the GUI is a good thing. GUIs have their place, and I use them everyday for a lot of applications that most people would use them for: web browsing, editing graphics, windowing my applications, playing music, playing movies, etc. However, not every application should have a GUI and judging a piece of software on the basis of whether or not it has a GUI is wrong.

GUIs have their place, but they are only a subset of the computing world. If you want to become an advanced user you will have to learn to use more than a GUI.

2. The modern command line

It is not fair to compare your past experiences with the DOS prompt to bash or tcsh (the average Unix prompt). There is a lot to say about why the average Unix prompt is much more user friendly than the DOS prompt, but I will only raise the following points:

The bottom line is that you shouldn't use a bad past experience with DOS to justify not using the command line on a Unix system.

3. Efficiency

Some people are of the opinion that working with a command line will slow them down. This is true if you don't know how to use the command line, so I think that the average person would be more effective at dragging a picture of a folder from one picture of a disk to another in order to copy a file, than at trying to remember some strange command.

However for an advanced user who has to work with files all day the command line is much faster. I found that the less I use my mouse the faster I can work. The keyboard is still anyone's primary input device for a computer. It is a waste of time to stop typing and reach for a mouse. If you have to use a keyboard (and most people do) it is more efficient to do all your tasks with your keyboard.

When it comes to working with a computer that you don't have physical access to (a phenomenon that is appearing more and more in our networked world) it is much faster to have command line access to that computer, than it is to transmit the GUI over the network. It is easy to transmit the text of a command across a network, but if you want to transmit what happens as you move a mouse on one computer across the network to another computer, and then transmit what is supposed to be seen back to your monitor things will move very slowly. I see situations like this where I work often. Part of my job used to involve editing code on a remote Windows Servers. I have tried using rdesktop (it works well when you have to use GUI features of Windows) which tunnels the Windows GUI over the network, but I prefer to use SAMBA so that I can mount the Windows Directories remotely, and work on the files with the Unixoid commands I know. And once you learn the commands that have been created to edit text on a Unixoid system you will see that any tedious task can be automated using a set of reliable tiny tools, each of which does a specific job. All of this will make more sense if you understand the Unix Philosophy (the Software Tools article has examples of this idea too). As you learn to combine these tools you might find using a GUI for all of your tasks to be inefficient. However, learning how to use these tools might take a little time.

Documentation is also non-ambiguous when you have access to a command line. Even if the user doesn't know what the commands mean, there is less chance that:

cp -r /mnt/cdrom/your_folder ~

would be misunderstood by the computer. As opposed to "Double Click on the thing that looks like a CD. Now click on your folder and drag it to your home directory". The command above can also be communicated more quickly. The GUI answer to documentation of course is the "Screen Shot". Now things that could have been expressed succinctly in one nice statement require several JPEG files. Whenever you want to be precise about how a thing is to be done, a non-ambiguous language is always more efficient, provided that the language is understood. That brings me to my main point. If you want to be a serious computer user you should learn the language.

4. Language Vs. Vision

Computers use languages. They don't process in pictures natively. Every time you use a GUI, your collection of mouse clicks over a certain area are translated into commands. The commands that a GUI executes on your behalf are taken from a set of commands that someone else has put together for you, and assigned some sort of button to. Typically one element of a GUI corresponds to a set of commands being executed at a time. This can be very limiting. An analogy to this is to imagine you only had a small set of words to use to express yourself. You would obviously not be able to express yourself the way that someone else, who had a set of 26 letters and the knowledge of how to combine them to make any word, would be able to.

When you use a GUI you are using pre-defined statements from a language as opposed to knowing how to speak the language. You cannot learn a language by using a set of memorized phrases. It might work for getting a few services from a computer, but it is not as satisfying.

Some GUI designers (and I speak from personal experience) think along the lines of the following:

Giving users access to the commands gives the user too much power, so I am going to collect a set of commands that it is OK for them to use, and then put nice buttons over those commands, so that the user can only have those commands.

There is nothing wrong with the above, since the average user might not want to learn the commands and perhaps shouldn't have access to certain commands. However for an advanced user only having access to a GUI can be limiting. It depends on the user's goals.

It is easier to think in pictures than to learn a language, but a language is more powerful for doing computations and less ambiguous. To make an imperfect analogy, children prefer to have books with lots of pictures and few words. Literate adults however might find children's books less interesting and prefer books with more words and less pictures. Some children are also resistant to learning how to read since it does take effort. However, all people have a natural capacity for language and seem to prefer to use language when trying communicate serious matters.

A GUI can always be written to do some task, but it will always be written in a language, and will be more limited than the language it was written in. If you instead, learn the language directly, you will have the knowledge to be much more flexible than the GUI. This does not mean that everyone should learn every possible computer language, and command line tool, but it does refute the idea that a non-GUI system is no good.

If you want to be an average user, then please understand that a GUI does not necessarily mean "advanced". Understand instead that it can be a limitation. If you want to be an advanced user you should learn how to interact with your computer in a linguistic way. You will find that things which seem like "magic" will become understandable. Once you see your operating system and your software as a collection of text files with a particular syntax, you will understand your computer at a deeper and more useful level and will be able to use it in a more effective manner.

5. The Future

There is a lot of interesting research that is going into how people interact with computers. Some Computer Scientists are researching AI agents that can look at you and try to interpret your facial expressions as well as parse your spoken commands. These assistants would be a pretty cool thing, and I imagine I would probably use them the same way that I might use a GUI. However, I don't think that they will cause the command line to go away. For doing serious work, which for me consists mainly of editing text files to make a larger system run, I don't see how such an agent would help (unless it was so intelligent that it could replace me). I also imagine that the people who develop such agents would develop them using text based tools in a text based language.