I’m a big fan of the command line. I find that using it is many times a lot faster and more efficient than going the “clicky-clicky”-route via a GUI. Also I often find graphical user interfaces highly restrictive. A GUI is only as good as the designers ability to predict every possible thing that a user would need to do with it and because of this there is no such thing as a perfect GUI.
This is especially true with GUIs that are in reality just a pretty face on top of a console application, which is many times the case. Take for example a graphical front-end to a webserver-application like the Apache Web Server. To cover all bases this GUI would have to make it possible to do and configure exactly every part and function of this complex piece of software with the same precision as you can when you manually edit the configuration-files in your text-editor of choice. I just don’t see how that would be possible without making the GUI a cluttered and hard to use mess, which totally defeats the purpose of using a GUI to begin with. And what if you stumble upon a situation where the GUI lacks the needed knobs and switches needed to configure the underlying application to behave in a particular way? Well, then you’d have to drop down under the hood and go command line wouldn’t you? Now wouldn’t you have been better off being there the entire time then? You might even have picked up something about the application that you didn’t know before just from mucking about closer to it’s innards, which is always a good thing.
Another thing that I really like about CLI-apps is that you can combine them with each other piping input and output all over the place to create new functionality. This simply isn’t possible with a GUI-app because it lives in it’s own little world inside a window full of buttons, sliders, whistles and bells and almost always impossible to get to play nice with other apps unless it was specifically built for this to begin with. A CLI-app that accepts and supplies communication from stdin and stdout has no such limits and at the command line they all come together with incredible power that can never be mimicked by any GUI on earth, no matter how shiny it is.
There are also computing environments where I believe that GUIs have no place at all. One such environment is on a server machine. Why suck up resources from the server by forcing it to power a graphical environment with windows, button and such? It’s a waste of precious computing power and darn right stupid if you ask me. Naturally, by saying this I am also saying that no incarnation of the Windows OS has any place on a server, which is completely deliberate 😉
However, don’t get me wrong, GUIs definitely have their place in the world of computers. Not every user is a power user that needs to control every single byte of data and naturally there are apps that would be simply unbearable or at least highly impractical as CLI-apps. Web browsers for example are no fun in a command line environment and playing media like movies or flash animations is simply not possible. For the menial day to day computing tasks such as browsing the intertubes, handling e-mail and thousands of other things a graphical environment is preferred over a command line based one. But sooner or later I always find myself back at the prompt writing commands with twelve arguments and piping here and there, simply because for me it makes sense. I feel in control and not at the mercy of whoever designed some jumble of buttons and windows believing that his vision is what I and every other user wants and needs.
For my love of the command prompt I’ve even been called a GUI-hater (as a joke though) but that’s not true. I don’t hate GUIs, I just really like CLIs.
END OF RANT