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 GUIGUIs 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 lineIt 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:
- When you type the up and down arrow keys your previous command reappears and you don't have to type it again.
- When you type the tab key the prompt will guess what you are trying to type and fill it in for you. This will save you a LOT of typing.
- Unix commands typically have short names. This wasn't done to make them difficult to remember, it was done to make them quicker to type. As you learn them they will become second nature to you and you will appreciate not having to type so much.
- In bash you can easily search for your previous commands (type control-r and start typing what you are looking for, when you find it press enter).
3. EfficiencySome 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.