The GUI v. CLI Debate

I’ve been helping with online tech support for Ubuntu for over four years now, and every now and then the discussion comes up about whether it’s “better” to use terminal command instructions or to use point-and-click instructions when offering help.

Inevitably, some die-hard CLI (command-line interface) fans come out and say that the terminal is “more powerful” and that every Linux user should learn to use the terminal, and then some die-hard GUI (graphical user interface) fans come out and say that the terminal is intimidating and that if Linux wants more users, it has to develop more graphical interfaces for things; and then you get the hardcore Linux users who claim they don’t care if Linux gets more users or not, etc., etc., ad nauseam.

The truth is that neither CLI nor GUI is always “better” than the other. There are appropriate situations for both CLI and GUI on a support forum. I hope everyone can agree that all common tasks should be able to be done in the CLI and through the GUI. Choice is ultimately what’s most important, so that those who prefer the CLI can use the CLI, and those who prefer the GUI can use the GUI.

But if I am offering help to new users, do I give GUI instructions or CLI instructions? It depends on what kind of support I’m giving.

When is GUI support appropriate?
If a new user wants to know how to do a basic task that she will probably repeat (or, if not the exact task, then at least something similar) in the future, then I will usually give point-and-click instructions to encourage that user to explore the GUI for that kind of task. For example, if a new user asks “How do I install Audacity?” then I am not going to say “Just use sudo apt-get install audacity.” Instead, I’ll tell her to use Applications > Ubuntu Software Center or Applications > Add/Remove, or just link her to this tutorial on how to install software. There are several reasons I do this:

  • Even though the apt-get command makes perfect sense to me, it is just cryptic gobbledygook to a new user, and it will not help her to install other software in the future unless I bother to explain how the command works; and, more importantly, even if she understands how apt-get works, she’ll still need to know the name of the package she wants to install in order to use the command most efficiently.
  • A lot of new Linux users (myself included, when I first started) have an irrational fear of the terminal, even if you tell them to copy and paste the command with a mouse (no typing necessary). Eventually, as they become more comfortable with the new environment that Gnome or KDE (or Xfce or whatever other user interface they’re exploring) has to offer, they are more likely to be amenable to learning terminal commands and even liking them.
  • Among Windows power users (the most likely group to migrate to an almost-unheard-of operating system that requires download, installation, and configuration from the user and not the OEM), there is already a reputation Linux distros have of being too terminal-dependent. It’s great to advertise to new users just how many things can be done by pointing and clicking, and that will make their transition to Linux that much easier.

Ah, some veteran forum members would protest, but what if I don’t want to bother making screenshots or typing out long point-and-click instructions that can be summed up in a single command? To that, I say if you’re too lazy to offer appropriate help, don’t offer help at all. Someone else will help. Or, better yet, find a good screenshot-laden tutorial and link to the tutorial instead (that’s actually how I started up my Psychocats Ubuntu tutorials site—I got tired of constantly retyping the same support posts over and over again, so I just made one place I could keep linking new users to).

I would say something similar to those who use Fluxbox or Enlightenment and want to primarily help those who use Gnome or KDE. If you aren’t familiar with the graphical environment the user you’re trying to help is using, don’t offer help in that instance. Save your help for when the CLI is appropriate.

When is CLI support appropriate?
The GUI may be fine for common tasks (installing software, launching applications, managing files and folders), but what if someone runs into a problem? What if what she’s doing is not a common task but a one-time setup or configuration? There’s no way if a new user says “When I try to launch Firefox, it just disappears” that I’m going to offer a point-and-click solution. Problems are best diagnosed with the CLI, and terminal commands (even for GUI applications) are more likely to yield helpful error messages. Likewise, if her wireless card isn’t recognized properly or fixed by System > Administration > Hardware Drivers, it isn’t a crime to walk her through manually editing configuration files to fix the wireless problem, because once it’s fixed, she should never have to do that again.

If you do offer CLI solutions to problems, though, as much as possible try to explain what these commands mean or do. You don’t have to copy and paste in a whole man page (in fact, that probably won’t be helpful at all—I’ve been using Linux for years and have yet to find a man page I actually understand). Just keep in mind that to many new users, terminal commands are like a foreign language they can’t even say hello or thank you in.

CLI and GUI aren’t going away any time soon. One is a hammer. One is a screwdriver. No one tool will suit everyone best at all times. Use what’s appropriate. Appreciate that what you like or prefer may not be what someone else likes or prefers.

