 CLIs just suck. Let's talk about it. Hi, I'm Heather Downey from Akta. Let's talk about how the human brain really works. Oftentimes, it's impossible to remember everything that we need to do unless we're doing it not just on a daily basis but many times a day. Being able to type rapidly, any sort of commands that you can memorize for the command line, can be very challenging if you're not doing the same thing all the time. Oftentimes, people have to go down quite a googling rabbit hole just to figure out exactly what they have to type in order to get this one thing to happen. By comparison, using a graphic user interface just seems to work a little bit better for navigating through different menu options and at least seeing at a glance what your options truly are. Posing this question on Twitter, I was surprised by the kinds of responses that I got. Kind of went like this. UI or CLI, I'm a very visual person and I appreciate menus available for me to explore that I don't have to remember. However, I've been told that real programmers use command line only. Do you have a preference? Check out the thread in the description below. There were definitely some great points on both sides, but I wanted to explain my position on and might take more in depth. For clarity, GUIs are graphical user interfaces and CLIs are command line interfaces. Let's start with why I think command lines suck. Don't worry, it's not that traumatic. It's mostly catchy title, mostly. Number one, commands require commitment to memory. In the beginning, many of us thought it was just part of our job to commit hundreds to thousands of commands to memory so that we could type with fluidity rapidly like something out of the matrix. I suppose you could have a browser tab open to Google just to list any ones that you don't know how to do or have to look up again. But all this proves is that commands are not intuitive to follow. Developers have enough to process with the software they're building. Thousands of keyboard commands should not be taking up valuable space in their brains. This is also why I'm a huge proponent of commenting your code. You can read a little bit more about my take on that in the description below. Number two, code results are just not always visible. It may be okay for some, but I greatly dislike having to check the diff between my last check-in using the Git CLI. There are lots of great GUI tools out there that make this a relatively painless process. Discerning the diff between your code is one where the CLI just falls right on its face. Guide-emerge conflict? I'm certain that most developers would use a graphical user interface for that, even if it means opening it up a notepad, which of course is a GUI. Three, CLIs can get in the way instead of guiding you. There are plenty of things to worry about in development. We've got a big job, but wondering if the bash script you just wrote deleted everything you just did should not be one of them. There aren't clear submenus most of the time, and CLIs often are documented well, so typing help doesn't really provide that exact thing. You end up going down a Google rabbit hole searching for something you could have found by just clicking on a submenu and exploring. Four, the terminal is not geared for human logic or conversation. From randomly assigned shortcuts to the phrasing of what you type to get anything accomplished, the language of scripts are just not designed to be easily understood by humans. For some, it's a badge of honor to work with something as difficult as a CLI. For others, it can be difficult to understand what the shorthand commands are even doing. It requires complex domain knowledge and takes additional mental cycles to process. Since I would rather focus on the business logic I'm creating, I prefer a graphical user interface for the mundane tasks. There's an entire website dedicated to the why of graphical user interface design, and in fact, it's something you should probably take seriously since you might be designing a graphical user interface yourself. Which brings me to why graphical user interfaces are better, or at least why you should give them a try. Number one, visual interfaces lower the barrier of entry. Since we all were not born naturally coding, programming is something that we need to learn. Our software tools should enable that process to be a lot easier. Some of the best tooling with visual layouts that I've personally used is GitHub desktop, Visual Studio, and IntelliJ IDEA. Streamlining my development workflow with good naturally assistive tools helps my journey as a developer tremendously. These tools help me explore their available options by allowing me to click on a menu and explore the sub menus below. Two, remote access is easier to use with a GUI. Sure, you can write in a script to get into another computer, but a visual interface often has the ability to remember the last box you're remoted into and a drop-down with options if you want to change anything, and a button you can push. It's pretty satisfying if you ask me and most of the population. Remotely accessing another computer with a GUI is relatively painless and easy to access with very little experience. IT professionals even use graphical user interface for remote access or to monitor their servers. Three, graphical user interfaces keep accessibility in mind. From color and text choices to instructive labels and intuitive navigation, a GUI often works better for developers who have accessibility need. There are often options to change colors or to the layout to work with the menu navigation in a more accessible way. Now there are tons of sites dedicated to this topic, so I won't go into it too deeply, but please visit w3 or usability.org to kind of go deep dive into the kinds of accessibility options that we should keep in mind. What I've learned is command line interfaces are anything but intuitive for a user. By contrast, Visual Studio Code has documentation around accessibility for anybody who may need it. Tab navigation, high color contrast, and screen readers are all helpful for users with various disabilities. Four, GUIs offer better multitasking and control. A GUI can offer a visual access or a snapshot of the file system as a whole. Being more user-friendly than a CLI, especially for novice users or non-technical people, makes a visual file system more utilized by the masses. A GUI has a window that allows a user to view, control, manipulate, and toggle through not just various folders but various systems at the same time. Think about how useful it is to be able to view several different columns of metadata for your file all at a glance. Finder for Mac, File Explorer for Windows, and one of the many different options for Linux show that this is a real need that we've all grown accustomed to. It can also be pretty handy to right-click or control-click on a file to see the options that are available to use on that file. Which brings me to the conclusion. Now that I've gone over why I think GUIs are superior and why I choose to use them, I have to admit that I still do use a CLI to do the tasks that a GUI is just simply not available for, or if I have to do a quick automation. The answer to the question that I originally posed on Twitter really is, why not both? Use whatever works best for your task at hand. However, GUIs have a lot to offer and you should utilize them because they were designed to make things easier if you are a human, which I hope you are. Let us know your thoughts on GUI versus CLI in the comments down below. Until next time.