The science fiction author Neil Stephenson wrote an essay back in 1999
that was turned into a book called "In the Beginning was the Command
Line." It's a little dated now but is still a massively fun read. It
discusses the history of computing and has some hilarious analogies
comparing operating systems to cars. It also discusses why exactly we
are still typing into terminal emulators that, for all the computer
knows, are hooked up to some teletype machine at a university
somewhere.
Here's the link:
http://www.cryptonomicon.com/beginning.html
Here's an excerpt:
But there is one type of window you'll see on Linux GUI that is rare
or nonexistent under other OSes. These windows are called "xterm" and
contain nothing but lines of text--this time, black text on a white
background, though you can make them be different colors if you
choose. Each xterm window is a separate command line interface--a tty
in a window. So even when you are in full GUI mode, you can still talk
to your Linux machine through a command-line interface.
There are many good pieces of Unix software that do not have GUIs at
all. This might be because they were developed before X Windows was
available, or because the people who wrote them did not want to suffer
through all the hassle of creating a GUI, or because they simply do
not need one. In any event, those programs can be invoked by typing
their names into the command line of an xterm window. The whoami
command, mentioned earlier, is a good example. There is another called
wc ("word count") which simply returns the number of lines, words, and
characters in a text file.
The ability to run these little utility programs on the command line
is a great virtue of Unix, and one that is unlikely to be duplicated
by pure GUI operating systems. The wc command, for example, is the
sort of thing that is easy to write with a command line interface. It
probably does not consist of more than a few lines of code, and a
clever programmer could probably write it in a single line. In
compiled form it takes up just a few bytes of disk space. But the code
required to give the same program a graphical user interface would
probably run into hundreds or even thousands of lines, depending on
how fancy the programmer wanted to make it. Compiled into a runnable
piece of software, it would have a large overhead of GUI code. It
would be slow to launch and it would use up a lot of memory. This
would simply not be worth the effort, and so "wc" would never be
written as an independent program at all. Instead users would have to
wait for a word count feature to appear in a commercial software
package.
GUIs tend to impose a large overhead on every single piece of
software, even the smallest, and this overhead completely changes the
programming environment. Small utility programs are no longer worth
writing. Their functions, instead, tend to get swallowed up into
omnibus software packages. As GUIs get more complex, and impose more
and more overhead, this tendency becomes more pervasive, and the
software packages grow ever more colossal; after a point they begin to
merge with each other, as Microsoft Word and Excel and PowerPoint have
merged into Microsoft Office: a stupendous software Wal-Mart sitting
on the edge of a town filled with tiny shops that are all boarded up.
It is an unfair analogy, because when a tiny shop gets boarded up it
means that some small shopkeeper has lost his business. Of course
nothing of the kind happens when "wc" becomes subsumed into one of
Microsoft Word's countless menu items. The only real drawback is a
loss of flexibility for the user, but it is a loss that most customers
obviously do not notice or care about. The most serious drawback to
the Wal-Mart approach is that most users only want or need a tiny
fraction of what is contained in these giant software packages. The
remainder is clutter, dead weight. And yet the user in the next
cubicle over will have completely different opinions as to what is
useful and what isn't.
Kevin