13 comments

  1. “One is a hammer. One is a screwdriver.”

    Love the analogy.
    Very well said.

    And as for the psychocats ubuntu page, I often find myself referring folks to it on ubuntuforums whenever someone asks for a good guide for ‘noobs’. I found it really helpful a couple of years back when I was getting started with Ubuntu. You did a fantastic job there. Thanks a lot.

  2. I think you bring up some great points here and have done a great job at framing a discussion around the CLI/GUI situation.

    You’ve brought up key usability problems in gnome and KDE.

    1. If something is easy to do in the command line and requires lengthy GUI instructions; then the GUI interface is broken and should be redesigned.

    2. If the terminal version of your program gives more useful debugging information than the GUI, then your GUI is seriously flawed and should be fixed. Terminating your GUI with no error message, while sending all useful debug to standard out, is simply not good enough for a main stream program.

    There are some things a command line just does better than a GUI like navigating file structures, working with text files, chaining commands together, and scripting. For everything else like installing software, the GUI should be better than the CLI. It’s currently not better, because the GUI is clunky and slow, but that’s changing.

  3. I think the interesting thing is that anyone who comes to a Linux system with a GUI is bound to have to use the terminal at some stage, but quickly find that it’s a best of both worlds situation. Take Ubuntu and Software Manager. You can do one of two things to install software.

    1. CLI way: Open terminal and type “sudo apt-get install xxxxx”. Hit Y and enter. Done.
    2. GUI way: Click on Administration menu, then choose System, then choose Software Packages, type your password, wait for the program to start, search through that program and find the one you want, select, tick it and acknowledge the messages about dependencies that needs to install too. Hit apply, when finished hit close.

    Which is quicker?

    Not only that, terminal doesn’t impose itself as a difficult system when used. It’s not difficult, maybe a little daunting but eventually you have those same people going back to their Windows system’s Command Prompt to see what they haven’t discovered for all those years.

  4. I think the CLI is very useful for common problems where the answer can be copied straight from a tutorial into the terminal. I tend to think that anyone who has taken the trouble to install Linux and is trying to troubleshoot their problems would not have any issue with copying and pasting a few lines of code. However your point about using the GUI for a task that will be repeated is a good one. I have in the past blindly copied text into the terminal without any real understanding of what I was doing – only knowing that this would fix my problem. Sometimes going through the steps visually helps people grasp the concepts more easily.

    I must admit I tend to use Synaptic most often to install software, as I can never remember exact package names (e.g. is it virtualbox or virtual-box?). Synaptic is actually quicker here (for me).

  5. I think most of those offering help in CLI, when GUI is available, are just lazy. Once you know the command to use, looking up and verifying the GUI instructions is awkward. There is usually no consideration given to the daunting effect CLI has on new users.

  6. I usually use the form of the question to determine the method.

    If they ask: How do I do x?
    They get a GUI response.

    If they ask: How do I fix x?
    They get a CLI response.

  7. I don’t even know why there would be a debate about this. Each approach has their strength and weaknesses. Depending on what you want or need to do, you’re free to select the tool most suitable for the job.

    Sometimes I like to interact visually, so a GUI is my choice. Sometimes I need the CLI.

    I was initially attracted to Linux exactly because the command line promised to empower me more over my machine and its data. I wasn’t disappointed.

  8. I find it a major problem when reading an how-to or when advice is given in a forum etc using a graphical method, as they tend to be specific to the major desktop environments (usually gnome when dealing with ubuntu) and are therefore not easily transferable to another environment. For instance I often use customised installations using openbox or xfce with non-standard apps

    As a new linux user I prefer to read up and research a topic before asking for advice and the graphical method is more often an hindrance than not.

    Give advice or write-ups using both.

  9. I often use the CLI for installing/removing softwar, simply because it’s quicker. I’m a very new linux user (been using ubuntu for about 3 months now) and I’m definitely not scared of the command line, but there are some things i wish i could do with a GUI, like compiling. I don’t think I’ve ever successfully compiled a program, but I’m sure myself and most new users would be less intimidated by linux if they could compile software with a GUI, even a compiler that checks for dependencies and installs them automatically.

  10. Yes. CLI gives more opportunity to customize/program for advanced users but GUI is more close to the philosophy of Ubuntu: Linux for Human Beings!!!

  11. I completely agree with this. Sure, the CLI is more powerful, but most Windows and Mac users switching to Linux have never even touched Command Prompt or Terminal (respectively). I use Windows regularly, evne though I love Linux much more, and when I’m using my computer running Kubuntu, I’ll use the terminal all the time, but when I’m using Windows 7, I don’t think I’ve ever even touched the Command Prompt more than typing ipconfig /release and ipconfig /renew when there was a problem with my home network. The CLI just isn’t useful in those two OS’s. Linux users need to slowly transition into the CLI, not be thrown into it and expected to understand it.

  12. I know this post is rather old, but I just had to add a couple of things.

    First, on reading a previous post of yours on a similar theme (that one doesn’t have to be better, since we have both), I thought of the hammer vs. screwdriver analogy. When I saw the same at the end of your post here, I just had to mention that.

    Second, something that is often overlooked is that GUIs are inherently more resource-intensive than CLIs. This often doesn’t matter, but in some situations (and with some GUIs) the difference is appreciable. As an example, if I know the package I want to install, it’s a lot easier to do so in a terminal rather than the Software Center. I’m not sure if this is because I’m using a 3-year-old netbook, or because SC is a tad bloated, but either way, using the terminal alleviates the issue.

    That said, I do agree with the sentiment that neither has to be better. Sometimes one is more suitable than the other, but in many cases, it’s nothing more than a matter of personal preference.

Leave a Reply to greg Cancel reply

Your email address will not be published. Required fields are marked *