Updated 20-Sep-2023

The Command Line Interface (CLI), aka shell, aka command prompt, is a powerful, key, and underlying interface to most operating systems. However, there are huge usability problems. The main issue is one of recognition vs. recall which has to do with human memory. While there are endless comparisons between GUIs and CLIs most of these are out-of-date, due to the fact that there is convergence. That is, in certain cases we are dealing with Graphical Command Line Interfaces (GCLIs).

Graphical Command Line Interfaces

For example, writing this in WordPress, there are a variety of buttons to help mark up the text (though I prefer to use Markdown which is a purely command-line memory-based system). The text editor Atom is perhaps the prime example. Hackable to the core is the byline of this highly extensible Node-based text editor. It is first and foremost an editor for software developers. Most of the rather disappointing discussions that remain unresolved are those precisely around how the gui should work (unfortunately there are no first principles that help with decision-making, so it is simply the whim of one or more core programmers, a very sad, contradictory, and confusing outcome. For example, needing to know that ESC will close the search-and-replace pane in the editor, and being deprived of an x to close that pane.

Command Line Interfaces Visibility

Command shells such as Fish Shell, besides additional shell script functionality, have some nice previous command control. For the more common, and somewhat sane Nano editor,things like Nano search and replace are helpful. But again, remembering how to do that is impossible (search on the web does usually work in these cases). Finally, just to do stuff that I want to do, and used to know how to do -- such as stopping and restarting the Apache webserver -- all the syntax has changed. So even when I used to know how to do that, the knowledge has expired due to various RedHat and Debian divergence on how to manage the very same Linux application (distribution madness). See also Mosh SSH replacement AutoSSH.

What is Needed

The above are all cases where intention is present, but execution becomes clumsy. Obviously CLIs have advantages, but there is no reason why they need to be so archaic, when most reasons for that are now obsolete (limited screens, memory, processing power, imagination, etc.). The command line should not just be limited to commands that are built-in and scripts, but should scaffold usability based on information provided. For example, wanting to do something with the apache server, sometimes called apache2, sometimes called httpd, any of those three terms, by themselves, should result in a list of recent and most popular commands related to them. The need to scroll endlessly through man pages should be relegated to the dustbin of history, no?