Subscribe via RSS Become a friend on Facebook Follow me on Twitter

Cymons Games

In Star Trek the next generation and it’s subsequent spin-offs a child walks on to the holodeck, arguably the most advanced user interface ever imagined short of Neuromancer, and says “I want to play with a teddy bear” and small teddy bear appears and starts  dancing around in a nonthreatening way. The child says “No, bigger” and suddenly the teddy bear is as big as the child. “Bigger” and the teddy is now adult sized. The child smiles and runs off with their new playmate to explore their favorite holonovel. And in the corner old man Barclay says “Darn kids. In my day we had to spend hours in a character customizer before we could play with a 6 foot teddy bear, and it was better that way.”

I usually pick my titles to be intentionally provocative, so let me diffuse that “sucks” right now. I have used command-line interfaces since I was a child learning BASIC on my Commodore 64. I used DOS on Dad’s IBMpc jr. I ran network tools on the command line on the university’s Linux mainframe. But since my university days I haven’t had much need to Linux and migrated most of my work to Windows. I peeked in on Linux once in a while, mostly because people I knew spoke highly of it, but without a reason to stick with it I quickly abandoned it. However recently my excitement about the Raspberry Pi has given me a reason to stick with it, particularly in the context of promoting it’s kid-based goals, and it has caused to me realize that I resent having to use the command line.

It seems to me that there is a pervasive attitude among Linux users that the command-line is the only way to go. I think part of this mentality is driven by the fact that the default tool set for most Linux distributions don’t include GUI tools. It’s not that GUI tools don’t exist, they’re just not the default. And this illustrates the major difference, I feel, between Linux and Windows. Windows is set up for the every user first, and the technical users can get the tools they need themselves later. Linux is set up for the technical user first, but could be configured for the every user if they knew what they were doing, which is kind of paradoxical. If the every user knew what they were doing they wouldn’t be the every user.

Cymon’s Games aims for a user kind of in-between; someone who isn’t technical, but wants to be. So I try to make the transition as comfortable as possible, minimizing time spent in the highly technical and in the process end up with something in-between. Not highly technical, but functioning higher than a base user level. Getting users past the technical barrier into a comfortable place usually ends up somewhere in-between as well; IDEs and 3rd party GUI programs that implement all the necessary core functionality.

I sometimes feel like command-line aficionados run with a “I had to learn this, so everyone else should too” mentality a lot of the times. I know a guy who uses the windows version of Vi. That such a thing even exists is borderline illness in my mind. Vi was written for mainframes that didn’t even have arrow keys on their keyboards. While it is impressive to see a talented Vi users do their thing, insisting that Vi is still the best expresses a disturbing unwillingness to learn something new. This is not a good mentality in the computer world, nor is it the way to introduce new blood to this hobby or career that we all love.

We must be the giants that others will stand on the shoulders of and, I advocate, we should make our shoulders very comfortable. This means taking a hard critical look at the tools we’re using and ask “is there a better way”, and define “better” as “appeals to or encourages a wider audence.” If that means the next generation will never see a “man” page then that’s the cost of progress.

