Dec 05 2016

Command Prompting

The soul of your computer lies under it’s flesh. Nay, not the bones beneath the windows and icons–for those are just the scaffolding of the Graphical User Interface. Nor is it the circulatory system of wires and drives pumping data about. Nor even the CPU and memory making up the brain and nervous system. I’m speaking of the soul. The only part of the computer that can speak directly to a human being without hiding what it is.

Have you read Neal Stephenson’s paean, In the Beginning was the Command Line? If not, I recommend the digression. It’s a long way ’round to the same thing I am saying here, but a better one all the same.

The computer programmers reading this mostly understand already. But this isn’t for them, I preach not to the choir. Let me tell you a secret you could never learn at Hogwarts: should a muggle learn the command line, the muggle becomes a wizard. It is true. Full command of your computer is yours, anyone’s. But it comes at a price…

The cost isn’t money. And the only pounds of flesh are the ones you will add sitting in front of a computer screen. No, the price is time. You cannot become proficient at the command line overnight. Yet you can get started easily with little fuss.

Try it now! If you are on a Microsoft Windows machine, look for ‘Command Prompt’. PowerShell is the real wizard’s tool here, but not required. If you are on an Apple Macintosh, look for ‘Terminal’. If you are on Linux . . . never mind, if you are on Linux you already know what to do.

Now, there you are. Go ahead. Use it. What are you waiting for?

OK, I lied. There is a great deal of fuss involved. Using a command line is a pain in the ass. It gives you no help at all, although some command lines allow you to type ‘help’ and get some kind of semi-useful response. On a command line you are left alone in a digital wilderness without a map or a compass. Even experts spend a lot of time searching the web for clues and reading documentation to discover which command they should use or configuration file they should tweak to some particular end. Or, more likely, what they are doing wrong in their commanding and tweaking because it seems like there is no end in sight. By their nature command lines are damn hard to use; this is why we invented Graphical User Interfaces, even if they really are rather useless in furthering a human’s dialogue with the computer. At least they let a regular person get basic tasks done.

Of course there are those working on Artificial Intelligence designed to create an actual dialogue. Making it so you simply discuss your need with the computer until you arrive at a solution together. But, in truth, this is a long way off; and even if we manage to make a conversation between a human and a computer more clear than that between two random humans it will still fall short of the ideal.

Why? Because we will be making the computer talk like a human and understand like a human. It doesn’t give you the wizardly power over the computer a command line can give you; it simply means you will be arguing with your computer because it did what you said and not what you meant.

There is no such confusion on the command line. There you speak directly to the soul of the machine and it does exactly what you say. You can get it wrong, certainly, but it’s always you getting it wrong. Not the computer. You. Yet get it right and your computer will always do exactly what you want. The only problem is that time thing I mentioned. Only someone obsessed with computers would spend the time and effort and directionless anger required to master the command line. People like me.

Here’s where I admit I lied again. I really am talking to computer programmers, my sisters and brothers in code. Those who know of what I speak because they too have screamed in frustration when something that ought to work just isn’t working. Over and over, not working no matter what we try. Pounded the desk because we searched and found hundreds of people complaining about exactly the same problem, but no one posting a useful explanation of why. Maybe you find some cryptic incantation that fixes or at least changes your problem, but you don’t know why. And not knowing why means you haven’t gained the conceptual framework required to avoid other classes of the same problem. It means you haven’t gained a better understanding of the computer’s soul.

There are lots of things we could do to fix the command line, yet we do not do them. We could add a basic ‘help’ command everywhere; a command that when entered without an argument or option assumes you are lost and need a map. We could write better documentation and we could make it easier to find. We could even come up with a lingua-franca of commands sharing similar arguments and options so we don’t have the extra cognitive load of knowing the meaning of ‘–foo’ is always entirely different depending on context. We could do many things to improve the command line experience, but it won’t be enough.

Not until we add one more option. Like ‘–help’ (or ‘-h’ or ‘-?’) this option has the same meaning for every single command. But this option doesn’t describe a command or sub-commands or arguments or options. No, it does something different–it tells you why.

And that is why I’m begging those creating or maintaining command line software to add this new option: we need ‘-e’ or ‘–explain’.