Did User Experience Peak with the Command Line?

2024-10-18

I try not to let myself fall into becoming too much of a caricature of a UNIX-like evangelist on this blog but over the past few weeks I've kept returning to the same question: Did user experience peak with the command line?

Yes, the command line. That thing that effectively serves as a visual shorthand for 'nerdy' 'technical'-types. Green text scrolling by on a black background. When presented as such, the command line can certainly look like an intimidating thing not intended for the typical user. In fact, many platforms will go to extreme lengths to suppress users coming into contact with the command line - wrapping it in a GUI, abstracting functionality away into pre-defined shortcuts, depriving the user of one of the most fundamental and direct ways of interacting with a computer.

Yet I think there's a real case here that much of the functionality offered by the command line is actually of more benefit to a typical user. As I hope you'll see, despite its bluntness, or perhaps because of, the command line I think offers some compelling design choices and functionality that could make it easier for users to interact with, trouble-shoot, and understand; offering a range of ways to minimise user frustration and extend capability that just aren't present in more 'user-friendly' programs.

Built in Explainability

If we consider a typical application, if you get an error you'll probably receive an alert dialogue that pops up saying that something went wrong and if you're lucky you'll get an error code - albeit one that you'll likely never be able to find any information about on its meaning.

If we consider the command line, many commands offer a verbose option, letting you increase how much information the command prints out. Just stick an -v at the end of any command, or even better - add multiple, and you start to move from messages that an error happened, to that an error happened because an argument was wrong, to that this specific argument should be formatted this specific way.

This kind of variable explainability I think is entirely missing from common daily software. Errors just are. It's up to you to either figure it out yourself or absolve yourself that "computers are just like this." Letting users adjust how much insight they need offers a way that lets experienced users receive a gentle prod at what they need to fix, while also allowing the novice to get a more guided answer - something they can then learn from and rely less upon in the future.

It's Easy to Share

The command line deals with text: text that can be redirected, formatted, and saved with ease (Thanks to pipes).

As the likely designated 'technical' person among your friends and family, what do you get when they encounter a problem? A fuzzy screenshot of an error dialog? A paraphrased copy of an error? Or just an exasperated ping that something isn't working? How could these issues be clarified by the command line?

It's possible to pipe the output of any command to a file and easily share that in an email, a message, a physical printout with minimal fuss. I don't have to check that the recipient has the right software to view that file - it's text, it'll open in something. You don't have to try piece together what's actually going on, you can just look at exactly what happened.

Easy to Follow

You type a command, the output goes below, you type a command, the output goes below. Your cursor indicating where you are, the command prompt (Usually a $ or your username) helpfully indicates what's your input and what isn't.

It's been my experience that many issues stem from the user not knowing where to look. They're working on the left of the screen but the tiny button they need has materialised on the right. The worst culprit being egregiously silently spawning the window they need behind the current window, leaving them wondering why everything appears to have suddenly locked up.

Learn as You Go

If you only half remember a commands name, you can hit TAB to see all possible options. If you're really stuck on many platforms you can type apropos followed by some task you want to perform and get a list of suggestions. What would the alternative be in other contexts? Scrolling along a tab bar? What options are under 'File', 'Edit', 'Insert' etc.? And of course there's always the man pages, a centralised way to find out anything you need rather than relying on the gamble of search results.

Looking Forward

The command line is obviously not without its faults however. GUIs inherently offer much more visual freedom and creativity than could ever be possible with just text. The command line can also be unforgiving as well; always defaulting to that what you typed is definitely what you intended (There's a reason that commands like dd are nicknamed the data destroyer).

I'm not advocating that your typical user should be dumped in front a TTY and told to get on with it. Rather, that a lot of the functionality we see in the command line is largely absent from other software. Much friction and frustration could likely be resolved if users could variably adjust how much assistance they needed; had some way to get a shareable copy of what's wrong that they could send to someone in the know; and that had a built-in way to gently nudge their memory when they're not sure how something should be formatted.

The command line may appear sparse and unforgiving at first glance, but to paraphrase a well-known quote about UNIX:

[The command line] is user-friendly — it's just choosy about who its friends are.