Full Metal Keyboards.
“This is my keyboard. There are many like it but this one is mine. My keyboard is my best friend, it is my life. I must master it as I must master my life. Without me, my keyboard is useless. Without my keyboard I am useless. I must type my keyboard true, I must type more accurately than my enemy, who is trying to shut me down. I must edit him before he edits me. I will, before God I swear this creed; my keyboard and myself are defenders of my network, we are the masters of my enemy, we are the saviors of my life. So be it, until there is no enemy, but peace. Amen.” 
Now this post is really for the Support people of the IT world. As I read the more interesting comments about Linux Whines on Daneil Robitailles blog or the associated Digg comments I realised that some of the issues people have with our preffered operating system relate to “having to use the keyboard” . I have to congratulate Microsoft on doing a fantastic job of underming the value of typed console commands as an interface. Since every time I open a console window the less Linux learned will have a tendency to comment.
“Oh its DOS ?”
“It must be technical if youve got to use the keyboard”
“How can you possibly remember all those commands ?”
The speculation on the part of the observer is that opening a command line window is somehow a regression, or a step back, and that a Graphical User Interface is the final arbiter in all discussions relating to an operating systems success. This stems mostly from those days of transition from DOS to Windows when , at the time, the agreed perception was that this would somehow be more powerful and more userfriendly.
In my previous post I discussed how difficult a GUI environment is to provide remote or telephone support to. The GUI is also an incredibly distracting environment for a user struggling to complete certain tasks. Administration tasks and remote support tasks were ( and still are ) far easier to carry out at the command line providing the person on the other end can read and listen well. On the other hand the dependence on GUIs and point and click interfaces can lead to modern support staff not having a clear understanding of how to use the support tools at hand, as can be seen in the example below of a support technician attempting to use Putty to create a tunnel and connect to a remote PC .
support@server: cd \\192.168.100.112\c$
support@server: cd \\192.168.100.112
Its clear from talking to the individual that the knowledge of using a console has atrophied badly and excuses like ” I was trying various SSH commands” highlighted that he was actually out of his depth technically and it became clear when he commented how he doesnt like to use DOS. In the minds of so many potential new users the console is DOS and DOS is old this together must mean something is worse not better.
So can we reclaim the keyboard and the console as a flexible and useful tool for the modern system administrator and technical support person ? How do we educate our peers in the IT field that the command line holds much power, and as much responsibility and that it offers freedoms and opportunities not really experienced in a world constrained by a GUI ?
Certainly one of the strengths linux provides me and my clients is the reduced time it takes to login, manage, edit and respond to a series of servers from many sites and locations without the need to install remote support software ( outside of putty which travels on my usb stick ) . Attempting to remote manage multiple desktops via a gui ,let alone multiple servers, requires more effort and the subsequent bandwidth utilised often slows down the same transactions. However the idea is still firmly held that graphics is better than text and its a opinion I would like to change.
I would be interested in hearing more examples of where and when GUI or Command line has been more relevant or more useful to a either a End user or a Support person, I have my own tales and experiences but it would be interesting to hear others.
 Borrowing badly from Stanley Kubricks Classic [ Full Metal Jacket ] .