15 Responses to “Command-Line Interfaces suck”

  1. epicoder

    “I resent having to use the command line.”
    That’s fine. Don’t use it.

    “It seems to me that there is a pervasive attitude among Linux users that the command line is the only way to go.”
    The majority of Linux users nowadays are frustrated Windows/Mac users who wanted to try something new. The MOST VOCAL of Linux users are the ones who say the command line is the only way to go.

    I am aware that I might sometimes come off as this type of user, so let me make my position on the command line absolutely clear here:
    I think the command line is a great thing, and well worth it to learn. However, it is by no means necessary. If you don’t like it, then fine. Use Linux Mint or Ubuntu. Don’t demand that it be removed completely, as my productivity speed would be reduced to an absolute crawl without it. Similarly, I won’t demand that the GUI be removed as your productivity would slow to an absolute crawl without it.

    “I think part of this mentality is driven by the fact that the default tool set for most Linux distributions don’t include GUI tools.”
    While this is true for most of them numerically, in terms of user share, the most used distros all have GUI tools. Debian, Ubuntu and all its flavors, Linux Mint, PCLOS, the list goes on.

    “insisting that Vi is still the best expresses a disturbing unwillingness to learn something new.”
    Bull. (excuse my french)
    What exactly about vi makes it not better, or its use a refusal to learn new things? A professional coder I know still uses the text-based form of emacs, and he can still work much faster than I can using Geany. He has tried just about everything in the book, but he still prefers emacs. Similarly, I have no doubt that your friend using vi can out-type me using Geany, and that he has tried other things and still prefers vi. I have tried emacs and vi, and I hate them. Does this make them bad? No! My coder friend has tried Codeblocks/Gedit/Geany, and hates them. Does that make it bad? No! Is he still willing to use Codeblocks/Gedit/Geany if he’s in a GUI? Yes. Can he use them effectively? YES. Clearly, he is willing enough to learn new things that he can leave his preferred environment and do things elsewhere.

    ” … define ‘better’ as ‘appeals to or encourages a wider audience.’ ”
    I think you are completely missing the point of Linux. Let me quote “Linux is NOT Windows” (http://linux.oneandoneis2.org/LNW.htm), which I think you should read in its entirety:

    All the Linux community wants is to create a really good, fully-featured, free operating system. If that results in Linux becoming a hugely popular OS, then that’s great. If that results in Linux having the most intuitive, user-friendly interface ever created, then that’s great. If that results in Linux becoming the basis of a multi-billion dollar industry, then that’s great.

    It’s great, but it’s not the point. The point is to make Linux the best OS that the community is capable of making. Not for other people: For itself. The oh-so-common threats of “Linux will never take over the desktop unless it does such-and-such” are simply irrelevant: The Linux community isn’t trying to take over the desktop. They really don’t care if it gets good enough to make it onto your desktop, so long as it stays good enough to remain on theirs. The highly-vocal MS-haters, pro-Linux zealots, and money-making FOSS purveyors might be loud, but they’re still minorities.

    /endquote

    If you want to make your own distro that does entirely away with the command line, by all means, feel free. But don’t insist that all of Linux needs to follow your example.


  2. Y.A.

    Yeah, I’m not a fan of the command line either. But I don’t think it’s all bad. Some programs are just better that way. And hey. vi (LOWErCASE) is a great editor. I just don’t see the point in firing up a big, bloated, confusing IDE with a far bigger learning curve than vi(m) has ever had. I actually started using GVim on a friend’s recommendation ever before I had tried an operating system other than Windows at all.

    Also, most distributions not including GUI tools? Are you f***ing kidding me? Unless you spend all day amongst elitist Arch and Gentoo Linux users, you are absolutely wrong. Most distributions just get KDE or GNOME or something and customise it. Not only are you generalising, but you’re doing it wrong too.

    Not to mention Windows has always shipped with command line tools. You can use effectively any Microsoft program from the command line. Just look up WMP (Windows Media Player) command line for instance. Very comprehensive, isn’t it? Both platforms cater to both power users and casual users. Why power? Because honestly, the command line is more efficient. That said, I can’t think of a single program [that isn't very low-level at least, e.g. dealing with the kernel] for which there isn’t some GUI overlay or whatever.

    One of the main reasons for the fact documentation is often given in command line form is that, even as a KDE user, I will usually go to the Ubuntu forum or Arch Wiki if I have a problem. There are generic Linux forums too. Firstly, the command line tools they refer to such as alsamixer are usually installed by default on every platform. Secondly, they are almost *always* faster and less confusing. Thirdly, they work globally. In the sense that I’m Greek and almost all the help I find on the internet is in English. You won’t believe how fucking annoying it is having to translate everything from Microsoft’s broken Greek translation back to English. In KDE, or GNOME too for that matter, I can change the interface language for every program in a few clicks.

    I think your problem is that you’ve only used Raspbian and not a modern Linux distro (Debian ships with ancient software) like, well, pick your Ubuntu derivative (up-to-date AND friendly). If you really hate the command line, that’s fine, though that’s probably been incurred because the DOS command line is a piece of ass and the UNIX command line (which Linux copies) is infinitely superior, with Tab auto-completion and all that. I’d suggest a modern distro instead and that you stop trying to get views so hard by posting FUD.


  3. epicoder

    “In the sense that I’m Greek”
    Wow, really? Your English is better than most native speakers’.

    “the DOS command line is a piece of ass”
    This. This SO MUCH. I wrote a sh (*nix command line) script for a friend, then sent him these two IM’s which pretty much sum up my thoughts on the Windows command line:

    [10:16:59 PM] epicoder: I’d write a batch script but batch is stupid
    [10:17:14 PM] epicoder: maybe I’ll do it later when I’m up for stupidity


  4. Jonny D

    I agree that a GUI is more intuitive and easier for the “every man”. But just as these Linux users you refer to say that the command line is the way to go, so too do Windows power users say that their way is the best (and Mac users the same, etc.). They’re just different and you have to understand that different tools are better for some people (and that most people are stubborn). You would hear the same from the Star Trek kid saying that GUI sucks compared to voice interfaces. The fact is, the Enterprise must have all three so that everyone on board can interface with the computer at the level that they need to be comfortable and productive. And technically, voice interfaces are much more similar to command line than anything.

    I grew up on Windows, but there’s really *not* a GUI for everything. You have to pop open the command line for troubleshooting networking issues, running C programs with command-line arguments, and running programs that Windows hides from the “every man”. Recent versions of Windows have even added a textual application search into the Start Menu because the existing GUI is too complex to find programs quickly.

    GUIs have a limit in the complexity they can present to the user while remaining “friendly”. Sometimes a normal power user wants to do useful things outside of the scope of what others have written a GUI for. For younger me and others who manipulate or mod programs, you need to do a lot of “intuitive” click, drag, copy, paste, F2, etc. that takes so much longer than if you have spent a little time to get to know the equivalent language of the terminal.

    When I finally gave Linux a serious try in college, I breathed a deep sigh as I found tools like grep and pipes. I work on both Windows and Linux, but my productivity will always be higher on Linux (or in Cygwin) since many tasks and much information is way quicker with a little typing. However, this isn’t the reason I would want my “every man” relatives to use Linux.

    I think epicoder pointed out the issue. Your definition of “better” is way too narrow. Appealing to a wide audience is important, but not always better. Multiparadigm is the way to go and you have to define “better” differently for each. It is not a drawback to include command line interfaces. It is a drawback to make any interface – GUI, text, or voice – painful to use.


  5. Joe

    This is the sort of conversation that I love. A little bit wordy everyone, but otherwise I regret nothing.

    EpicCoder, I want to clarify one thing. The line was “I resent **having** to use the command line.” Emphasis on having. There are some things that the GUI is not set up to do yet and whenever I run into those I have to use the command line. Even if it’s something simple like getting the distro set up so I never have to use the command line again the fact that it’s default position is needing to use the command line is frustrating. The fact that new and unknown users must pass through this barrier before they can use them I resent.

    It’s the same as programming nowadays. In the past you fired up your computer an had a robust programming language for an OS. sure it was BASIC but at least it was something. We don’t even have that any more. And I’m not happy about that either. I think we’ve lost something.

    I appreciate all the points that everyone has brought up.I sometimes make narrow arguments because they encourage conversation, so that you for that. In fact if you can share this conversation with others so this can be through explored, I’d appreciate it. Also, I bash because I care. I want raspberry pi to succeed in it’s intended goal so I nitpick and criticize.

    Jonny D: “GUIs have a limit in the complexity they can present to the user while remaining “friendly”.” That’s exactly the point and why GUIs are so appealing. They present the user with exactly what they need and let them get to work which requires careful planning and execution. A command-line interface or “power user” tools require no such effort. Just throw everything in front of the user. I am not going to laud a programmer for being lazy. Again, “We must be the giants that others will stand on the shoulders” quoting myself.


  6. epicoder

    “The line was “I resent **having** to use the command line.” Emphasis on having.”
    Again, Ubuntu.
    This page documents the standard install process. Point out to me where you see a command line.
    https://help.ubuntu.com/community/GraphicalInstall
    Also, once it’s installed, you don’t really see the command line at all. It’s there, but it’s not needed. It’s left for people like me and in case of system breakage.
    To give you an idea of how hidden it normally is, here is a joke that has been circulating for a while:
    BREAKING NEWS: Ubuntu has been found to be Windows Vista at its core, differing only by theme and default installed apps.

    Also note that there are Debian images which are pre-configured with desktop environments. Its installer is not quite as shiny as Ubuntu, but a new user would be able to figure it out in the order of half an hour or so.

    I can’t speak to Linux Mint, as I’ve never used it myself, but I’d assume it also has a graphical installer as it is aimed at newer users.


  7. Jonny D

    I disagree with the statement that command-line interfaces and power user tools require no careful planning or execution. Maybe you’re used to the mess of power user interfaces on Windows (e.g. the Control Panel or Folder Options). A wall of labeled checkboxes is not a proper interface for anyone on any OS.

    My point was that you’re looking at this from one perspective, that of “simpler is better”. It’s not better if you can’t get the job done with reasonable effort and time. There are good and bad ways to do GUI. These exist on all OSes. There are good and bad ways to do TUI. You need to accept that the Linux terminal is actually a pretty good way to do a command line interface, even if TUIs in general are not your cup of tea. I can understand where you’re coming from, but try convincing a research scientist that you need to use a GUI to work on their supercomputer and see how that flies. Different interfaces exist for a reason.


  8. Joe

    Alright, so there are GUI friendly version of Linux out there. I was defiantly approaching this discussion from my experience with Raspberry Pi, which Ubuntu doesn’t support. So my perspective was slanted and single faceted. I appreciate the perspective knowing these options are out there brings, but that doesn’t help me or anyone else using a Raspberry Pi, particularly if the goal is, as was stated when rPi was made, teaching kids to program.

    I stick by my statement that command-line interfaces are inherently lazier than GUIs. I say this because I’ve made both. The work that goes into a good command-line interface is less than the work that goes into a good GUI interface. The work that goes into a bad command-line interface is less than the work that goes into a bad GUI. And I mean work on all levels from planning to execution to documentation. Actually with a Good GUI there’s less work that goes into the documentation phase because that’s the point of a good GUI. Google doesn’t need a huge man page because it’s a text box and a button that says “go”. That’s good user interface. The manual for a iPhone is smaller than a religious tract pamphlet. But that’s only after very careful planning and execution so the net work is still more than a good command-line interface.

    It’s like Clean Code. Clean code advocates removing obfuscation in favor of clarity to the point that you no longer need comments in your code because the code itself is clear as prose. A GUI is like that; a preferable way to do things because it makes using it and maintenance easier.

    Is this just a matter of opinion or is there a right answer here? If it’s just a matter of opinion then all I need to do to become on the right side of this argument is wait until all these kids who have grown up on GUIs take over and all the old folks bound to their command-line interfaces succumb to old age.

    Jonny D found grep and pipes and they changed his world. Y.A thinks vi has a smaller learning curve than Geany. Funny thing is my experiences have been EXACTLY opposite of both of these. I’ve wasted hours wrestling with bi but I was productive with Geany in minutes. And there is nothing is grep that I haven’t been able to do with search tools that have GUIs. I seem to recall once seeing someone do something with grep that I went “wow, I have no idea how I’d do that otherwise” but it was so minor that it entirely failed to convert me. I can’t even remember what it was now, it made that little impact on my world and the way I work. On the other hand discovering visual tools for programming has effected the way I work so profoundly that I can’t imagine going back. Every advancement is another tool I miss it’s gone. When my UI started red underlining errors in my code without needing to compile it first the heavens opened and angles sung. But only the right angles.


  9. garegin

    CLI is a useful tool, but it’s essentially an extra exit hatch. It’s not designed to be the default way to interact with the computer. The biggest flaw is that options are not presented to you, you have to learn them beforehand.
    A stupid example is saying like, in a CLI when you order a burger you have to go read a man page about the available options, whereas in the GUI it could automatically prompt you to supersize or get extra pickles.
    A GUI, in summary, gives you BIRDS’S EYE VIEW of the functionality of a given program, whereas in the CLI the functionality is completely hidden. All you get is a black screen with no clues or overviews.
    Some CLI programs have mitigated this with a “wizard like” interface, where it walks you through the options. But they essentially become very bad GUI equivalents once you can’t freely type into a prompt and have to follow the wizard.
    The problem is that most of the time, the CLI is just a crutch because the GUI lacks a particular feature. With Linux this is endemic as no “server distro” like RHEL has any GUI management tools like Server Manager in Windows Server. All configuration is done via editing text files. There are SOME management tools like virtmanager and GUI filewall, but the rest of it is light years away.
    In Windows I can configure my IIS and SANs all in a GUI. Let me see RHEL do that.


  10. vel

    another definite bright side to CLI interfaces is that it is soooooooo much easier to tell a n00b user how to accomplish an advanced task than it would be on a gui.
    “here, paste this code into your terminal” vs “click here, and here. no not there. here. NO, HERE GODDAMMIT!”

    with CLI you can accomplish a job in a tenth of the time, and you can automate it in the background. good luck doing that with a gui.
    //i.e. CLI
    /*post.sh file
    CMD=`/usr/games/fortune -a`
    fbcmd status “$CMD”
    */
    user@pc-$:watch -n 3600 ~/post.sh
    //this post snippet from fortune to your facebook wall once an hour

    //VS

    //GUI
    /*program a mouse macro to copy and paste snippets from a really large text file[good luck formatting it to be able to do this effectively, btw!] and paste it into facebook and submit it[and wait for it to finish] . also if this script was running, you would NOT have control of your mouse and couldn’t do anything while it was posting on your behalf*/

    and this isn’t even going into the amount of overhead a gui introduces and the dependencies. CLI runs faster and doesn’t waste RAM as needlessly as GUI does.

    linux doesn’t really cater to every possible user, they do this stuff for free most times. when i hear someone bitching about things they don’t like in linux, i tell them to fix it themselves. it’s open source, so anyone can modify the code. usually you wouldn’t even have to. i can fix an issue with ubuntu-lens with a few simple ‘apt-get remove”s

    some of my favorite tools and applications have been and likely always will be CLI. including games. NETHACK FTW. and when in doubt, always remember, if terminal is pissing in your boots, you haz super cow powers. just gotta fortune|cowsay that shit.


  11. vel

    “And there is nothing is grep that I haven’t been able to do with search tools that have GUIs.” try outputting 100,000 prime numbers to a text file using only Gui tools.

    linux@awesome-$: primes 2 > primes.txt // an example type of a pipe
    or
    fortune|pirate
    //which outputs something like
    “Chuck Norrrrris doesn’t kill two birds wi’ one stone. Aarrrrrrrrr! Chuck Norrrrrrrrris kills all birds, wi’ two stones. Ahoy! The ones in his pants. Yaaarrrrrrrrr!”

    as for grep:

    $grep -v “foo”
    would only return results in the folder/file not containing foo. you do not likely have a not gate search result.

    $apt-cache search curses|grep curses
    would be a good example of ‘weeding out’ false positives apt-cache search returned of packages who’s long description had ‘curses’ in it, but not in it’s short, returned description.[curses being a CLI library[usually for CLI games or apps like nethack or mocp]]

    $grep ‘[0-9][0-9][0-9]‘.jpg
    would return all pictures from 000.jpg to 999.jpg. which would SUCK to search with a gui. the -r flag could allow you to do this throughout multiple folders.
    which brings me to my next point

    $grep -r “[0-9][0-9][0-9]“.*
    would output all images named [any number from 000 to 999].[jpg,jpeg,jps] in the folder my terminal is in, any of its subdirectories, any of that subdirectories subdirectories, et al. it would return nonimage files, but you could pipe it into egrep to search for known images
    $grep -r “[0-9][0-9][0-9]“.*|egrep egrep ‘jpg|jpeg|gif|tiff|png’ *>mypictures.txt&&gedit mypictures.txt
    would load all of those into a single text file and open it for you. //gedit could easily be replaced by vi/vim/nano/emacs/etc

    ONCE YOU START ADDING PIPES AND GREPS YOUR ABILITY TO DO THINGS IN TERMINAL EXPANDS. BY A LOT.
    hell, if you packed alot of old images into gzips to save space, you can even grep THE FILES INSIDE OF YOUR GZIPS if you’re looking for a file but don’t remember which one it is in.


  12. Joe

    Wow, why all the action all of a sudden?

    I love how ever defense of what CLIs can do requires a wall of text to explain the line of code they’re defending. That is the problem.

    Yes, there are awesome things that can be done with CLIS once you’ve overcome the 10k hour learning curve. On the other hand a well designed GUI application needs, literally, none of that. CLIs can do awesome things, by the few who understand them. GUIs can do awesome things by my Sainted Grandmother.

    Before defending CLIs ask yourself this; are you defending the power of the command-line interface or are you defending the hours you’ve put into learning the command line interface?

    Kudo’s for the Nethack reference tho. I love me some text-based rogue-likes. Even thought they don’t LP well.


  13. vel

    not the learning curve, no. i defend the SHEER POWER that CLI has over gui.
    also i am in the processes of getting rid of the gui on my pc entirely.
    its not that we need a brick to explain it in a way WE understand, but giving multiple examples to try to show how good cli can be.


  14. vel

    //all of a sudden action from my end was because i was googling ‘fun CLI games linux’ and this was a search result. the title was stupid enough to get me to read the article, im ashamed to admit.


  15. garegin

    As an avid CLI hater, especially in networking scenarios where saving 20 seconds on setting up a firewall is next to useless, I understand that CLI has its place in automation and scripting.
    A good example is batched and recursive tasks. Even for home users this can be very useful. For example, renaming files based on conditions. In a GUI you would have to build a prototype program for these custom tasks. In CLI is bunch of pipes and loops and Viola! I’m thinking perl as a good example.
    The biggest problem with CLI is that it’s being forced down sysadmins’ throats for reasons of dubious efficiency. I don’t want invest learning some obscure CLI just to save a few seconds. The same way people don’t write in assembly just to have faster binaries.


Leave a Reply

Cymons Games. All programs provided without guarantee or warranty. Maintained by Joseph Larson.
If you have any questions or notice something is wrong please contact me. Powered by WordPress.