39 comments

[ 3.0 ms ] story [ 77.7 ms ] thread
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.

And here i thought MSDOS watered down the CLI concept...
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

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

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.
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.
You just perfectly described why I switched to VIM.
This is why you should use a graphically aware and displayed program, using a keyboard input interface. Like Emacs.
but using photoshop without a GUI kinda sucks, no?
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.

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

same with excel btw.

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.

(comment deleted)
No, using your shortcuts and actions in PS full-screen is a thing of beauty. having to stop what you're doing to go click on something can ruin your flow.
For power users everywhere, command line was always there.
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

Interesting to note that further down he talks about what i suspect was X11, and being able to use that to run something over there that presents the results over here. This in that a decade or so later we are basically reimplementing that using HTML+JS+CSS.
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. ```

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.

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

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

$>echo $COOLJ

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

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.

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.
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

I'm not a huge Siri user, but "Hey Siri, set my alarm for 8:50" works great and its something I use all the time, mostly because of what you're describing.
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.

"echo Phone no. Name >> address book"

And then you accidentally use ">" instead of ">>". Woops.

More and more I want my dumbphone fixed API back with 4 or 5 instant access zero latency operations. Quite often I barely have the time to swipe to unlock->camera ... I need fixed and tactile interactions. But that's for IRL usage. Otherwise when sitting in a train, generic data operations could be nice.
You can type commands into Siri. "Set an alarm for 6am".
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.
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).

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.

A good double-tab auto-completion in a CLI gives explicit boundaries and flattens learning curve almost to the GUI level, while letting you retain full flexibility and expressive power of a CLI.

This work wonders in systems where complete set of commands is (semi-)fixed, like Cisco IOS CLI. *nix CLI is somewhat behind on this front, unfortunately.

(comment deleted)