No way. I've been designing and coding interfaces for 10 years, and time after time one of the biggest constraints for what is on/off the screen is the user's memory.
Want to know why the command line is hard for plebs? It's because they don't know what the options are. They don't even know what they don't know.
The whole point of a GUI is to convey the possibilities. Show users a menu and they get to pick something. This isn't going to change anytime soon. At least not until terminal commands are taught in school alongside the alphabet and multiplication tables.
This simply is an artifact of the original design of CLI. You start by writing the command or function, and then you provide parameters or arguments. The order in which these things are provided leads to poor discoverability.
Instead of starting with the command, we should start with an argument. Given a "thing" (that likely exists in your UI), such as a file, a song, a person, a chunk of text, show me the list of commands that accept it as a parameter. You'll quickly discover that a chunk of text can be passed to functions such as "tweet", "copy to clipboard", "create memo", "search on Google", "translate". Congratulations, you just invented the contextual menu, which people have been using for decades.
"Things" are easy to discover; you can see them. Commands that interact with them, are not as easy to discover; you can't see them. Let people touch or name things (with or without a query language), and once they grabbed the instance they care about, show them what can be done with it. It's that simple.
Before:
> /tweet "some random thoughts" // where you had to know 'tweet' existed as a command
After:
> "some random thoughts" -> tweet // where 'tweet' was auto-suggested, along with 'search', 'translate', 'copy', etc.
This sound about as useful as a man page. For me it often goes like this:
"What's the command that shows me file system usage again?"
> man -k file system usage
result = 5 pages of matching commands, often poorly formatted, word wrapping oddly, sometimes without even carriage returns between the commands, so it's all one long list. And this is in Unix which has had something like 45 years to clean up this mess.
I don't hold out hope that this sort of interface will ever be presented usefully, and we already have a better system in a GUI.
A simpler alternative that has existed for decades in Mac OS is right-click disk -> Get Info, which is analogue to right-click disk -> Properties on Windows. That’ll give you usage/free space remaining and is probably as discoverable as it gets short of creating an entirely separate app explicitly named “Disk Usage” or some such.
Simply getting to a finder window where I can do a "Get Info" on a hard drive requires finding your way to the "Computer" finder window, which requires digging in menus or right click context pulldowns on window titles (?).
While it works on folders, it just gives you a question mark for the size while it is working out the size of the sub-items on disk with no indication that it's actually going to change that.
So yes, there are alternative methods, but they are no more friendly to discoverability as the Apple Menu method.
'As opposed to the discoverability within the Mac interface for showing disk usage?'
The answer lies in your question. A lot of power user (yes, relative but Apple have focused on consumer) functionality is buried in the gui, and every release pushes stuff deeper in to the interface.
A nice example for discoverability in conjunction with text commands is JIRA's search capability with JQL.
It allows you to type queries, and each point offers dropdowns that list valid attributes, operators, values (in case of limited choice of values). I like it.
This question seems to point in this direction of changing our shell syntax from `vo` to `ov`, based on Jef Raskin's Humane Interface http://ux.stackexchange.com/questions/48051/how-to-extend-th... .. I imagine pluggable shell grammars would allow open ended exploration this way.
Oh, and BTW, GUIs didn't buy ergonomy, sometimes you need to open an application then the data (aka /tweet "bla"), early systems had a simple 1:1 map 'type' 'program' with an 'open-with' intermediate. Then they added 1:N ... One day it will be a tiny Hindley-Milner unifier ;)
The gui equivalent would be right-clicking on a thing. There's probably a lot on what you should put in that menu, and you could probably take some general principles from that.
Except the text to tweet is not the subject, but rather the object. And English is VO, just like the command line. The suggestion is that we use Japanese's OV order.
I don't understand what makes this more useful as a text-based thing, rather than, say, something like the OS X right-click Actions/Share menus, especially when when the latter can work on fragmentary parts of other documents without needing to juggle interfaces.
One of the problems with this that probably occurs to everyone is that there are many more actions you can do with a file than there are files in a typical directory. So you might say > how file, and it might return 1000 things you can do with it.
To answer my own objection, > how (or whatever the tool is called), or just the object itself as in the author's example, could display categorized actions, or offer a way to navigate submenus, or it could limit initial output to things that a non-superuser would want to do and offer additional options for superusers to browse more advanced options (or assume they know what other tools exist and use them directly).
This is an interesting point, but I raise you search and types. One of the points where "the Unix philosophy" (as usually espoused at least) is sorely lacking is that all programs interact with what is popularly called "text" (or a "single type"/"unitype").
For practical reasons it isn't always text, but more importantly (the first bit is a subset of this problem): almost every program has to understand (100%) the output of every other program it has to interact with.
If output were typed our applications could ignore (reliably) the bits they don't care about.
If output were typed we could search by output-type (e.g. diff produces patch-like-output, so don't bother piping to "xargs", but allow "less" (any type of input) or "git apply" (patch-like-input) or "patch" (patch-like-input).
Types could add a huge amount of searchability to CLIs -- and for some reason this isn't appreciated even though we've seen it in a much more limited context such as OOP.
(I think my original inspiration for this line of thinking is Paul Chiusano, and he probably deserves most of the credit, honestly.)
EDIT: Actually, pondering this a little more: All programs should be forced somehow(!) to carry a "source location" for the source of their output. This is such an annoyance in the daily life of a programmer if you perform a chain of commands like "git diff ... | grep FIXME | grep ^+ | ..." just to get a grip on the FIXMEs you've introduced. The output doesn't show line numbers, because... well, for no really good reason, really. It's just that transformation as text meant that we sort of lost that bit.
"almost every program has to understand (100%) the output of every other program it has to interact with."
While I mostly agree with your thesis that types could be great in the shell, I think this particular bit is incorrect in a way that undermines your argument (not, I think, fatally). If a program's output doesn't match up with another program's input, a bit of sed (and maybe some awk) will usually do the trick. And if we added types, that would still be the case - output from one command would have to be the right type to be input to another.
You're right... in that we can fudge around these things with "fuzziness", but I don't think that's sufficient.
Btw, I didn't mean that types should be the arbiter of "a | b", just that it should guide the search process. Obviously, you should always be allowed to really choose "c" even if the system determined "b". But our UI could be so much efficient if the system chose "b" most of the time.
EDIT: Classic case, btw: "find ... -print0 | xargs -0 ...". Unless we have pervasive and dependent types, how is any formalism going to know that?
"You're right... in that we can fudge around these things with "fuzziness", but I don't think that's sufficient."
Well, it's been sufficient. That doesn't mean we can't improve on it. My point was simply that assigning types doesn't actually change things - it is still the case that every program needs to be able to interpret whatever is generated by every program you want to pipe into it, or you need some kind of translation.
'Classic case, btw: "find ... -print0 | xargs -0 ...". Unless we have pervasive and dependent types, how is any formalism going to know that?'
Dependent types aren't necessary for that. They might be necessary for `find ... $MIGHTBEPRINT0 | xargs $MIGHTBEDASH0`
Edited to add - or wait, you mean the resulting command built by xargs may have a type dependent on the arguments produced by find? That's... messy, yeah.
> Or wait, you mean the resulting command built by xargs may have a type dependent on the arguments produced by find? That's... messy, yeah.
Yes! Thinking about interactive CLIs... yes.
EDIT: I should add: My main point here is that types would constrict the search space to be reasonable, rather than seeing that "1200 commands are available, do you want to show them all?" prompt. I really think we could be doing much better in this space.
Two options for showing line numbers: (1) pipe the first command through nl; (2) use a single grep with the line numbering option (it's at least in GNU grep):
grep -n '^+.*FIXME'
You can also pipe git diff into less or "vim -" to use slash search.
Thanks for the tip (and I think I might actually have it written down in a file somewhere), but this is missing the point. I shouldn't have to do this -- it should be automatic. Why? Because it's required for so many different tasks. For example: Source maps in the web world.
EDIT: ... and it's actually possibly(!) even worse in the web world where you often have a ridiculous number of levels to your "transformation". Personally, I have never got "bower (source) -> grunt -> ts/(scala.js+closure) -> babel -> es5" (with source maps) to ever work even semi-reliably.
(I know we have too many things in this pipeline, but it's what we have to deal with.)
I was actually waiting for your reply saying that I had missed the point :-). I think that automatic line numbering (as an example) misses the point of the UNIX tool philosophy, namely composability. It would seem that the designers of grep and nl thought those were separate tasks. The point of the CLI is that you can make the simple building blocks do whatever you want, for any workflow. You can always make an alias for grep that does numbering by default.
Basically, however widespread our personal workflows are, there are vastly more workflows we havent't even thought of that are essential to someone else's livelihood, for whom automatic numbering (or whatever) would ruin everything.
As for source maps, yeah, that's got room for improvement.
> I was actually waiting for your reply saying that I had missed the point :-).
Hah!
EDIT: I had a really complicated thing here, but decided to delete it... because I don't think anyone understands any of this "computers" thing properly, including me. Hope you understand :).
A problem with most OO programming languages is that methods are declared as part of the class itself. This makes it difficult to extend an existing class you don't control, or reuse a method elsewhere.
C# supports extension methods, which are basically static helper methods whose first parameter is the type to which you want to attach the method. For example, I could create a 'ToTitleCase' extension method on type 'string'. Then, given a string instance, I can simply do 'myString.ToTitleCase()'.
One step further would be to add support for multiple parameters. For example, instead of listing all functions that accept an 'int' as an argument, you could ask for all functions that accept both an 'int' and a 'string' as an argument. Given 3 and "test", the 'repeat' function could be suggested, resulting in "testtesttest".
To make things even better, one could provide (explicitly or not) the return type of the function they're looking for. For example, if you're assigning to a variable of type 'int', and all you have is a 'string', then you probably want to see a list of all functions that take a 'string' as an argument, and return an 'int'. In that case, you would see functions like "parseInt" or "getLength". It's kind of like playing domino, where you already know the type of the input and output, and only need to connect them together. Keep in mind that you can't always transform one type to the other in a single function call, which means the system would also need to recommend combinations of functions, such as "parseDateTime + getDayOfWeek" when you need to transform a 'string' to an 'int'. Perhaps the name of the arguments could even be used as some kind of sorting heuristics (a 'string' variable named "date" surely should be parsed to some kind of DateTime at some point).
Not sure what you're comparing OO to , but it certainly makes l little sense if you're comparing with FP. Grouping by function is so much more natural than artificially attaching the same function into different objects. When I copy, do I care whether I'm copying a document or a program? All I care about is the functionality, which is copying. This applies to many cases. OO design forcefully fractures every function into different objects, which makes extension a nightmare.
It would be an interesting exercise to take a corpus of user CLI commands, and try to use the types and formats of the arguments to predict the command.
I don't think I would entirely agree with that. Surely it depends on the developer. I can build a traditional CLI program faster than I can arrange a GUI for an equivalent program in something like interface builder although I've met developers who are faster the other way around.
I'm sure that people at Lyros, AltaVista and Excite were saying the same whilst building their heavy UIs before Google came along.
The problem is on-boarding - once the user learns to ask for computer a question then the text (or voice) interface has the potential to be on a completely different level than a graphical interface.
Just imagine - instead of searching through a dozen menus for an option you just ask.
Hell, that's how most people work with Microsoft Office now - fumble around trying to find out where they've hidden the option. Fail. Open Google and type "how to change signatures in Outlook 20XX".
Slack solve that brilliantly - their on-boarding is well designed - the way it gradually introduces features and reinforces concepts is excellent. It reminds me of modern videogames in design.
This is not a good example. Google did not beat Lycos etc. by on-boarding any non-geeks to text commands, instead they proved the effectiveness of page-ranking dumb searches.
Non-geeks do not use additional search syntax compared to the number using the nice obvious and clickable "Images" or "videos" tab.
The Google example points at one mayor constraint of text-based UIs: either you severely restrict the language that people can use to query the system, or you will be dealing with a really hard, Google-size problem.
"The Google example points at one mayor constraint of text-based UIs: either you severely restrict the language that people can use to query the system, or you will be dealing with a really hard, Google-size problem."
I disagree, and I think we can see the counter-example very clearly with altavista.
You could go to altavista and type in "dumb" search queries, just like google.
But simultaneously, with no change at all in the UI and no constraints imposed on the "dumb" users, you could also type in very sophisticated boolean searches like:
linux grep ("regular expression" and "regex")
and get very precise and sophisticated search results.
They beat Lycos etc by having a better product built around a very different paradigm : better performance from the text search, negating need for the heavy graphical hinting.
That's what I was trying to get at :)
For the time I'd also argue that their "on-boarding" was excellent: a textbox and two buttons, you can't get simpler :)
The 2015 equivalent would be adding animated instructions in a pencil typeface on the search box and buttons. The demographics and expectations are different now.
> Just imagine - instead of searching through a dozen menus for an option you just ask.
A lesser example: half the time I want to use a menu-item in OSX now, I find it by going to the Help menu and typing something in the fuzzy-match box. I'm not sure why this hasn't been made the primary OSX menu interface.
"Want to know why the command line is hard for plebs?"
Not really.
These type of comments are almost always pure speculation, based on one's own experience.
Here's one thing that is true: Everyone who uses the command line was once a "pleb".
Txt'ing is what its name implies. Typing short lines of text. (And anticipating a quick response.) Seems reasonable to make a comparison to using the command line.
IRC, or today's "chat", is also arguably similar. Typing short lines of text, and expecting a quick response.
I have wondered about this for years as SMS and later Twitter, and now "enterprise chat", i.e., typing short lines of text, became popular.
But winning a popularity contest for how people interact with a computer is not something that really interests me.
My prediction based on last 30 years of computing history is that command line interface is never going to disappear (that is one reason I stick with it). It is there for whomever may discover and choose to use it.
"They don't even know what they don't know."
Exactly.
And yet countless GUI lovers/CLI haters continually ask us to believe that some hypothetical user would _choose_ not use a command line interface when they do not even know that such a thing exists; they were never given a real choice.
Who cares what other users want to use? It is their choice, not yours.
As soon as I learned to start every interaction in the CLI with the word 'help' I became many orders of magnitude more proficient with it.
Good CLI programs have a relatively straightforward path from 'help' to where you need to go. Contrast this with GUI's, which is what people are familiar with:
- The help is basically the instructions manual for your new gadget that you won't read, too detailed, not helpful and you'd rather just play with the thing and learn how it works.
- That's also how people solve problems, by playing around with the available options in the interface or if you are a 'superuser' by googling.
So basically people have been trained not to ask the program for help, they'd rather go on the internet or ask their tech friend for help. Which means they are predisposed to not 'get' CLI programs.
There's also the fact that man pages are way to threatening (and ancient). They should be structured like a wiki (with links between each other and to definitions as well as a conversation layer for improvement etc.).
Telegram bots are CLI programs that follow the unix philosophy (in a sense) and are a step in the right direction when it comes to starting an organic conversation with the user. However they are also very small programs and there is still a lot of improvements to be made.
So no terminal commands don't need to be taught in school and GUI's aren't the ultimate solution. If we were to pour the same amount of effort into improving CLI interfaces as we have with GUI's computers would become much easier to use. However that doesn't mean that CLI's are the ultimate solution either.
Hopefully people will one day realize that personifying tools is actively harmful and that everything is context dependent.
With CLI help we could do a lot better than we are doing, when I used Juniper routers I found that very refreshing they really tried to make help very easy to get.
You're both right and wrong. Text doesn't mean obscure and cryptic. Things are converging. Emacs, light table, ipython notebooks. REPL, text, different views, both expressive and welcoming.
GUI are to harvard for me, data and actions are two distinct worlds, too distinct worlds.
Yeah, your snark is getting down voted but the OP is not, probably because something about it 'resonates', and by resonate I mean 'has mass appeal', and by mass appeal, on this particular subject, I mean 'probably adopted the snark from someone they heard in a coffeeshop', i.e. San Francisco. Have an up vote.
I mostly agree with you. There are related exceptions. Take the Metro UI language as an example - minimal use of icons, high usage of text and plain shapes. It's becoming quite pervasive, the new iPhone UI is loosely Metro and Material seems to be inspired by it.
On the disagreement part, one thing is particular stands out:
What about semantic UIs a la spotlight? I always found those convenient because they allow me to dump what's in memory rather than seeking out the elements that correspond to what I have in memory.
Is there any reason why we aren't teaching a command line concept with the alphabet and multiplication tables?
Not that I disagree on how discoverable a GUI is. However, many of us got that exact experience on 8 bit computers and it proved high value.
There isn't a lot of difference for young people today. If they do learn what a command line is, options, syntax, pipes, arguments, they learn a whole lot. Done in the context of common apps they would use is a very good thing too.
This is something that I don't like with so many mobile apps. The options are evident by looking. Tinder has swipe left, right. Pinch to zoom. Buttons are just text, etc.
Design paradigms based on mapping of user interaction to memory rather than intent may be the reason that memory is a constraint. Query is to memory as search is to intent.
This is an ad for Partyline. The thesis, sadly, is poorly demonstrated.
This should have been called "The present of UI input is text for this particular use case".
Text (or speech) as an input method is alright when you know exactly what you want. However, this is not a very good exploration interface, where you need to interact with things that are presented in a 2D/3D space. Text also isn't very expressive when it comes to consuming content.
The future of UI, in most cases, is no UI. Let some AI study and understand you, and let it make decisions on your behalf.
Wolfram Alpha suffers a bit from that, I think: You can query a great lot of things but for many of them it requires you to a) know about that you can query that, b) knowing how to query for that, c) how to give options, parameters. The natural language interface sounds great and makes for awesome demos (like »Wow, they can actually understand that?«), but it's horrible for discoverability, especially in cases where you can try five different ways of saying the same thing but only the sixth would actually yield a result.
The shortcomings of natural language interfaces are obvious, and I cannot understand why so many people believe it to be the future.
Humanity needs a formal language, which requires formal thinking. Ambiguity is not a problem when a language is used to browse, explore and clarify thoughts, but this kind of interaction needs to be feedback-driven.
You can't just input an ambiguous natural language query and expects accurate results. However, you can start with an ambiguous natural language query, and quickly make it into a formal one thanks to smart auto-completion. Only when the query reach a formal threshold should it be executed.
Formalization could be done in interaction with the computer.
For a basic example today, we can look at how Google correct your query and suggest other queries, or any other form of auto-complete and auto-correct
The future of UI, in most cases, is no UI. Let some AI study and understand you, and let it make decisions on your behalf.
Assuming for the moment that this is a desirable outcome, how would you train that AI?
Today we have a vast programming industry and software supports a huge amount of what we do, yet we still struggle to write non-trivial software that behaves correctly in all cases. That’s partly because even with precise and unambiguous programming languages, specifying exactly the behaviour we want turns out to be hard. It’s also partly because we sometimes don’t even specify what behaviour we want in advance, because we forgot to consider a certain case or didn’t anticipate a certain interaction.
What you’re talking about would require advancing beyond programming with precise technical instructions and into creating systems that can handle complicated but unanticipated situations in the way the humans running the system would choose themselves or at least consider an acceptable or desirable alternative. But how will such a system “study” and “understand” what is required of it in an unanticipated situation?
I’m not saying no-one will ever have better ideas than we have today for dealing with these issues, but I suspect we’re a very long way from achieving the kind of general purpose AIs you’re talking about. I can believe that within some of our lifetimes we will see systems that make educated guesses but are on balance more reliable than humans in certain specific cases, perhaps if the people working on self-driving cars continue to make good progress. On the other hand, that’s also a great example of something where some very smart people have been working for several years and with vast resources to handle a single situation that we teach kids to deal with after a few days of training, yet they’re still a long way from the kind of futuristic AI we’re talking about, which perhaps gives a sense of how hard this kind of problem really is.
Knowing what I want is hard. Knowing what someone else wants is even harder, and the assumption that it's easy underpins graphic interfaces. Under the traditional model, the menu is only populated with things that a design committee thought I might like to do. I can't compose compound commands or automate multi-step tasks or integrate external tools in front of or after an arbitrary menu pick. Traditional GUI's are usually "See Spot Run" or the entire Oxford English Dictionary. They embody query rather than search. Their static iterative rather than lazy possible.
Words are better than pictures of hamburgers and floopy disks because we think in words not icons.
I think a better example might be the search boxes that have been added to launch menus (Unity, Windows 8, etc...). People would probably be more likely to start using that as a text interface than a few chat commands. Google figured that out a long time ago.
Text generally has a higher signal to noise ratio, but I wouldn't agree that interfaces are evolving that way. Text is typically a power user interface, but I it could probably be more effective for simple things too if it were designed well. It's faster to interact with (see Fitts' Law) among other potential benefits.
I think the google example is interesting because if you watch people use google they formulate their questions as if they are asking a human and not a search engine or a command line. They don't search for keywords, they don't use the + and - operators, they don't enquote snippets of text that should match exactly, no they ask a question, starting with how/what/who/when/where and sometimes even add a question mark at the end!
If i were to find out who is starring in a movie for example i would search for the movie title, click on imdb and browse through the actor-list. If a non techie would do the same thing the query would be something like "who was the lead actor in X?".
Now translate this into replying to a comment in a bug tracker, google has thousands of engineers just working on interpreting "stupid" queries, there is no way this type of AI can scale and work against some arbitrary API to a bug tracker maintained by 5 people.
Discoverability of available commands is also still an issue, not even solved by google. In their case people only know about one command because there is only one: search. If you were to add commands such as "create task", "reply", "send email", "tweet", how would that even work, is it first interpreted as a search query about how to send emails and then it suggests opening your email client? While it's a nice way to start your email client, and exactly how windows start menu works, it doesn't help any further in the workflow of translating GUI-tasks into command line tasks because it only takes you past the first step.
I think people probably do tend to type queries into search providers like Google in whatever their native language is. A web text box might not be the best example for people trying to do discrete tasks though, but at a higher level the queries are probably part of some goal like "get times for new Ridley Scott movie" or "check availability of X" . I'm not sure I can see people typing that into a launch menu, but I'm guessing that's roughly what Microsoft wanted to see happen with Cortana.
Stricly using commands, discoverability probably is still an issue. Text doesn't necessarily need to be command based though. For example, if there are 10 (100, 1000, etc...) options on a screen I suspect it's probably easier to select using text. In some ways it could be similar to a touchscreen.
It's not exclusive to slack, for example: twitch chat there are a bunch of text commands that people love to use. When people use emojis and other such things they usually use a text macro. If you've noticed with programs like photoshop and illustrator, it's recommended for novices to learn all of the keyboard shortcuts.
If anything this points to the future of UI being a combination of text and point and click.
It's not exclusive to slack, for example: twitch chat there are a bunch of text commands that people love to use.
People who use Twitch a lot love to use them. People who don't use Twitch much don't bother. This backs up the argument that power users like macros.
When people use emojis and other such things they usually use a text macro.
True, but that might be because PC keyboards don't have emoji. There's no other option. People certainly don't use a macro on mobile; they use a an emoji keyboard because that's what they prefer.
If you've noticed with programs like photoshop and illustrator, it's recommended for novices to learn all of the keyboard shortcuts.
There's an assumption when you're learning something with the end goal of understanding that application that you're on the first steps to becoming an expert (aka power user). If someone is only learning how to achieve a single end result they don't start with the shortcuts. For example, someone who just wants to learn how to resize and crop images in Photoshop just learns the two or three features they're going to use and then they stop.
I don't know very many people outside of the software industry who are happy with a command line interface, and even fewer who're happy with macros on a command line.
Also, if Partyline is the future, then I don't like it. The two examples in the article are inconsistent;
/partyline create Signup endpoint is 500'ing label:bug
vs
/partyline create:task Write about the future of text-based interfaces
Why is the first one using a "create" verb with a "bug" label and the second using a "create:task" verb? Why not "create:bug" in the first one, or "label:task" in the second?
True, but that might be because PC keyboards don't have emoji. There's no other option. People certainly don't use a macro on mobile; they use a an emoji keyboard because that's what they prefer.
I actually set up the few emoji I use as macros, so I don't have to switch keyboards. Then again, I fall into the power-user category
Come on, nobody's used CAD programs with integrated GUI and command line both equally accessible?
It's super intuitive, entirely customizable, and every button press results in a listable text record of each command with combined access to either windowed variables (spline radii, inputting coordinates for start and finish points, entering macros on the fly, routines, accessing algorithms)
This has all been old news for decades.
Now, adapting Autodesk's approach for other fields?
Can't be impossible. Still, engineers in many fields have enjoyed such flexibility as a matter of course. Take a page from their experiences.
If you are optimizing for some variable (speed, ease, movement, etc.) there are cases where each of CLI and Mouse are the best choice.
For instance, selecting text: I know very well how to do this in screen, pine, vi, etc., but there's really no point and it is never the right choice. Even in a fully CLI terminal environment with not even a browser open, I do still want a pointing device for selecting text.
You make a good point. I haven't used autocad before but after trying other cad programs and being frustrated with the lack of cli control it makes sense. What you explain sounds awesome!
Unfortunately, the current paradigm of tools for gui's (and even cli's) remain incredibly static and inflexible in their approach and design. It's not a problem that we don't know how to do it, as the autoccad example shows, but rather developers and companies lack the gumption to figure out how to make portable libraries and platforms based on it.
By this I mean, that the autocad program would have to have some kind of dynamic data and code system with rules and an internal grammar for composing them. It reminds me of the old joke "every program evolves until it reimplement common lisp -- poorly". This can be done in C++ and java, etc, but you end up basically building your own dynamic lisp like system. This often gets encapsulated in design patterns built into complex class hierarchies.
Basically, my take is that while it's possible to build on autodesk's and others examples, most efforts are either too academic and esoteric or just poorly executed. I think the culture in development is getting to a point this approach could be widely adopted.
> The see-and-point principle states that users interact with the computer by pointing at the objects they can see on the screen. It's as if we have thrown away a million years of evolution, lost our facility with expressive language, and been reduced to pointing at objects in the immediate environment. Mouse buttons and modifier keys give us a vocabulary equivalent to a few different grunts. We have lost all the power of language, and can no longer talk about objects that are not immediately visible (all files more than one week old), objects that don't exist yet (future messages from my boss), or unknown objects (any guides to restaurants in Boston).
>In the past, we thought the future of computing would look complicated: lots of buttons, multiple screens, and crazy interfaces.
... followed by a shot of the 1960's Star Trek ship's deck, then saying we're headed for command lines instead. Since 50 years have passed since that set was designed I thought I'd google how designs have changed. Here's the space shuttle
How do you reconcile this with the declining popularity of desktop and laptop computers, and the increase of smartphones, tablets, and other keyboardless touchscreen devices? I haven't noticed an increase in keyboarding skills either, which are absolutely essential to use a CLI well.
I wish CLIs would become more popular amongst the general population, but it seems GUIs (which are also becoming "flatter" and less discoverable, ironically enough) have taken over completely for almost everyone.
I've had a laptop with a broken keyboard, that I tried to drive with a pointer. And a system without a mouse driven with a keyboard. I was surprised how much I could do with the former.
I like the terminal, and I am also a reasonable touch typist. I don't particularly enjoy typing though. I've tried a few different keyboards. And I _do_ get the power of the CLI. But I think it's a barrier to computer input. And it's a barrier to free conversation. Check Youtube comments for example. I think some of the terseness (think Twitter) results as a result of text entry being laborious. I'm not familiar with using a tablet - and I always feel somewhat restricted and impotent when using mobile devices, which I figure others feel when using a keyboard.
OSs could make text entry far better and centralise it. Portable dictionaries and shortcuts for example. Yeah you can do that by keeping shell scripts on a remote, but it all feels a bit hodge podge.
Jumping from one CLI to another, different apps, etc can feel nasty. And I'm personally not happy putting my primary CLI in a cloud based SILO.
Counterpoint: I was with a bunch of friends when I was young, we wanted to play some music, and we had a computer with some MP3s on it, AND speakers, but we happened to not have a screen lying around at that time.
Didn't have. A screen.
So I asked the guy, "Where are your MP3s?" (Answer, "D:\Mp3"), turned on the computer, then hit:
- WinKey-R
- D:\ <Enter>
- Mp3 (quickly, in order)
- Context Menu Key
- P (as in "P"lay in Winamp)
Voila, music started.
Let me see you control a computer blindly with nothing but a mouse :).
Slack is not a text interface. Slack has as text interface for many common operations, but you can't ignore how much GUI Slack has.
The future of UI is having graphical and text interfaces at the same time. Throw in touch, speech and sight for fun if you want. None of it is going away. Most programs need a simple and very well thought out GUI, aimed both at new users and at discoverability of features for experienced users, and more powerful text based interfaces and keyboard shortcuts for power users. This is what the best programs do now, and what Slack does too.
The interesting thing about having both/multiple kinds of UI is that it guides the overall design structure of a program. Having both GUI and text interfaces forces MVC patterns to emerge, and it requires having a strong underlying foundation for your data and the operations that manipulate it.
As someone who lives in one or more terminals during the day, in my opinion, "the future of UI is text" is misleading: it is the past, present AND future.
Text is good, but not for everything. How would you represent a tree or graph data structure in text to a human and let them manipulate it?
I understand that this works for some things. A command-line interface is good for giving commands! Yet using it to paint is a lot harder.
Essentially, text interfaces are good at manipulating text. As a software developer you're often manipulating only text. So you think text interfaces are good, always. This is a syllogistic fallacy.
As a software developer, you're actually manipulating abstract concepts about the future movement of data over time. The best way we've come up to do that is to describe those concepts using textual languages, and then build ourselves tools for manipulating text in the belief that that gets us closer to manipulating those concepts.
This has the effect that we actively reject some really good tools as being 'unsuitable for programming' because they are hard to work with with our text based tools.
I think there's a lesson in both directions here: the fact that often the kinds of tools software developers use could actually be of use in some other domain (lawyers could get a lot of benefit out of distributed version control and markup languages, for example), but also software developers can sometimes get caught up in text editors and command lines and forget that sometimes a nice graphical visualization or interaction is really helpful.
Sure, but drawing is only one activity among many possible activities.
> As a software developer you're often manipulating only text.
I think that's true for most users: they are reading articles (text); writing comments (text); sending social updates (rich text); watching videos (not text); playing games (not text, but may have textual content, e.g. in-game chat).
I'm not really convinced S-exprs are particularly good examples of representing trees and graphs to humans while expecting them to be as easily readable and writable as the graphical forms.
You lose spatial intuition with this representation. You could make up for it on small trees somewhat with indentation and vertical spacing, but you'd lose it again for larger trees and graphs. We don't pictorially represent our trees like this [1], for instance, which is roughly how the S-exprs visually appear.
When I author graphs in LaTeX, it is often easier to run through a compilation cycle to see what the result looks like and which edits are needed, rather than mentally reasoning about the edges by looking at the code.
I ask myself this question as it pertains to the future of music. Digital Audio Workstations such as Ableton Live and Logic Pro dominate the scene when it comes to making music with a computer (at least in pop music), and companies such as Splice are trying to create collaborative networks around them.
Text based interfaces and audio programming languages such as SuperCollider open up a whole new world of musical creativity, and would lend themselves to collaboration (IMO) better than GUI based ones. The obvious hurdle for people is learning how to create things/music/art with text.
What most people don't realize is that GUI and command line aren't mutually exclusive. There's nothing preventing developers from creating apps that have a beautiful and informative GUI while providing a way to use text-based, specific commands. Use the best from both worlds.
It would be great if there was a system-wide, standardized way to do this in every app, but until an OS with this ability exists, we'll just have to do it ourselves.
Well, people joke about Emacs being an OS. If you take them seriously, I think it's an example of an OS where you can run graphical applications but have a standardized way to run text-based commands from any app (using execute-extended-command, bound by default to Meta-x).
It's not really practical to use Emacs as your only OS right now, but it certainly has many of the applications I need day to day: a text editor (obviously), a web-browser (that can display images, but currently does not run JavaScript), a PDF viewer, email clients, feed readers, command shells, several videogames, etc.
When I first used Cortana as part of Windows 10 I was quite disappointed when I found out it lacked quick commands like this. Sure it has some understanding of what is written such as "remind me to call Jim at 2pm" but it is very limited.
I was hoping I would be able to things like the following -
* backup Fizz Buzz project (and have it intelligently backup the Fizz Buss Visual Studio project to a default location)
* open Fizz Buzz issue 131 (and have it open a browser to the github issue tracker to the correct issue #)
* email the Fizz Buzz project plan to Jim (you can *kind of* do this but it hardly ever works as you would want)
* open Fizz Buzz todo.txt when I next login
* copy the Fizz Buzz project plan to my Dropbox projects folder
You know things that I will otherwise need to open the command prompt for or do some mundane UI task. Sure some of these things will require applications have such support but from what I can tell Cortana offers no real way to do this other than integrating with the Windows search service.
Considering most (all?) of these things could be done with PowerShell cmdlets it is annoying there is no way to script Cortana via PowerShell in such a way.
A lot of those things seem like commands specific to your environment though (read: things someone would have to develop out). Does Cortana offer some sort of API allowing you to add additional "commands" that she understands? That would be pretty neat.
I checked a few months ago but there was nothing specifically for desktop apps only universal ones and even then they were mostly voice-oriented things so you can "plug in to Bing". Ugh.
As far as I can tell it is not [yet?] possible to integrate features from a classic Win32 application into Cortana to do things like I listed. Shame as that would have been very cool.
My examples are very specific to my domain for sure but they were just some examples for my use, the general concept of using Cortana as an actual digital assistant to automate/speedup boring and often done tasks.
Cortana does do simple calculations though. Even things like 'is X prime?' work. So I am hopeful that there is indeed an API that they plan to release in the future.
The biggest issue is that to use Cortana you need to use an MS account and have an active internet connection even to do simple things like your example :(
The future of UI (for the general public) is probably voice-based like "Hey Siri/Google/etc, I'd like a sandwich" and a sandwich is ordered and delivered to you. "Tweet 'Who's down for a sandwich party?'" and a tweet is tweeted.
Whenever I hear or read someone argue that "command line is the future" I think of my dad; barely able to make a bookmark in a browser and not really knowing how folders work. And he's been using a Mac for decades.
One of the huge limitations for text based interfaces is the same as the elephant in the room for people starting programming, especially when they start dealing with others libraries/modules: It's not easily discoverable if you don't know what to look for - there's no intuition. A GUI, at least one that's reasonably well-designed, you can play around in and learn fairly quickly.
Having seen the pain of many users even when trying to dig down through a GUI they're unfamiliar with, I think that while text based interface are often more powerful there's a long way to go before they're more popular.
An almost comically ridiculous premise. "/partyline create:task Blah" requires a user to remember both the initial slash and then that two words must be joined with a colon, with no spaces. There's a reason why many companies have "Find us on Facebook" rather than a URL - because regular people are bad at understanding computer syntax; slashes and colons and joining up words without spaces are more or less unique to using a computer, and people who don't have to program computers for a living really don't care to learn their idiosyncrasies.
The headline does not match the article. The article raves about one particular feature on Slack, then shows that their tool works well with it. This is not an article about UI. This is marketing.
Even worse, it is marketing that failed -- all it has done here is invoke disagreement from a tech community.
Multi-line chat in BBS's in the 1980s used slash-commands such as these in chat apps...I'm sure I'm not the only one here old enough to remember those.
Sigh...like so many other things, what is old is new again.
Forcing people used to touch interaction with their phones to grok command line UX seems more like wishful thinking then the Next Thing.
Regardless of whether the author is right, it's worth thinking about because it may well be the case that humans have a better affinity for graphic representations of spoken language than for pictorial representations of things in the world.
Ordinary people type web addresses into browsers...or heaven forfend, at least "microsoft" into their Google toolbar for IE8. There's a point at which information redundancy is overwhelming even for people who don't care about information theory or how the web works or anything else.
The WIMP interface was a great innovation. But it was built for a time when women were in the typing pool, entrepreneurs were called "businessmen" and managers were afraid of catching keyboard kooties. The meteor hit and CEO's type their own correspondence and answer phone calls on their direct line [which lives in their pocket].
There's a case [and a reasonable counter case] to be made that WIMP was the installation program for widespread computing. Once the important system is up and running it can be discarded. The degree to which this is plausible correlates to the inverse to which one sees WIMP as an end in itself. Yesterday, it was rounded corners on shiny buttons, today it's flat sharp corners. In the interim, people have learned from experience that pixels can't cut human fingers. A buggy whip industry would count this as progress.
Text as UI success I believe is tied to how connected the related task is to the messaging tool you are in and how easy the platform makes it for the user. There are a number of tasks that could be good text candidates in a slack interface such as project management, time calendaring, tools used by the slack team. I think it's silly to jump to the conclusion that text is the future of ui. I would agree that text is making a come back for relevant tasks within popular messaging tools.
The future of Slack is that they'll do what every other chat application has done in the past 2 decades: they keep "innovating" on a solved problem, add "features" that get in people's way to the point that it becomes unusable and people switch to the new "disrupting chat technology". It happened to HipChat before Slack and I doubt Slack will break the cycle.
Given that I don't think I'll be looking to Slack as "the future of UI".
I agree with the idea of the article.
But it will not be limited to slack, check out the home page of this Ride Sharing service for example:
https://www.wadeeny.com
(disclosure, I am a co-founder)
I am the one who designed it, and I can confidently say that engagement is way higher than using traditional forms and button. The bounce rate is extremely low, almost everyone at least tries interacting with the bot.
Now this is not a testimony that text will always beat traditional web UI, I think a big factor in this case is the fact that it seems so unconventional and people are curious to try it out.
Also depends on the purpose of the interface you are creating. Like 1971genocide pointed out, UI is good for giving commands and not learning for example.
In our case, it was important for us to get a limited number of very precise information from the user. Therefore having a Text based interface worked out.
it is actually very interactive, and does draw people in to enter the information.
I think there should be a healthy mix between UI and Text to achieve a good usability which is what you and slack do
I very much disagree. Computing is going more and more towards integrated devices (phones, tablets, etc.) and companies are making serious investment in voice. Siri, Cortana, Amazon Fire, even my PS4 claims it can be controlled with voice. Once this reaches a certain level of utility it will become dominant. "Hey computer, open that word document I was working on yesterday. No, the one about the Davis merger".
That is more a long-term goal. Currently the future of UI is physics systems. The little bit of UI animation that happens today often uses interpolation routines (e.g. easing in it's many forms). Interpolation is time based and has annoying limitations like it is hard to coordinate multiple animations, it is hard to update animations smoothly on the fly and it can be non-trivial to reverse out of an in-progress animation.
I think we'll see a strong movement towards natural looking physical based movement throughout the UI.
Neal Stephenson's essay "In the Beginning was the Command Line" has this bit:
> Americans' preference for mediated experiences is obvious enough, and I'm not going to keep pounding it into the ground. I'm not even going to make snotty comments about it—after all, I was at Disney World as a paying customer. But it clearly relates to the colossal success of GUIs and so I have to talk about it some. Disney does mediated experiences better than anyone. If they understood what OSes are, and why people use them, they could crush Microsoft in a year or two.
There's so much expertise in animation, games, 3D, physics, illustration etc while most UIs are boring, boxy, and slow. The UIs inside of simulated computers in computer games are cooler than the actual UIs!
I wonder what will happen with virtual reality UIs. With movement tracking you could really get next-level point and click. I want my IDE to be a VR spaceship mission where I write code with some kind of sign language syntax!
Slack is not text. Slack is an engine designed to provide multimedia in specific, arbitrary formats. The fact that you can modify things by typing text does not make an argument that the future of UI is text.... maybe event streams and highly leverage-able tools, but that's not intrinsic to text.
I share this view and even use this idea in some of my projects (for example at http://testsheet.biz the test tree is edited in a plain text form. This allows to edit several tree nodes at once, including the whole tree; and also to quickly move groups of tests around by copy/paste; to introduce new nodes quickly. So, much quicker and easier that in any tree widget).
Together with intelligent completion (similar to programming environments) text UI could in many cases be significantly more convenient than widgets for mouse. And it can be much cheaper develop.
Text UI is a great way to hide complexity but difficult to teach and form habits around. The learning curve is steep and probably something we need to invest more in because "have you read the man page" isn't gonna cut it for most.
It should be the job of the operating system to expose a coherent and flexible set of tools, features, and UI paradigms that people can use across many different use-cases (nowadays called "apps").
Copy and Paste, although poor operators in retrospect, is such an example. Undo is an other, much better one.
I firmly believe that we could reduce or eliminate most application-specific commands by increasing the standard set provided by the OS. Some kind of semantic primes that could be composed into anything. A new UI language if you will.
"I cannot imagine Photoshop [...] to be text based."
ImageMagick is amazing. There are certainly tasks for which the interface is more awkward than Photoshop (or GIMP), but there are tasks for which the opposite is true. For instance, I was easily able to write a script for "take a screenshot, detect where the variably-sized error message box appears within it and crop to it".
The MEL language is a huge part of MAYA, and it's the guts that do lots of the work. Part of the magic of MAYA is the killer GUI for making models, etc...
The real heavy lifting comes from the tight integration between MEL and that GUI, which permits all sorts of things to be made and then quickly manipulated using the SAME MAYA GUI.
I agree - having done Python programming in Maya. The scripting allows you to really super-charge your work.
But What I meant is When I started working with Maya initially - I was already put off by the extremely complex GUI. Trying to program ? I do not think many programmers appreciative the deep learning curve needed - and the average modeler is not adequately equiped.
I had similar experiences. And that applied to MCAD too, not just general 3D modeling. That is a complex UI space to manage.
The data is complex, there are nearly always multiple interaction modes, selections, etc... going on too.
Back when I learned on 8 bit computers, it was kind of easy because they didn't do much. One soon found themselves into the guts of the machine doing assembly language to make any magic happen. All from books, magazines, peers, etc...
Looking at listings was high value.
Well, today we've got YouTube and it's awesome! I can watch somebody model, or program, or do both.
It is a deep curve, but we've got so much better learning now. Back when I learned CAD and things like MAYA, I had to do it old school. Get the book, go. I had the advantage of some peers who would give me some help, or do a quick tutorial. Know what? I videotaped one of those, a little precursor to what we have today.
There is a worry I have of hobbling great UI models by over engineering this learning curve bit. Where we can simplify, we should, but not at the expense of the peak use capability possible by experienced and adept users.
MAYA, and many CAD packages are bending that line, and it hurts at times. People who know their stuff could be sharing it just as much as relearning or working around the changes needed to reduce the need for said sharing.
Maya at least has strong scripting support from what I've heard. Similarly Blender. Which IMHO is a great way: have a GUI, but also have a scriptable console.
Isn't this called ChatOps? Slack acts as an hub for all the api wrappers. Ex: you should be able to type commands that execute on behave of you rather than ssh into your machine to type the same command. The title should read the future of DevOps is chat. UI is a different topic
Bit-related sidenote: Does anyone know a way to position the cursor inside a terminal running bash when editing a command except navigating with the left/right arrow keys?
This is by far the thing that eats the most time when I'm working on the commandline.
I personally would frame this as "the console" and it's the place where one can input text in the interface, and it may well be a secondary, external channel apart from the main or primary GUI.
All that has been done before. It should be done more.
A few years back there was plenty of text based interfaces like gnome-do. IIRC there is a web cli extension for firefox that is based on RDF intents which allows to command website using text.
Future is the matrix. Animation CPU said, that text is form, all user manipulations will be in native form - voice, touch, think, where text is local case.
Want to know why the command line is hard for plebs? It's because they don't know what the options are. They don't even know what they don't know.
The whole point of a GUI is to convey the possibilities. Show users a menu and they get to pick something. This isn't going to change anytime soon. At least not until terminal commands are taught in school alongside the alphabet and multiplication tables.