I hear this all the time. Trust me from having to train junior Unix SAs; there’s nothing in particular about command-line hieroglyphics which aids understanding, and in terms of UI design the teletype has been out of date since before I was born.
The argument that the CLI is more efficient than “GUIs” is bogus. Most administration anyone does anywhere now is via Web applications, which can have all the “flexibility” of the CLI (form fields everywhere) and yet are considerably easier to pick up, more intuitive and easier to interpret.
Spending one’s day in an xterm definitely makes one _feel_ more important, but it doesn’t really make one any smarter. Any number of the tools I use during the day could be translated into intuitive Web apps which wouldn’t force me to have to deal with broken backspace keys, messing things up by mistyping commands, and having to use such stone-age search tools as grep to locate appropriate output text.
As an additional note, I want to claw my eyes out every time I hear this in the _Ubuntu_ community.
While not ‘large scale’ by any means, my own personal network and a few friends whom have also switched to Ubuntu, support for them is now a breeze compaired to my Windows days.
My home network comprises all of 5 machines: this Ubuntu machine (my main workhorse), an Xubuntu laptop (for chat mostly), an Ubuntu desktop for my mother, a Ubuntu Server install (replacing an old FreeBSD 5.4 install), and the Media Center box I’m slowly building up (Ubuntu with MythTV is the goal). Add in a Ximeta Netdrive that acts as jukebox storage for the entire network.
All 5 machines are easily updated without much ‘work’ on my part, other than a quick ssh over to the machine from a nice, fast console, and a few simple aptitude commands. Installing new software is the same thing (a godsend for the server box, which hasn’t actually seen a living person or the light of day in weeks, it lives in the basement with no keyboard, mouse, or monitor, and it’s cold down there during wisconsin winters).
If I had gone with windows across the board, it would have meant trips all over the house to make sure everything is up to date, or installing and running clunky virtual desktop software. My mother’s machine in particular, would have required me interrupting her work just for updates. She never even knows I’ve updated her machine or installed the software she asked for, it’s just there and just works.
A nice tactic might be to concentrate on CLI on the desktop.
Some nice CLI tools that truely offer a benefit (besides just being super lightweight) to the user might be a better way to go.
Remove the social stigma of using a CLI, kill the “oh, so… how do actually get work done on your computer?” responses. And with that, will come acceptance with everyone, let alone tech support.
Some examples of prime programs, especially when coupled with screen:
mpd – if X breaks (or your fancy eyecandy decides the keycombination you just gave means restart), music keeps on playing!
irssi (or bitchX) – don’t ever have to miss the conversations you’re logged off for. IRC is a text medium anyway, why do we need a GUI exactly?
torrent clients – this one’s obvious. You can not only log off and still be downloading, but you can also start downloading from anywhere (ssh), without the need for web-interfaces (which seem to be the ‘new hotness’ in torrent-suites these days).
I’m sure there are plenty of other areas where ssh/screen/[CLI program] really show their colors.
But emphasising these strengths to the desktop user may be the most rewarding strategy.
Possibly not relevant to the typical end-user, but I’ve found familiarity with the CLI to be a godsend when it comes to learning to program. It’s so much easier to start with text going to stdout than it would be to start with GTK or QT or the like. . .
Primarily, tho, it’s just quicker and easier. And more reliable, too – a newly installed app. may or may not put an entry in your Gnome/KDE menus. But it WILL be runnable from the CLI.
Out of interest when you want to automate the process of passing the output from one application into the input of another how exactly will you achieve without piped applications at the command line ?
Neal Stephenson’s classic “In the Beginning Was the Command Line” comes to mind.
That’s actually the “Rifleman’s Creed” by Major General William H. Rupertus. It’s been featured in several movies apart from “Full Metal Jacket.”
Ad “Where the console was more useful”:
I can recall a master’s course on neural networks or so, back in the days when i was on reading university, england, on erasmus exchange…
It is to be said that before that course we had one on Java and one called “Operating Systems” – read: how do i use a (UNIX) shell.
We had to setup, train and test different configurations of neural networks on the same problem, using some java application (i can’t reacall it’s name – kiwi or so??) shipping a “nice” GUI.
However, some playing with java revealed that the programmers also supplied main functions for console access (my initial tries to exploit the system via reflection was unneccessary so :-), so what i did was writing a java program that loops through all different kind of network configurations, write some bash app that processes the output into some nice CSV file and finally import that into OO and make some nice charts. Oh, and of course, as training of these networks is rather time consuming, execute that all on the MPP server (some IBM machine, can’t recall, freakin fast though) and collect the result after some cups of tea. I tested more than 1000 networks, found a great pool of good solutions, and it cost me – well, no time, just the money for the tea! I could hand in the same day we where given the exercise, we where given one whole week…
The rest of the class actually sat down, started the GUI, started Excel and point-and-clicked their way through, none of em ever got as many configurations as me, all of em sitting in the lab all week to get some results.
At first i was considered the geeky guy, however, i had some great time in york the rest of the week, drinking beers with friends and socialising 🙂 now who’s the geek *gg*
No doubt, GUI is nice as you don’t have the “how do you remember all that” thing, but as soon as there’s more than 5 items to be processed: go for console…
great post of yours, btw, thnx!
Pingback: GUI vs CLI at Hopeapuu
â€œOut of interest when you want to automate the process of passing the output from one application into the input of another how exactly will you achieve without piped applications at the command line ?â€
Nik, it’s called Automator.
My HCI lecturer explained it thus: “The human brain is better at recognition than recollection. The purpose of a good UI is to provide enough visual prompts to help the user without overwhelming them with options.”
That said, I’m a CLI freak myself. Don’t get me wrong, I’m not against using a GUI, but I’m firmly of the belief that in the vast majority of cases the GUI should be little more than a facade to the CLI, lending a helping hand to those less familiar while allowing those with the in-depth knowledge (or no working X session!) to forge ahead with what they’re used to. Need to run the same process over several files? I’ll bet it would be quicker to script it from the command line than open whatever editor, load file, make changes, save, close….
Where GUIs, or rather windowing systems, come into their own is allowing several applications to share the display. Things like Gnome Panel Applets are a good use of a GUI, showing at a glance, in a non-intrusive way, important system information while still allowing you to get on with whatever it is you’re doing. The NetworkManager applet is another good example — click it, you’ve got a list of available networks; click one and you’re connected. If you have VPN plugins installed, same principle. No need for iwlist scan, iwconfig ap whatever.
GUIs aren’t bad per se. Over-use of GUIs is. And if the GUIs are just a facade, they can also be a very useful learning tool — set something going, run ps -efw and hey presto, you’ve got a CLI equivalent ready to be inserted into your script.
one of the advantages of the cli over a gui is that it encourages you to think and and actually understand whats going on. this knowledge can of course be transferred. At a previous job my boss moved us to Exchange but since he didnt actually know what he was doing he misconfigured it. While having never used exchange i did know how mail servers were meant to work so i went and prodded the gui and made everything happy.
the other advantage of the cli is that i can administer my machines from my phone (E61i) easily. Yes it has a remote desktop client but really the resolution doesn’t work. No more havign to worry about whether im near enough a computer when on call.