
The Return of the Command Line Interface - ghosh
http://avc.com/2015/09/the-return-of-the-command-line-interface/?utm_source=feedburner&utm_medium=feed&utm_campaign=Feed%3A+AVc+%28A+VC%29
======
teddyh
“ _In 1979, when I was working at IBM, I wrote an internal memo lambasting the
Apple Lisa, which was Apple’s first attempt to adapt Xerox PARC technology,
the graphical user interface, into a desktop PC. I was then working on the
development of APL2, a nested array, algorithmic, symbolic language, and I was
committed to the idea that what we were doing with computers was making
languages that were better than natural languages for procedural thought. The
idea was to do for whole ranges of human thinking what mathematics has been
doing for thousands of years in the quantitative arrangement of knowledge, and
to help people think in more precise and clear ways. What I saw in the Xerox
PARC technology was the caveman interface, you point and you grunt. A massive
winding down, regressing away from language, in order to address the
technological nervousness of the user. Users wanted to be infantilized, to
return to a pre-linguistic condition in the using of computers, and the Xerox
PARC technology’s primary advantage was that it allowed users to address
computers in a pre-linguistic way. This was to my mind a terribly socially
retrograde thing to do, and I have not changed my mind about that._ ”

— Eben Moglen, interview, 2000¹

①
[http://www.cabinetmagazine.org/issues/1/i_moglen_1.php](http://www.cabinetmagazine.org/issues/1/i_moglen_1.php)

~~~
agumonkey
Interesting fellow:

``` Moglen believes the idea of proprietary software is as ludicrous as having
"proprietary mathematics" or "proprietary geometry." This would convert the
subjects from "something you can learn" into "something you must buy", he has
argued. ```

------
trothamel
I kind of think that the various voice assistants (Google Now, Siri, and
Cortana) provide a sort of alternative command line. At least with Google Now,
I find it's only useful if I memorize a command sequence I know works ("Ok
Google, Navigate to ____") rather than allowing it to figure out what I want.

I sort of wish this voice command line was better documented, as it would make
the tools more useful compared to a world where we try random sayings, and get
disappointed when the software fails.

~~~
pessimizer
I've been a little obsessed with that kind of a formal voice interaction for a
long time, best illustrated for me with the Play For Today(/Tomorrow) episode
"Shades":
[https://youtu.be/7oFhdQJxhmc?t=481](https://youtu.be/7oFhdQJxhmc?t=481)

I love the way that there's formal-speak for machines that everyone just
knows, and expert systems to help with complex requests.

~~~
dllthomas
Interesting. For a while I've been wondering (in no particular depth) what a
scripting language would look like if you designed it to be spoken.

------
vegabook
Because moving a pointer around and clicking on stuff is essentially quite a
low-dimensional interaction. There are a bunch of things on screen and each is
either clicked or not (okay, maybe hovered), at a fairly slow pace. The
typical 87-key keyboard meanwhile gives you 87 on/offs right there and a good
typist can be doing dozens of these per minute. Compare the speed with which a
good vim user manipulates a document, with how you have to do it in Word. Of
course, a graphical interface provides a much higher dimensional _output_
device, but as an input medium with only a pointer, it's way behind the power
of a well thought out command grammar.

~~~
pinaceae
but using photoshop without a GUI kinda sucks, no?

~~~
snogglethorpe
Yeah, obviously which interface is "best" depends on a huge number of factors,
context, task, user, etc, and there is no universally best choice.

Even in the context of a graphics editor, though, where a GUI makes a lot of
sense generally, I often find myself wishing for a way to actually specify
operations using some language rather than using the GUI.

For instance, I select a layer, and then want to move it exactly 50 pixels
down, and then rotate it 45 deg and halve its intensity. Using the GUI for
that is often a cumbersome, if straightforward series of steps that require a
lot of busywork, and in many cases I have to very careful if I want precision
(e.g. carefully looking at the edge guides to make sure I move the mouse
exactly 50 pixels). For an experienced user, an equivalent textual command to
do the same thing would probably be far quicker and more precise (assuming a
halfway decent implementation).

Really you often just want a system that's flexible enough to seamlessly
integrate both types of interface[+], and let the user choose which is best
for them and the specific task at hand, hopefully allowing the user to use the
GUI at first (for ease), and learn equivalent textual commands as he gains
more experience...

Unfortunately that's not only more work to implement, but runs afoul of those
usual villains in any human endeavour, religion (not "real" religion :) and
tribalism... ><

[+] Of course, there are actually more than just two choices. For instance
there's a common split between "quick and simple" textual commands, like a
typical unix shell, and "real language" textual commands, e.g. allowing
commands to be specified in Lua or some other "real" language. Similarly GUIs
can come in a wide variety of flavors.

~~~
pinaceae
in photoshop this where keyboard shortcuts come into play. master-
photoshoppers look like competitive starcraft players in that regard.

same with excel btw.

~~~
vegabook
Shortcuts are good but not good enough, though. They're a single dimensional
layer on top of what is, in the whole Creative Suite, a workflow that has
elements of hierarchy, repetition, feature identification, conditional
selection, and many fine-grained adjustments on multiple dimensions. A well
designed command grammar can map to all of these usage patterns much better
than the flat superposition of shortcuts. And btw the command line and the
point/click pattern are not mutually exclusive.

Adobe of course was intimately involved at the very birth of the GUI, so I'm
not expecting it to change its culture anytime soon, but that's probably a
lost opportunity. Its products are some of the most complex around and would
benefit the most.

------
BatFastard
Command line interfaces are two edges swords. The purpose of a GUI is to make
explicit what actions are available to the user. Command line interfaces use
implicit knowledge. Implicit knowledge is more powerful in almost every way.
Since it allows a much richer set of tools and the ability to combine tools,
in a way that is not possible in a GUI. The issue with command line is that it
requires significantly more investment of time and knowledge learning the
implicit tools.

~~~
ploxiln
And yet, command-line commands are much more explicit than a click or drag in
a GUI, which depends on all the implicit state in the rest of the application.

Really, in both cases, some things are implicit and other things are explicit,
these aspects really don't set the two worlds apart. But trying to teach or
instruct someone, it's much easier to communicate a specific command-line
command, than explain where to click / drag (especially when GUIs are re-
designed all the time).

~~~
agumonkey
Very good point. Both of you. CLI have zero discoverability (even with good
completion, you're greeted with a vacuum, for a newcomer that's very weird).
GUI are far too stateful and coupled.

Somehow ipython notebooks are a nice attempt at blending both. You have an
easy linear visible state, yet you compose words.

------
bigger_cheese
I find smart phone UI's really annoying. I'd love it if my phone behaved more
like Unix.

It would be great to be able to do stuff like grep the address book to extract
contact details, edit a config file to change ring tone, manage alarms with
cron use apt to update all apps etc.

~~~
wingerlang
You are one of 0.0001% that would want that. The only thing that makes me
annoyed on a smartphone is pretty much the switching between UI and typing
things.

~~~
bigger_cheese
My main gripe is I really hate how many screens and presses I have to go
through to set what should be simple options.

I use my phone (2 to 3 year old Android) as my alarm clock. If I want to sleep
in for an extra 20 mins tomorrow I need to.

1\. Press clock button. 2\. Press Alarm button 3\. Deselect my current alarm
to deactivate it 4\. Press Add Alarm 5\. Tap repeatedly on the "scroll wheels"
to select correct time

If the phone had something resembling a CLI you could just echo the newtime +
Alarm into the scheduler.

Another example I get a text message from someone who is not a contact. I want
to save that number I have to open the message takes about 5 or six clicks to
"copy" the number into address book.

Why can't I drop to command prompt "echo _Phone no._ _Name_ >> address book

~~~
wingerlang
I can't say for Android, but alarm is usually quite sucky on iOS as well. I've
set it up to be recurring though, and I haven't had these annoying issues for
months.

If you're a developer and have the time and effort required, you could always
root/jailbreak your phone and fix the issues you have for yourself.

EDIT: it is also likely that people have already solved it, or made tools that
can solve it. I know people are already running cronjobs on their iPhones,
there's even an scheduling automation app and so on.

------
meeper16
Command line interface = My own garden

Microsoft Bob'ifying software development = McDonalds

The Ying: Complex systems require the ability to automate instructions and
tasks, including low level and high level tasks and without being inhibited or
insulated by the glory of a gui.

The Yang: Automation promises to simplify complex systems and which sometimes
results in GUIs.

~~~
dTal
Good comment, but it's 'yin" :)

(and while I'm at it they aren't capitalized either)

------
noonespecial
$>echo $COOLJ

 _" Don't call it a comeback, I been here for years"_

------
kayman
For power users everywhere, command line was always there.

------
espeed
We're getting ready for the Pipem developer launch, which is an open platform
for building text/voice/email "command line" interfaces to existing online
services: [http://pipem.io/](http://pipem.io/)

Here's our Pipem pitch at Tech Wildcatters demo day this summer:
[https://www.youtube.com/watch?v=o_0DSmZhLGw](https://www.youtube.com/watch?v=o_0DSmZhLGw)

