Thoughts on the command line as an interface.
Recently upon hearing an account of a friends travels in France an idea came to mind regarding user interfaces. In particular command line interfaces. What does someones travels in France have to do with command line interfaces? . Read on and I will tell you.
Curious, I asked my friend what it was like to be in a country where you do not speak the language. She said that you develop the habit of pointing. You point at menus to order what you would like, you point at doors, busses and anything you need. After she returned she continued pointing out of sheer habit. She would point at the salt to have it passed to her, causing her friends to give her funny looks. It occured to me that gestures are a great way to interface with people if you do not speak the language. By simple gestures we can convey or basic needs and indicate simple things we would like to accomplish. There are many more gestures than pointing of course but it is, no doubt, the most widely used.
Learning a language is a long and difficult undertaking. Even once we begin to use the language we are very limited. Sentences take long to create and even longer to process. The speaker will often leave us far behind and reeling from the effort of trying to keep up. We might only catch the odd word and have to use context to deduct their general meaning. If our vocabulary is limited we could feel quite frustrated trying to communicate.
Once we learn a language, it becomes easy rapidly express concepts and outline requirements. All this can be done so efficiently that we are hardly enven aware of the language used, the concepts flow easily and freely.
This same concept has been applied to computers. Microsoft, by copying the GUI concept, brought computers to the masses. Suddenly we all could point at what we wanted and manage to operate a computer. This was a large step towards the adoption of computers into everyday life. Of course there are limits to pointing, clicking dragging and dropping. Limits in speed and limits in breadth of concept. However, there is no denying that initially it is much easier for us to operate and manage a computer with a point and click interface.
Users of the shell or command line interfaces often praise its value. It is often hailed as rapid and much more powerfull, however, little effort has been put into explaining why. Some people say that the command line is much more efficient and easy, these people speak the language and may not be aware that they are using the same part of the brain that turns concepts into words with the greatest of ease. Much more people argue for the GUI, stating that it's modern and easier, these people are partly right.
They are wrong in the fact that it is modern. It's like saying cave men are modern because it is easier to sit around the campfire pointing at things rather than sitting around the campfire telling stories. They are right in the fact that it is easier. Just because the GUI concept is newer than the command line interface does not mean it is a more advanced concept.
The shell is your link to the operating system. Every one comes with it's own little language. The verbs are the executables which perform actions upon the nouns. The nouns are the files.
In the UNIX philosophy every thing is a file so it is nice and easy to make a little language. Also there are little grammatical extras, courtesy of the shell, which help us create a language that is more complex than "run Jane run".
At first when we are learning the language we will be using very simple sentences like "Copy this file from her to here". Sooner or later we will be performing more complex operations like "Show me all occurrences of the word FIXME in all C++ files in such a location, please add the line numbers as well." or "find ~/work/bm/ -name "*\.cpp" | xargs grep -n FIXME". This may mystical and daunting if you do not speak the language but I wrote the Unix equivalent with less thought much more quickly than the English one I can assure you.
I have tried many of the GUI's and desktop environments that have come along over the years but constantly find myself going back to using shells for everything. Why would that be? They are after all much lauded and seemed so necessary a few years ago. The reason is that when you speak the language of the shell suddenly using a computer becomes very natural. You tell it what to do and it does it. If you don't know a word you ask it what the word means. No longer are you limited to manipulating files on screen you can almost instantly manipulate files anywhere. You have a language for expressing difficult tasks and you are no longer limited to what you can simply point at.
Yes I admit people who look at the command line think that pointing is much easier, they are party right. This is only because they do not speak the language and to them it appears as gibberish and some arcane art. Of course for those who have taken the time to learn the language especially those who must use a computer profetionally are very glad to not be limited to gestures alone.