Learning from Terminals to Design the Future of User Interfaces
brandur.org
brandur.org
I realized that people love Slack because it has introduced them to the CLI paradigm of computing for the first time. CLI is so much more efficient and powerful if users can somehow be incentivized to put in the time and effort to become productive, which Slack has focused on a lot. As inefficient and silly as it may seem to us developers, Slack with it's endless command based integrations has succeed wildly at that where nothing else has so far.
s/flock/duck/
. I remember hearing someone saying that was the worst design they've seen in their life. I almost agree.
I do agree that text interfaces are better. I really wish that more products were exposed through a purely textual interface.
I think hipchat could have solved the issue with a text interfaces better.
Also, this is why I really like Emacs. It has a great library for creating text interfaces. I had trouble with it because it is written in elisp/lisp.
I believe you could also edit your last message with the mouse, or by pressing "up" (but I don't remember if that was opt-in).
To my understanding Fish shell doesn’t have complete BASH compatibility and it breaks many scripts.
It also doesn’t seem to have nearly as wide of an adoption as ZSH so less overall community support in genera.
Sure you can just specify the interpreter with hash bang but it’s something worth noting before considering a switch.
Because of that design they are long and readable words but tab completable, and ctrl-space will bring up a menu of available matches starting with what you've typed so far.
http://tenex.opost.com/hbook.html
User-oriented Design Philosophy
A piece of system design "philosophy" had emerged at BBN and among some of the ARPA research sites that was to have a large impact on the overall feel of TENEX and, ultimately, TOPS-20. At the time, we called this "human engineering" -- we wanted the system to be easy to learn and easy to use, and we wanted the system to take care of as many grungy details as possible so that the programmer or user did not have to deal with them. Beyond that, we were willing to spend real machine cycles and real (or at least virtual) memory to make this happen.
This philosophy led initially to the human interface features of the EXEC, including "escape recognition", the question-mark help facility, optional subcommands, and "noise" words. Few people now argue against the need to provide effective human interfaces, but at that time there were many detractors who felt that it was a waste of cycles to do such things as command recognition. These kinds of things, they said, would "slow the system down" and prevent "useful work" from getting done. Other contemporary systems used short, often one-letter, commands and command arguments, provided no on-line help, and did not give any response to the user other than the "answer" (if any) to the command that had been entered.
[...]
Escape Recognition, Noise Words, Help
One of the most favored features among TOPS-20 users, and one most identified with TOPS-20 itself, is "escape recognition". With this, the user can often get the system to, in effect, type most of a command or symbolic name. The feature is more easily used than described; nonetheless, a brief description follows to aid in understanding the development of it.
A Brief Description of Recognition and Help
Typing the escape key says to the system, "if you know what I mean from what I've typed up to this point, type whatever comes next just as if I had typed it". What is displayed on the screen or typescript looks just as if the user typed it, but of course, the system types it much faster. For example, if the user types DIR and escape, the system will continue the line to make it read DIRECTORY.
[...]
Question-mark Help
Finally, if the user still isn't sure what input comes next in a command, he types question-mark, and the system will provide a list of choices that are legal at that point. The list includes specific keywords (e.g. FILE, DIRECTORY) and generic descriptions (e.g. "input file") Most importantly, the question-mark request does not destroy the previous command input. After the list of alternatives is displayed, the partial command is redisplayed, and input continues from the point just before where the user typed question mark.
As a result of this feature:
Users never have to go grab a manual and search around trying to find the name of a forgotten reserved word (command or parameter). This eliminates the "I know a word, can you guess it" aspect of many computer interfaces. The user can often figure out from the choice of parameters what an unfamiliar command or option will do. This further eliminates laborious searching of manuals.
Because the context of the current command is not lost when help is requested, the user can go step-by-step through a command, figuring out each field in turn. In systems where getting help is a command itself, the user may have to write down a long unfamiliar command on a piece of paper in order to be able to enter it completely. As menu-oriented interfaces have become more widely used, the advantage of having all choices visible to the user has become obvious. The question-mark help feature can, in retrospect, be seen as a "menu on demand" kind of approach, and it was one that worked even on terminals too slow to support full menu-based interfaces.
Origin of Recognition
The Berkeley Timesharing system for the SDS-940 had an earlier form of recognition. It didn't use escape however. On that system, recognition was automatic; whenever the user had typed enough to unambigiously identify a command or symbolic name, the system would spring to life and type the rest of it. This made for the minimum keystrokes in the ideal case, but had one major, and ultimately fatal, problem: if the user typed too much in one field, i.e. more than the amount necessary for the system to recognize that field, the input would go into the next field where it wasn't intended. For example, the system would recognize COP as sufficient for COPY and supply the "Y". But if you typed the whole verb, you would get:
* COPY Y
|
|- typed by the computer
Then, you would at least have to erase the extra "Y". If you didn't notice what happened and continued to type the remainder of the command, what you had intended as: * COPY OLDFIL NEWFIL
would come out as * COPY Y OLDFIL NEWFIL
This would at least produce an error, and in pathological cases could do major damage. [In the foregoing example, note that the old file name winds up in the new file parameter field.][...]
"\e[A": history-search-backward
"\e[B": history-search-forward
set show-all-if-ambiguous on
set completion-ignore-case on
From now on, when you type part of a command, uparrow and downarrow provide you with incremental search based on your command history.The discoverability of commands in a system like Emacs is much more powerful than a menu based system. In fact, I bet most people navigate the web now days by typing part of the URL in the omni bar and letting the browser fuzzy match versus mainting large bookmark lists.
Is there a terminal with similar ability?
Like if I put `ll !$` it would show, say, `ls -al /home/user/downloads` on a new line.
I'd love tab style completion that offered explicit history as well as standard completions. So if I `find` and then press the completion key-combo I get a list of the last 10 unique find commands (and I can choose one and edit before running).
This type of behavior would be a great addition to the terminal or popular shells. Instead of having the command prompt always display at the end of output, have it stay in the same place at the top or bottom.
Something like you get with the Emacs mini-buffer with tools like helm but for the terminal.
At some point you are fluent and coming up with the right commands and options is effortless. The challenge becomes being efficient and elegant.
Even then you learn about knew tools or options regularly and it's not a problem. It's much like with a natural language, there is no point were you stop learning new words.
It basically can turn a channel into a shared terminal, with history, search, and the ability to comment
The key point is that communication is fundamentally serial, in both voice and basic text consoles, whereas GUIs allow parallel communication streams (and hence "exploration") organized spatially.
I find it ironic how the same people consider GUIs a more newbie friendly interaction paradigm than the terminal/console, and then say the same for voice interfaces over GUIs.
In GUI mode, though inefficient, you know exactly where to access help and a few basic params (like dropdown menu on top, usually save under file, cut and copy under edit) that smoothens the learning curve. They have some solid ground from which to start exploring.
Whereas under console mode, there is no unifying paradigm. So each tool has a different way of doing the same thing. There is a lot of inertia at the start. Like what command is it for help 'h' or 'h?' or 'help' or 'H' ? What command is it for quit 'q' or 'quit' or 'ctrl+d' or 'ctrl+c' or 'bye' ?
For example, in gmail, I expected archive to be 'a' and delete to be 'd' or atleast "DEL". Very basic operations and basic expectations. Turns out, archive is '#' and delete is some char I can't remember now (I think '{' and '}' to indicate whether to go to the previous mail or the next mail. A 'd' to go to next mail and a 'D' to go to previous email would have been a lot more intuitive). Of course, you can customize the key bindings, but then you got to go do it across all your accounts.
While people may be quite happy to be able to wield so much power within the slack environment, they are very quickly going to lose their enthusiasm with the introduction of each new console tool, unless what they have learned in the slack environment translates into easier learning curve in the next console env.
Basically for users to be able to adopt the console mode, there is should be some sort of standardization.
;oP
If you want to undo, then Ctr + Z. At least that's the way computers have worked for eons.
Ctr + Z is the reason I prefer computers to typewriters. Software without the ability to undo or reset actions are devolving the user experience to typewriter age.
You're missing the joke. Way before Ctrl-Z started to mean Undo in GUI programs, it was (and still is) assigned to "stop current job" in terminals.
It's "j" for next conversation, "k" for previous - comes from hjkl, vim (and older [0]) keyboard navigation. Then "n" for next and "p" for previous, for emails within the same conversation.
Thing is, just like vim, these are supposed to become short-circuited so when in the right context, you don't think of the letters anymore. It's not "that key is j, which is up", it becomes "that key is up". It's the same newbie discovery vs power-user productivity problem described in the post.
[0] https://vi.stackexchange.com/questions/9313/why-does-vim-use...
It seems like DWIM features gained popularity from the 60s to the 80s, but more recent systems avoid it in favour of explicit (although sometimes cryptic) error messages ("weak types", like `==` in PHP and Javascript, are a remaining example of DWIM).
This might be connected to the rise of GUIs: more "general user" software became GUI driven, or menu driven, rather than using a free-form input language. That reduced the need for DWIM as a way to help new/casual users. It also meant that the CLI software that remained was generally more powerful, and therefore more dangerous (e.g. bash rather than zork), in which case there's a higher chance for a DWIM system to cause problems.
A GUI shows you what you can do, by having all the buttons and widgets displayed.
People google for "how to close Vim". I know I did when I started climbing that learning cliff. GUI's usually don't suffer this problem (except Google's UI's, which for some reason are bizarrely complex and hard to navigate).
I wonder how useful "help" is to the average user. I've personally never been aided in a strange GUI by visiting the help. Usually there is a cryptic search box that returns useless results when I try to look for what I want, or else I'm presented with what is essentially a book to read about the entire philosophy of the interface. *nix manpages/infopages have a similar problem, but Windows help pages seem to be worse for some reason.
But in general, I am talking about certain consistency among ui. Say you have opened a new program and you do not know where to start. We can go to 'File' and there is sure to be a "New Document"/"New Object"/"New Diagram"/"New <whatever-model-the-program-work-with>" available to start.
Similarly Edit, Insert, Preferences, Script, Debug and their visual and keyboard access methods are all paradigms that are consistent across GUI.
At the worst case, you can do a systematic exploration of the ui to find all possible actions one can perform. This has to be standardized to CLI also for a shot at widespread adaptation.
It's all about smart desing of commands. In your example all of those options could work, plus options like 'he', 'hel', 'help', 'help!!!', 'Help???', and even 'HALP' or 'WTF?'. Combine this with smart autocomplete, and good hints (i.e. I don't understand 'hlp'. Did you mean 'help') and you can mitigate the drawbacks of CLI commands greatly. As for Gmail, you are talking here about keyboard shortcuts, NOT commands, and that's something I completely different IMO.
And you could of course go nuts with ifttt and create your own syntax
eg Google, whats the weather and set a timer for 15min?
On Alexa you can enable a follow up mode which listens to the next command for a bit. It's a bit more natural, e.g. Alexa, whats the weather... you wait for her to complete, she then listens again and you can say, Set timer for 15min, she completes and listens, Read news, etc.
Sometimes I just feel like the machines are teaching us how they would like to be talked to vs us teaching them, as some commands require specific verbal markers in proper order to complete as otherwise they just give you a completely random answer or they simply don't process it at all.
Given one of the problems with voice interfaces is false triggering between humans and machines and humans and humans ("You want to know what?" "No, I was just talking to Alexa!" "Sorry, I can't find any results for that.") I wonder if in the far future we will have worked out a "machine language" partly for this reason.
It might be a bit like radio procedure words mixed with "machine syntax". So rather than "Alexa, give me a list of the top ten companies by market capitalisation", or "Alexa, who was the director of the Poseidon Adventure?" you'd say "Chip list market capitalisation companies ten" or "Chip, director Poseidon Adventure", where "Chip" is the universal signal for invoking voice commands (followed optionally by the name of the device you're addressing) and the grammar of the query is ordered from general to specific. This would minimise linguistic ambiguities and allows accurate but imprecise answers if necessary (eg if the machine can't order by market cap). It might also be sufficiently different for humans in earshot to screen it out. There might be specialised words too, similar the Bash and the unix utilities you mentio (eg for recalling queries and modifying them, stealth mode invocation, even piping perhaps).
But yes, Slack is basically IRC with a built in bouncer.
And i case people wonder, a bouncer or BNC, was a personal proxy that would be running on some server somewhere, and that maintained a presence on the IRC networks for you when you logged off.
And when you logged back on, you got a log of all the traffic on the relevant channels and direct messages while you were gone.
From this perspective, “we” don’t “need” as the article says, since it’s already there and writing a simple bot is a no-brainer. (Downsides of proprietary protocol are obvious.)
I think people are completely overwhelmed by the massive lack of consistent UI the Web has brought us. I also think the more "apps" that could be brought into platforms like Telegram, the happier users would be.
There's also evidence of this in China where 100's of millions of people use WeChat for a large percentage of their needs.
Every corporate landing page is a jumbotron/full-width image, followed by three columns of bullshit, followed by a few rows of random glyphicons and more vague nonsense to cross the minimum text SEO threshold, and a footer.
The early internet was a much wilder place. Frames or no frames? Tables for layout or not? Dare we use an imagemap? Fuck it, let's do the whole thing in Flash. It was chaos.
Now, one thing that has also come to pass is websites with straight up cryptic UIs. Buttons no longer have labels. We have hamburgers and hieroglyphs. I think that might be more of a driving frustration.
If I were to show you the web apps I interact with regularly, both personally and professionally, you'd see what I'm talking about.
I don’t get the impression that people really talking to bots much using that app. They’re either chatting with humans or interacting with UIs.
Of course the elephant in the room to this entire thread is advertising and analytics, which IMO is the biggest reason the web has devolved so badly. I mean it's much harder to generate revenue if you're just serving me textual content that I'm interested in.
Those are both very important. Innovation is generally important and I'm half curious as to why you ask.
Making your program meet what really should be a minimum acceptable standard is considered innovation now? Multimedia chat clients that performed well and weren't crippled by bugs existed in the 90s.
> Those are both very important. Innovation is generally important and I'm half curious as to why you ask.
Has Slack's attraction ever been that it's an innovative product? My understanding is that it's all about convenience. It's like IRC+bouncer with some shiny things and without the hassle.
Yeah, it's just IRC with a new hat, but sure, I'm willing to say it was innovative. Nothing like it existed and now many things like it exist. It was an innovation in the smaller parts - that judging by how things have gone, are maybe not so small.
> Making your program meet what really should be a minimum acceptable standard is considered innovation now?
It's not ~disruptive techmologi~ but it would require genuine innovation in terms of creating a proper cross platform native UI framework, or at the very lest a large shift in their product to move to multiple frameworks (innovation in the company rather than in tech generally.)
You can do things with the toolbars but every competent architect relies on CLI tools instead for common things like "move" , "scale", "copy", etc
I've never considered slack as a CLI tool for the masses this is a great analogy. I should do more research on existing slackbots
I often have people watching me, and with animations they say "you're working fast!", while in environments with no animation (like Emacs), it's just "I have no idea what you did". I want computers to seem efficient, not unapproachably magic.
What if animations started at a slightly slower speed, and gradually increased in speed the more you used them?
We shouldn't need to pick one animation speed for all users, but we also shouldn't make expert users tweak it manually. And I definitely want to see full animations for new applications that I'm not familiar with yet, but not those in old applications which I've seen 1000 times.
That's an interesting idea. Or how about if the initiation of a new animated action forced already running animations to rapidly complete? Then if you're doing a bunch of things that trigger animations in rapid sequence, then they would all effectively just be running at higher speeds, in proportion to your specific speed of working.
> It’s a good idea to provide the ability to skip the transition with the press of a button.
It is not really about animation speed, but more about responsiveness, commonly animation block all inputs because it is easier.
Few days ago there was a discussion on the BEAM/Erlang ecosystem designed so that everything is as responsive as possible. I believe that is really cool.
I’d compare that with the too slow IMHO animation when an app goes full screen on macOS.
Or look at Split View, it was clearly designed for ios touch and then later shoehorned into macOS.
My pet theory is that they left out keyboard ahortcuts for Split View because moving windows about with the keyboard would be too fast and highlight how slow the animations are.
Using a touch pad or mouse is slow anyway so you notice less.
Ok, I can see that something is happening. But that renders the whole UI unusable while it does. And it gets tiresome after the first time.
Like if the user types 'das' to delete the current sentence, and it quickly highlights the text to be deleted, and then shows it shrinking away, as the text that was following it moves in to take its place. (Obviously, you'd want the animation to happen pretty quickly).
Such animation could make it clearer what the command is doing, and this could also make it easier to tell if you'd accidentally typed a command that didn't do quite what you wanted.
And why should it necessarily make things slower? The animation could be quite fast, and I don't see why such animations would necessarily need to block or hold up future inputs or animations. (I do think, though, that you'd need to actually try it out to see if it works in practice)
In practice they are rare, certainly in consumer products. I can think of more products with janky UIs than I can ones with insanely great UIs.
In fighting games there are the concepts of animation priority[0] and cancelling[1], which essentially govern whether the animation for your previous move will block your next move, and whether an animation can be interupted by a new move.
Most good video game UI animates after-the-fact, so you can navigate very quickly and the UI animation lags behind your navigation a little bit. That’s mostly only possible with a controller input because with a mouse the anmiation must complete before the widgets are visible to be clicked on.
[0] https://www.giantbomb.com/animation-priority/3015-7740/
[1] https://www.giantbomb.com/animation-canceling/3015-1568/
They do provide a visual guide to new users of what just occurred. That has value for the new user.
The problem is that too many systems/programs that provide these animations forget that the animation that was useful to one as a new user the first few times, becomes an irritating time sink when it has been watched the ten thousandth time. After the ten thousandth time watching it, many users already know what is going to occur, and just want it to occur and move on. But the system/program provides no "turn off animations" profile setting. So when one gets to the point that one no longer needs the animation to inform of what occurred, one is still forced to sit through its delays. That is the big problem with animations.
Real world example. My Android 7.1 phone came with all the standard android animations turned on at the outset. At some point after having it for a short time, I discovered the animation time adjustment settings inside the hidden developer menu. After I set them all to zero (i.e., do not animate) the phone suddenly felt like it was 1000% faster.
So, in this case Google did include a "turn them off" feature (good). But they hid it inside a normally hidden menu inside the settings app (bad). Why was this hiding of this setting bad? Because most users will never find the developer options menu (because it is hidden) and therefore will never know about the "turn off animations" settings that could make their phone feel significantly faster immediately. So most will be stuck watching animations that make their phone feel slow, even when they already know the outcome and no longer need the assist provided by the animation.
I remember reading about such auto-adjusting UIs long ago, but the idea from then was things like shrinking labels to make room for more advanced features showing up. Not good for consistency, but auto-adjusting animations...
If our animations make a punter go wow when they see the product for the first (and only - unless we get to stage 2) time, and they buy it, then it has done its job.
You could add the animation, or you could remove things from the UI until it’s clearer.
Sometimes a “tool” for getting things done is actually a tool for helping you do bad things longer.
Ubuntu's Unity does this; it keeps track of the number of times you've minimised a window, and as you minimise windows more, it progressively speeds up the animation (maxing out after 100 times).
Source: https://ubuntuforums.org/showthread.php?t=2204321&p=12923084...
The latency they produce is.
If you had a 10ms animation that blocks UI, that would be annoying.
If you had a 10 second animation that doesn't block UI, that would probably be fine.
Even if an animation feels like it blocks UI, that is a problem.
UI is hard.
User interfaces seems really simple. Every programmer I know has looked at a UI and thought to themselves "I can code that in an hour!" and then ended up spending weeks, sometimes _months_ building the UI.
I believe UI is a big, unsolved problem in modern computer science. Just as hard as any other unsolved problem in our field. Right up there with general artificial intelligence and P=?NP. I'm not even joking.
We will eventually solve the problem of UI. But there are a thousand and one articles posted every day either A) complaining about existing UI or B) telling everyone the solution (without providing real, concrete new libraries, frameworks, code, etc). No one wants to admit that this stuff is just plain hard and we shouldn't beat ourselves up over the fact that we haven't solved it yet.
In other words, it's easy to complain. It's easy to display hubris. It's hard to put forth real, practical solutions. Or at least be humble and admit that we _don't_ have the solution.
A 'solved' UI example would be of a car (not the radio, but the operation of the vehicle). Learn to drive one car, and you can pretty much drive any car - same pedals, steering wheel, gear shift, turn signals, etc. I don't know if we'll ever get to something like that for software though.
As one snarky joke goes: only the nipple is intuitive, everything else is learned.
You might be thinking of instinct.
If you want to make a car analogy, then you should compare cars to browsers. And these have very similar UIs, the underlying stupefying complexity nonwithstanding. So we seem to create standardized interfaces for certain common classes of user interfaces over time.
I think that people tend to think in terms of discrete and dedicated appliances because this is how the real world is structured. Being faced with a small box with the overbearing set of capabilities of a swiss army jackhammer (atomic bombs included) ends with confusion unless lot of time is devoted to trying to discover and learn all the magic spells to which that infernally picky and annoying thing will respond meaningfully.
When we design interfaces we try to make them have a short learning curve but expose greater ability as you use them but it’s still hard.
For example the feed, besides being a UI pattern, also claims that content on the web is for consumption and not exploration, and so we remain stationary on these aggregation platforms instead of 'browsing' the web as we used to. This is efficient but politically bad for society, and we would need to introspect on how we use the internet in tandem with the development of new tech like decentralized platforms.
There are a lot of ways vim is right or not right, but this lowers the barrier to entry in a profound way. We can keep advancing like this, and stacking those advancements on each other until vim isn't hard. Maybe? What do you think?
I think one of the big ways vim is hard is what Kakoune attempts to fix - visualizing selection. Adding a "layer" to working in vim, we had `u` and `^r` to figure things out - doing something and knowing we could go back. Now with Kakoune we have movement before action. This adds another way the program can converse with the user.
Disclaimer: I don't use Kakoune, but I dig what it's doing and I want to try it out. I think it is a fantastic critique of vim.
> The familiar expression "a steep learning curve" is intended to mean that the activity is difficult to learn, although a learning curve with a steep start actually represents rapid progress.
I think RTS games should be controlled primarily by keyboard, not mouse. Select units of X type by pressing a key, target them at units of Z type, make the command 'attack' by pressing A. Vim-inspired.
It's not surprising that games are chiefly aimed at the least patient people - the goal of publishers is to sell to as many people as possible.
I specifically like AoE II for the feeling of grabbing a pack of Mangudai and watching them quickly run somewhere and fire arrows. It's not realistic, but it's understandable and pleasing, in a way that a super serious military simulator isn't.
I think RTS, like many other genres, mostly "died" due to stagnation around clones, which I think has more to do with the industry at large that is not innovating all that much anymore, and RTS is often not the genre of choice for a small indie developer, either.
Astute observation. Clearly this relates heavily to our culture of consumption and the asymmetry of creation/consumption.
But I wonder if another important part of this is related to the divide between how humans learn to do things and how computers can't teach humans very well. If we could automate showing people how to accomplish their goals, we'd be empowering creatives. So far, this task is relegated to youtube videos (e.g. "How do I make two shapes into one shape in Adobe Illustrator?").
But at the same time, lets pick on Slack. There's no good reason that it needs to take more than 5 seconds per team to load. Maybe its Electron, HTML, and CSS. Maybe they're loading too much data at the start. Maybe their Ruby servers are a little slow.
All of that could be true, but one thing is definitely true: There's a Product Manager or an Engineering Lead somewhere in San Francisco who looked at what their engineers had built and said "Yup, this lives up to the quality our users expect, ship it."
Jira is the same way. Its dog slow. Its full of UI bugs and inconsistencies. But people still buy it, and someone at Atlassian has to have said "we'll worry about this UI bug later, we have more reports for middle management we want to add to the product."
Our best minds will solve the tremendously difficult UI problem one day. But today, the best thing most of us can focus on is the People problem. Expect and Pay for better. Reach out to leaders at these companies on Twitter. A core problem in the software purchasing process is that, often, the people who buy the software aren't the people who have to use it day-in day-out, and often there's obvious lost productivity between the feature bullets on the marketing page and an engineer on an old PC her company won't upgrade for another year.
Creating Intuitive interfaces has been solved, you need a design centered culture, a good design system, and implementing user centered methodologies (look into human factors, cognitive engineering...)
It takes more investment upfront, but it’s worth it in the long run.
One of his main assertions was a big problem is the whole app paradigm. The whole notion of silod apps bound to native widget tool kits is very limiting and that the host platform should really just provide a facility for running commands.
How many people are actually putting effort into their UIs? How many people do usability tests? I know Microsoft has done them before, but what about Slack? There are a lot of complaints here about their UI. I'm sure not many free software projects do usability tests.
You can't just slap things together and hope for the best, you need to have tests, and you need to run the tests again when you make changes. We've already learned this with the software itself.
I've been reading "Designing User Interfaces for Software" by Joseph Dumas from 1988. It enumerates common usability issues at the time, but many of them are still common. Inscrutable error messages, inconsistent terminology, unexpected interactions, the list goes on. These are solvable problems by they require a departure from "worse is better".
I'm not sure that UI is hard, it seems like it just requires effort to be put forth.
And they added toggle switches to UWP (https://docs.microsoft.com/en-us/windows/uwp/design/controls...) that are usability disasters IMO.
When such switch used alone you cannot tell in what state it is - you need to remember that "on the right - is on" (yet what about RTL environment?).
While there is no such problem with old plain checkboxes.
In most chess games, keyboard interface works like this: one axis has labels 1, 2, 3, 4, 5, 6, 7, 8; the other has a, b, c, d, e, f, g, h. Then you movie pieces by inputing stuff like b4 d5. This is AWFUL. You have to look at the border of of the chessboard to see which row and column your chess piece is in. It wasn't designed for humans to play, it was for keeping records of matches and tournaments.
My interface works differently: each of your pieces having valid moves is assigned a key on keyboard. For example rooks could be labeled 1-8, others a-h. You select a piece to move simply by inputing its symbol. When that happens, spaces reachable with legal moves become labeled with symbols... You see where that goes. You look at a piece you want to move, read its symbol, then read the symbol of the place you want to move to. In each case you look at pieces or spaces that interest you, not at X and Y axis.
Users can't really change most UI. Developers have to make one ultimate one-size-fits-all UI for all of their users.
Images, check. Fonts, check. Command-driven, check. Lightning fast, check.
Moving traders and other front-office staff away from BBG terminals is next to impossible due to the drop in efficiency and familiarity.
Pretty much every "function" (more similar to what devs might call an "app") can be launched via a command typed into their command bar. And it's incredibly well indexed and fast to search. Everything from reading news, checking messages, seeing a quote for AUDUSD (then subsequently purchasing). No mouse required.
Edit: typos
This is what happens when a technology becomes so entrenched. People get so used to it that it becomes nearly impossible to switch. It's why I laughed when people talked about google docs replacing MS Office. They just underestimate how entrenched Excel is in finance and corporate america overall (especially with the bosses). Hell, even MS Access is entrenched enough that it'll be around for decades longer even though MS is desperate to get their customers to switch to SQL Server.
1. Slack is slow to start, and, as others have pointed out, uses animations to remind the user that it's working and not just frozen. The fix here is to improve the application's performance, but there will never be 0 network lag.
2. Animations are good here so that you remain spatially aware of a "space" relative to other spaces. I agree that the animations are too long, and I myself have shortened their duration.
My biggest disagreement is with this quote:
"We should stop babying our users and try to raise beginners and the less technical to the bar of modern day power users rather than produce software that’s designed for the lowest common denominator."
I think the best software is intuitive to use for novices, yet leaves room for people to improve. I'm learning how to use OSX's Logic right now, and I've been really happy with the amount of guidance it gives me. There are options to expose advanced controls, and there are a fleet of really convenient shortcuts, but I have no problem getting around.
For a novice, it's more forgiving. But for the expert, it's possible to be very efficient.
It's also possible to go too far the other way too. Not to date myself too much, but an old example of too much "expert" levels was back in the DOS days with Word Perfect. Keyboard shortcuts were the only way to do things (like formatting). So you either learned the magic codes (with three extra/meta operations per code) or you kept a cheat sheet on the keyboard itself. That was a learning curve to get to 'power-user' status.
It's not like I ever leave my desktop visible for a pretty wallpaper to matter. My nice ones are on my lock screen.
I've been researching for a bit, and actually research on how to make a "good" and "accessible" terminal interface is pretty thin on the ground. You can find a lot of opinions but very few with any data backing them.
[1]: They're not. https://danluu.com/term-latency/
[2]: They do add value in helping direct user attention. https://www.nngroup.com/articles/animation-usability/
[3]: Right-to-left is still poorly supported by shells, and the installation and support process for custom glyphs in terminals is often extremely complicated.
You start with this, and then make two-and-a-half points (I'll kinda give you animation) that the article doesn't. How is that a summation?
If the user is the one initiating an interaction though, there's usually no need to animate anything (opening a menu, for example) because he/she is already expecting something to happen
Edit: s/animation/transitions/g
> he/she is already expecting something to happen
Just as an example, if I were to trigger Mission Control [1] in macOS without animations, it would be pretty jarring. In this case, I control the speed of animation with the speed of my mouse gesture, and it's quick enough not to get in my way, but animated enough so that I have a sense of continuity between my full screen web browser and the view of all windows on that desktop.
In contrast, the default minimize/restore animations in macOS are too long and cutesy for me.
[1] You're answering an article that starts with a 45-second video of Slack opening (surely the worst offender among modern apps) with something about latencies measured in thousandths of a second.
[2] As Nielsen is focused on web apps and applications, this advice is less applicable to UI provided by the OS that you interact with all day in presumably familiar ways. Note that generally "directing user attention" isn't necessary in a shell: output always comes at the bottom. However, be sure to read the "Frequency: Don’t Get in the User’s Way" heading that includes almost verbatim the OP's points against animations that slow the user down.
[3] Yes, internationalization is still hard. At least for Terminal.app, this is basically a solved problem, but of course it's possible for terminal apps (ncurses etc) to need custom support. The situation with web tech is about the same, these things are solved for you if you stick with the basic technologies, but if you get fancy you may need more explicit support.
I hate to defend Slack as it's far from snappy, but comparing it to a console app seems hardly fair.
I wonder how much of it's slowness is due to network requests? I could make the argument that git is slow because when I clone a large repository it takes a while.
* DCC is still unreliable.
* There is no audio connection option, which is quite popular in 2018.
* Channel history management is ad hoc
* Authentication is done in band, in plain text.
* "secured" channels rely on this bad authentication, and if they don't (perhaps electing to manage it themselves) network flaws can completely steal your channel.
* IRC isn't even particularly open source, many servers and networks have private patches that are not shared publicly.
IRC isn't better than slack. I agree with you that it's confusing why people suggest that it ought to be.
Also, most IRC networks are controlled by entities even more inscrutable than Slack's executive team and board. I can go look up who runs slack, I cannot actually find good details on who runs any given IRC network. I have no idea what I'm dealing with or how they're using my data. I have no legal recourse if I do discover bad behavior, and I'm forced by the ossified protocol to keep using their insecure authentication mechanisms which make abuse trivial.
Ah, the good old days of the Internet. You make me so nostalgic.
I've used slack on mobile and I find it worse than the desktop version.
It starts slightly faster (10 seconds vs. almost 20) but navigating through channels is bad (and slower) and threads are completely unusable. It also runs my device hot like nothing else.
The faster startup speed isn't a big victory for me because it's still a factor of 10 away from what I would consider acceptable.
The "best" interface for slack, IMHO, is the web version, provided that you are already using Chrome.
The git equivalent would be if you had to wait for git to do a fetch/pull every time you ran "ls" on a git-controlled folder. It would be insane, and no one would use git (or any other version control).
Especally when we have excellent examples like VS Code, which is cheerfully giving neovim and emacs a run for their money and displacing longtime contenders like sublime, because it's genuinely quite good and plenty fast enough for most folks.
However, I agree Slack's got a lot of issues that are just bad implementation choices.
But the reality is is that Slack is an application made by a real company by real people/developers who all faced real constraints. Go build Slack for yourself, through the same history they have, and lets see what we come out with.
The equivalent with git would be having each directory be a submodule and someone is rewriting the history out from under you every few seconds.
For technical people it’s easy to assume we understand the problem especially when we see what looks like a questionable design choice but when we do this to applications we don’t have experience with it only hurts us collectively.
Maybe you should read the article and see subsequent videos (e.g., animation jank) where we are in this time domain rather than skipping that part? TBF: the videos didn't play for me without opening them in a different tab. I'm not sure how they accomplished this, since typical embedding tags don't have this problem.
[2]: > As Nielsen is focused on web apps and applications, this advice is less applicable to UI provided by the OS that you interact with all day in presumably familiar ways.
Multiple interactions were offered in the article that were native apps that had animation. Principles of UX are not exactly the same between local and web, but the principles of how animation guides user attention and context are more universal than you make them out to be.
For example, I love to make fun of the 1pass animation but I think it does serve a valuable purpose: making sure the user has realized the environment is now authenticated as a result of password entry. A unique cue for that is a good idea.
> Note that generally "directing user attention" isn't necessary in a shell...
This is fantastically wrong!
We have a long history of working to make sure that user attention is directed in shells! From guidance on how to do a menu with highlighting (folks have settled on doing the chosen option in a select menu with inverse text and an extra glyph to keep degenerate cases like 1-tuples and 2-tuples from being ambiguous) to ongoing refinements to midnight commander.
Another example in a more command-line domain is silver searcher's bash integration, which makes history search a lot better.
And there is a whole world of UI around log aggregation, search and UI that extends onto the console and has seen rapid evolution over the last 5 years.
[3]:
> Yes, internationalization is still hard. At least for Terminal.app, this is basically a solved problem
It's really not. Lots of tooling breaks.
> he situation with web tech is about the same,
CSS makes this dramatically better on the web side, and we haven't even gotten to support for folks with physical differences that make precise keyboard input or traveling eyesight easy.
The web is WAY more accessible to non-english-speaking people, people with physical differences, and people with issues focusing in the way terminals must demand you do.
A bunch of people (including Kay and Victor) have talked about this, but accessibility is only one part of the interface. Pieces of software that are productivity related should be easy to get started with and be accessible, but also allow you to become more productive. A lot of tools (like 1Password) focus on the former (accessibility to the lay user) but don't focus on the latter. This isn't some sort of unattainable ideal though: Excel and Powerpoint are great examples of tools that make it easy to just play around with as a beginner, but also to really reward power users.
Screen readers sure work better on text than on GUI elements, for one.
But that's ancient history. Even as I was deeply involved in the blind Linux community, Windows screen readers were getting good, particularly for everyday tasks like web browsing. Today, there would be no reason for any blind person other than a programmer or sysadmin to use a command-line interface, let alone a screen-oriented terminal interface.
To see why a screen-oriented terminal interface isn't in fact blind-friendly, consider that Red Hat text-mode installer I talked about last time. On screen, you have an approximation of a GUI using line-drawing characters, some ASCII art (for check boxes), and colors to convey where the focus or selection is. Suppose you're in a list of check boxes with buttons below it. What does the screen reader read when you arrow through the list? When you toggle a check box with Space? When you tab to one of the buttons? With the Linux Speakup screen reader in particular, the output wasn't at all intuitive, and one often had to use screen review commands to be sure of what was happening. I wish I still had a copy of a tutorial I recorded in late 2000 where I walked through the installation of Debian with Speakup. (The Debian and Red Hat installers were and are very similar in this regard.)
Contrast that with the Fedora or Ubuntu graphical installer running under GNOME with the Orca screen reader. Like other major GUI platforms, GNOME has an accessibility API. Screen readers and other assistive technologies can get a tree of UI elements, and receive events about those elements. Assuming the application implements its side of the API (and often the UI toolkit takes care of this), a screen reader has easy access to high-level information about the widgets on the screen, what's happening to them, which one has the keyboard focus, etc. So when you arrow through that list of check boxes, the screen reader can say things like, "Web server, not checked". Then when you hit Space, it can just say, "checked". Finally, when you press Tab, it can say something like, "Next, button". It's clearly a much better experience.
I'm happy to answer any questions if anyone is curious.
History shows us that consumers value good UX, of which animation is a key component. The iPhone wasn't the first smartphone, but it was the fist one to take UX as seriously as the hardware.
As for the examples:
- Slack: Yes, it takes forever to load and I hate that, the real problem is performance, not the animation. Would it be better if no animation happened and didn't inform the user about about what's going on? Keep in mind that the animation also serves to inform the user that it hasn't "frozen", so a still interstitial would be a regression.
- Spaces: The animation tells the user what is going on! Having the entire screen change instantly would be confusing for the vast majority of users.
I do value choice though, so perhaps there should be a setting for power users to disable/minimize them.
That's an interesting point, and it makes me wonder if there's a level of nuance to be found here. For example, animations are acceptable iff they do not extend the time required to perceive the requested action.
In other words, it's already going to take me some fraction of a second to perceive any change; animations within that fraction of a second are perfectly fine. Anything that extends the change past that fraction of a second, however, is eating into my productivity (or at least, so the author would claim).
It turned out that I'd enabled an option to double animation on the old phone. Enabling the same option on the new phone made everything as fast as expected.
That said, I really appteciate the (faster) animations. I wouldn't want to do a without them at all.
The video the author links from Minority Report of an "incredible and desirable" UI, has animations seemingly for this exact reason. One is basically the same as Spaces. https://www.youtube.com/watch?v=PJqbivkm0Ms
I think UIs that give intuitive feedback are the best UIs, even if they are a tiny bit "slower". I'm happy to memorize a bunch of VIM commands because I write code everyday and it makes me much more productive, but I don't want to have to do this for every application. Especially once we start physically interacting with them.
> "Let’s dig into it by looking at the aspirational interface concept from a great movie: Minority Report. (…) I think we can all agree that the interface of this prospective future is incredible and desirable"
I guess, this single scene of a movie has distracted interface development like no other vision. However, it's just a terrible interface: Working over prolonged stretches of time, gesturing with stretched out arms, would be simply impossible, you had to memorize a complex alphabet of gestures, which made the command set of Wordstar shrink in comparison, not to speak of the visual clutter and the (perceptual) bandwith required. – Please, let's stop speaking about Minority Report in this context. (It's a nice visual effect in a movie, but nothing to aspire to in terms of real life – just as is true for most movie FX scenes.)
https://scifiinterfaces.com/category/ghost-in-the-shell-1995...
It’s a really interesting form of direct manipulation that I have only ever seen matched by “document” style interfaces like Matlab, R etc.
If anyone is interested, I’ll do a write up later with some videos or something.
The C64 did not have any way to directly show or edit system memory, though. That's cool.
The functionality you're describing sounds pretty much like vidir (from moreutils[1]), though.
It's an operating system that offer the sanest capabilities for productive work with everything that's primarily textual, or could be made to be primarily textual.
It exists nowadays as Emacs in the built in eshell.
The buffer is the shell is the buffer.
Every time a programmer adds an animation, a settings option should also be added to "disable animations". Advanced users will love you for it!
You can disable every animation in OS X itself via the command line (defaults write). I put them all in a shell script that I run on new installs. You may be out of luck with 1Password.
I re-check if it's been added with every new macOS release; no luck so far :(
On my machine (High Sierra) the transition time between Spaces is dependent on the finger gesture swipe velocity. I'm not really sure I would even call this an animation- the Spaces x-offset is being adjusted as I move my fingers along the track pad in the same way as scrolling up/down in a browser behaves. There's literally no waiting for the "animation" to complete; when I lift my fingers I'm either in one space or the other.
Something else: I got myself a tablet a few weeks ago and now find myself disliking the constant scrolling and wishing for (instant) pagination instead.
Also, I am on High Sierra too, and there is at least a half-second lag between when the gesture ends and when the animation is complete. Taken together with the time it takes to initiate the gesture, I'd say we're around 0.75s.
I do find that if you use the keyboard to switch spaces quickly, the animations become faster too. Unfortunately the app in the other space do not get new keyboard input during the animation.
Basically an interesting implementation of a display server and desktop environment being worked on by a lone dev as far as I know. Really impressive stuff, and in the author's own words: it is keyboard dominant, building a better and more efficient CLI than the flaccid terminal emulators of yore
The lack of attention (and releases, not representative of the half a million lines of C code and about 100k of Lua it entail) is mostly by design - to a large extent, I prefer obscurity to the point that productivity dips and lethargy sets in around release bursts, it opens up old mental war wounds from academia (also - getting a ph.d wasn't worth it).
The posts etc. so far is much in the terms of documentation, not dissemination or politics. Coming soon: "Arcan vs. Xorg - far beyond feature parity" and "The Divergent Desktop"; that will show how these things fit together. The latter expands a lot on some of the ideas in this article.
I'm switching away from macOS to Linux with the i3 window manager for precisely this reason. But all of his criticisms of terminals are spot on: no multimedia, no support for anything other than monospaced fonts, etc. Lord, somebody give me a terminal program that produces laid-out text and can show inline video.
I seem to recall that at least one terminal browser can pull some tricks to insert images into the window in X as well.
The browser you're thinking of is w3m.
Anyway, a separate space with full-screened iterm2 + tmux on macos is my preferred way to work. I can swipe left to check slack, browser and then swipe right to go back to my terminal.
I find the conclusion of the article totally off the mark. The author seems to not understand that problems begins with multimedia support and other "gimmicky" stuff (as he puts it). You want video? Then use your terminal to launch a video player. A tiling manager is precisely perfect for this (I wonder why you switched to i3 if you don't know that, btw).
For example, right now I can issue a shell command that lists cpu utilization by process (top). I can even have that command autorefresh, showing me changes in real time. But to do that it takes over the shell. It'd be neat to think about a shell where I could issue a top command, then command displays and exits, giving me a shell prompt again. But I have the option of asking the shell to update the old output every N seconds.
Yes, I could in i3 spawn a new shell and just keep top running in it. And maybe in the long run that's the better interface. But doing that screws up my carefully constructed window layout.
I guess what I'm saying is that we have two interface paradigms: the gui, and the command line. But interfaces like Jupyter and Mathematica show that there are middle grounds between those two extremes, and that middle ground is interesting.
Then the issue becomes how well bash output takes advantage of Jupyter. Research forthcoming.
To me this is off. With a tiling window manager I don't have to "carefully construct" a window layout. That's the window managers job!
An alternative is Emacs, which will give you shells and windows and splits and somewhat-interactive documents (org-mode) and has some support for images. If you're ready to sacrifice an hour per day to Emacs configuration for the next twelve years, it will do your biddings eventually...
Not for everyday use, of course. Network connectivity (and application support) are nonstarters. But that shell interface does look <ahem> inspired.
The world needs more User Experience designers and yet it seems like no one is hiring them (even if they say they are).
However, whenever I try describing to folks the kind of design where I have some ability and accomplishments, they seem unable to disentangle the problems I'm talking about from visual design. I've even regularly ended up falling into rolls at work where I'm consulted on interaction design issues—but no one knows the name for this or anything, just that when a problem comes up about, "how can we make this easy for people to do?" I tend to have useful ideas. But I won't be hired for it initially, and there won't be anything once I leave the job or work with new people there which says that's something I contributed.
I would add to this list "programmable" so that automation is possible without being too disconnected from the GUI. Imagine clicking on an element in the page and being able to see (and use) the API behind it. This is one of the premises behind our project (shameless plug alert: https://membrane.io)
"Bug free" though...
Nonononononono! Both. I want both. The biggest problem with terminal interfaces is that very little of the functionality is obvious from the outset.
The more common "easy to use" software is designed to be up-front and intuitive but because of its nature it is hobbled from a maximum utility/efficiency standpoint. The interface usually relies on interaction modes that are severely limited in bandwidth (poking things with a pointer).
And the stuff on the other end is designed to be as useful and efficient as possible, but because of this its functions aren't immediately obvious and it requires the user to actually read the manual instead of fumbling their way around the interface. Once you actually put the time and effort in and learn the program you will be working far faster with this than the friendlier software.
There is one piece of software that comes to mind which seems to exist in a happy medium, the nano text editor can be extremely powerful once you learn the hotkeys but it meets you half way and gives you a heads up of all the main functions without you asking.
Slack, like I'm thinking a lot of applications, falls in a middle ground where lots of users are power users, but many use it just a couple times a day, or less. It should be fast for those users, but those users shouldn't have to climb a steep learning curve to get value out of the product. An ideal interface would be easy for a newcomer and powerful for an experienced user, but that's a difficult challenge for a designer, and tradeoffs need to be made.
Animation should be like a very thin layer of icing on a cake, but we're getting fed cakes with 4 inches of icing on the top. There is often little aesthetic restraint.
Designers should be asking, "how can I remove as much animation as possible?" It spammy and also an accessibility issue[1][2][3], especially when the animation is designed to mimic physical motion (parallax, Material Design, etc.).
To try and make computing bearable, I switched to i3wm and turned off all CSS animation in my browsers with Stylus. It's still too much.
I also have a suspicion that animation is causing cognitive damage to users by regularly breaking attention.
[1] http://simplyaccessible.com/article/animations/
[2] http://accessibility.psu.edu/animations/
[3] https://www.smashingmagazine.com/2018/04/designing-accessibi...
An architect would never dream of adding extra corridors just because they’d be a nice place to display some framed art. Neither should a UI designer add animation for its own sake.
I used to work on a UI modeling tool, and users were constantly disappointed to learn that they couldn’t build custom element animations in the tool (i.e. Flash / After Effects style choreographed view layout changes). When we looked at the use cases, inevitably they were looking to add superfluous motion to a view whose data was immediately available and which was displayed in a screen that already had an OS-level standard navigation transition animation applied to it. There was no reason to move things around when the screen was already fully rendered and ready for interactions.
But I’m not sure if I convinced anyone: there is a generation of designers currently who want to think of UIs as motion graphics showcases and who assume usability is an intuitive quality that will be automatically be present in their designs.
Between the time I started using computers (early 80s) until a few years ago, there wasn't much animation and it wasn't missed. There were some complaints about back then too -- flying butterflies[1], powerpoint transitions, blink/marquee tags, etc.
I think the key to good animations is that they use the right timing. They are best when you barely even see them. They should transport a notion, but as soon as you see it clearly, you have to wait for your computer to finish rendering and that sucks.
[1]: Terminal emulator which comes down from the top of the screen https://www.kde.org/applications/system/yakuake/
Then I realized what was the reason behind it. And it's not the animation.
Yakuake has a specific shortcut that your muscle memory can remember. Making Yakuake super accessible. It's like my brain has now O(1) to access my konsole.
So I removed Yakuake and saved a specific shortcut for Konsole.
It's much better. Because there's no annoying notification and the window is full screen.
I applied this pattern to all my apps and I'm far more productive than I've ever been in any environment:
F1 opens up browser
F2 opens up pdf viewer
F3 opens up text editor...
(You can apply a shortcut to any application/window using Kwin -> Special Application Settings -> Arrangement & Access
Most web apps are virtual paper forms with pre-filled menu options and - usually - a bread crumb trail so users can change their choices and/or their minds.
Animations are largely irrelevant to the user experience. The best way to speed up this kind of web app is to iterate over and over to find the sticking points empirically, and then nuke them from orbit.
That means minimising the number of menus, making sure they have useful defaults, and spending extra time on problematic elements like date and time selectors.
The user should type as little as possible and click as little as possible to get the job done. Beyond that, "productivity" does not apply as a concept. Users do not need composability or grep-like text manipulation options.
It's also handy if a page looks good, because this makes an impression on many users and is one factor that can persuade them to come back.
So no - I do not think there's anything of value in the OP, except perhaps as another example of "Developers want to turn everything into a emacs and a build system, because that makes them happy, even though it's 100% inappropriate for non-developers."
I do agree that "most web apps are virtual paper forms with pre-filled menu options (...)", but that doesn't mean they don't need productivity improvement. First of all, many people use those "forms" for work, not just casual browsing. It's one thing when you're putting up some old book you found on eBay, it's another when you have to manage hundreds of such auctions each day. Suddenly, the difference between old and new web design trends is measured in 10x increase of time spent on task.
I know because I sometimes help my SO do her work tasks faster, and usually get 10x-100x speedup with clever application of web scraping, regular expressions and batch processing in command line.
Another thing - people don't "fill in forms" in isolation. Each webapp being a productivity-hostile silo causes pain whenever a task involves more than one of them. Often, users do in fact need "composability or grep-like text manipulation options", they just don't get them, so they suffer (or delegate to a friendly programmer, who can force a webpage to have some semblance of interoperability, whether its authors want it or not).
> So no - I do not think there's anything of value in the OP, except perhaps as another example of "Developers want to turn everything into a emacs and a build system, because that makes them happy, even though it's 100% inappropriate for non-developers."
It's not that - though I do believe that Emacs presents a much better UI paradigm than the one accepted in the mainstream (due to flexibility, interoperability and consistency). It's just that present day software - web apps in particular - are ridiculously hostile to productivity. The perfect solution is not doing everything from CLI, but it's also not shiny, animated web UIs exposing as little functionality as possible while still being able to sell the product.
Someone upthread mentioned the concept of threshold and ceiling. Emacs and CLI tools are high-threshold, high-ceiling. Webapps and mobile apps are low-threshold, low-ceiling. Perfection would be low-threshold, high-ceiling - that is, something accessible to beginners, but designed so that they can level up and become power users, if they need/want to.
The most revealing part of the article is that the author states current UI philosophy is making things legible and intuitive, but that UIs should be about speed and efficiency. These aren't really either/or, good UI/UX should explore the frontiers of both, and pitting them against each other feels off.
I think speed/efficiency are proxies for something deeper that the author is really getting at - many apps focus on approachability so much that they become superficial when they should be powerful. There are, however, approachable apps that are powerful. For example, Airtable is quite intuitive and approachable, but ultimately its a tool that helps users manage complexity, not avoid it. This class of tools is what we need more of, and I think the author is looking to fixing frameworks when deep down the problem is actually having better apps (e.g. this feels like category error).
Also, the author is asking for a reboot, but has failed to look at the most important UI reboot in the last decade - iOS UIkit. A junior dev can make a passable app just by following iOS Human Interface Guidelines that is accessible, responsive, intuitive, etc.
Personally, I like terminals for their show your work ledger aspect and the 'I know exactly what I want' factor, but just about everything else they're terrible at UI-wise. And in improving them, I'm not seeing anything in this piece that makes me think the same mistakes won't be repeated over again.
A former coworker used this as his project while on sabbatical at the recurse center.
It is mostly GPL v3, except for MIT license on the core UI.
From the Visidata GitHub page: The innermost core file, vdtui.py, is a single-file stand-alone library that provides a solid framework for building text user interface apps. It is distributed under the MIT free software license, and freely available for inclusion in other projects.
The author compares the benefits of flashy, spread-out interfaces and CLI. The truth is that both have incredible value in the right contexts. The tricky part is making an interface that is easy to pick up, but powerful enough for power users.
If you deeply understand your users you can build adaptive user interfaces[0]. LayerVault experimented[1] with the idea of progressive reduction—stripping down UI elements as the user becomes more familiar so they can work more efficiently.
[0]https://en.wikipedia.org/wiki/Adaptive_user_interface
[1]http://layervault.tumblr.com/post/42361566927/progressive-re...
Looking at how insanely fast competent line staff are with terminal interfaces like in retail POS settings, I sometimes wonder if Emacs would be fast enough to keep up with them. If so, instead of using a browser as the base UI framework, would a terminal-screened Emacs (that is, in console mode or perhaps inside xterm, and not the graphical Emacsen) with an appropriate text UI library be feasible?
It can't possibly be worth the effort unless the text UI in the code is the only presentation layer, I'd imagine. But if you have to go down that route, it might be faster and easier than rolling your own termcap-based text UI, especially with all the elisp goodness within. The only extensive text UI I knew of was Vermont Views' product, which has since disappeared off the Net and was closed source anyways. There are some open source libraries, but none with nearly the power that came with that closed source offering, and all still quite low level.
So what he's arguing for is simpler, faster traditional non-terminal apps. Because those are good.
This nicely describes the road Intuit has gone down with QuickBooks Online. Slow user interface, and lack of productivity. I wish Intuit would take half the money they spend on Marketing and use it to develop their Desktop offerings of QuickBooks.
This had to make me laugh a little bit. Jaron Lanier actually designed this UI to intentionally be unusable and bad, because the film was described to him at the time as a Dystopian film, so he designed a computer interface to be equally dystopian. Yet, the effects look so cool, that people actually thought it was a good idea
Cloud functions may create a set of standard libraries or tasks that can be ported to any interface. You can get a sense here from this snapshot from a recent Google Cloud Next talk:
Many of the libraries are multimedia related. But its easy to see how the set can also include Cloud ML functions for pre-trained scene recognition.
Another welcome development is an anecdotal renaissance in IRC. Slack and Discord are killing it due to the ease with which new users can come onboard. But the communities forming around mission critical infrastructure, chaos engineering and SRE seem to rely on the old tried and true minimal ircd configurations from last generation.
There is no reason for web application entropy to make sites unusable. Modern browsers have high performance timers, request animation frame, gpu acceleration, background workers, and of course access to low level instructions via web assembly. It comes down to investing in the web again.
Xerox's XDE had a very nice terminal. It could use proportional fonts and you still had precisely formatted text for code. It was not as fast as a VT100 or an xterm which relied on monospaced fonts. But that was the root of the issue.
Terminals conflate "formatting" and "content" in the worst way possible, there is content that "is" formatting (whitespace). This closely mimicked how typewriters did it but they did it that way not because it was "best" but because it was "possible" given the mechanics of building lines of type without a bunch of lead letters.
It is insidious how that in band content/formatting mixing of ASCII and then later ISO-Latin-x drove compromises in editor and text manipulation tool design. But here we are.
I wrote a pretty printer for come code once that pulled apart the format from the content and it would print out source code with a nice proportional font (I think a2ps(1) could do this too at some point) and I admit that the code "looks wrong" in that form but I also have to admit that it only looks wrong because I'm not used to seeing it in that form. It is harder to read when things like parenthesis fade into the text because they are so much thinner, but this is again the design vs eyeball sorts of trade-off.
When I read this bit what I heard was "Gee, it would be really awesome if some designer could capture the flow of terminals with a modern set of capabilities." But that XDE terminal? Dave Curbow, who was with Xerox Business Systems, once tracked down how many function calls had to be made before the glyph ever hit the screen and it was a lot. It made it hard to run efficiently on the hardware of the time (great when you can code new microcode, less useful on CPUs without that capability).
I built something like that a year ago and thought that I wouldn't have to bother the user with the sync state. I was wrong. Due to the nature of the mobile connections it happens quite often that for short periods multiple devices aren't synced. Yes I could certainly improve the logic to let this happen less often but in the end the user requires some indication about the sync state (e.g. last successful sync).
So when you build something similar don't hide everything from the user just give him as much freedom as possible to allow him to keep working while the sync happens in the background.
I don't know if third party apps can read this setting and also comply.
Also, learning from terminals to make better UIs--especially if the big selling points are speed and composability--is developer Stockholm syndrome. The speed is only there because the user-facing I/O is very limited, and rich media is out-of-the-picture. The composability is only there because we have 40+ years of command flags to format and reparse every single ad-hoc format into something the next command can understand. Interfaces like Jupyter and Mathematica did a decent job integrating rich media. Symbolics Genera--and probably a few other language-machines--had a better story on composability (by having a common structured data format).
Amen to "We should stop babying our users" though. Engelbart called that one from the outset--with something to the effect that if we're going to be using these things all our productive lives, most learning curves are going to be worth it--as long as the feature isn't garbage.
I don't recall who originally described it this way. One of Logo's motivations was to have an experimentation environment for kids with low threshold and no ceiling. Perhaps Seymour Papert.
Composability within the conceptual framework of the terminal itself (e.g., using a pipe).
But suppose I want to shuttle text back and forth across the terminal/GUI domain.
Do I even have a reliable way to select and copy text that extends past the viewport of a terminal? Even the method of copying a selection isn't cross-platform in terminals (e.g., among terminals running in Linux/OSX/Windows).
Compare that to the holy trinity of <ctrl_or_cmd-a>, <ctrl_or_cmd-c> and <ctrl_or_cmd-v> in any viewport of any web browser.
Plus, you can't even depend on a particular feature being available to a terminal of a single platform. Take the example of middle-click selection pasting from the terminal. Can I depend on distros to never bother me by removing that feature? If so, what is the standard that governs the requirement for this feature?
Personally, I think that operating systems (and browsers) failed in enforcing such a framework, or at least strongly suggesting it.
Compare with Emacs, which is a prime example of how interoperable software could be, if it adhered to a common paradigm more. There's a reason people run tasklists, e-mail, IRC, shell, time tracking, invoicing and others straight from it. It's not because they're crazy. It's because the overarching UX principles enable greater productivity and integration than it's possible elsewhere.
You should also study the Oberon OS. You would have to read up[2] on it to use it[3], but it's a high point of UI elegance that has never been equaled since. (Specifically the base system plus the "Gadgets" UI extensions.)
[1] https://en.wikipedia.org/wiki/The_Humane_Interface
[2] http://www.projectoberon.com/
[3] Live in-browser Oberon system from original source code, via JS emulator for the underlying RISC CPU: https://schierlm.github.io/OberonEmulator/
------
edit:
And if you want to read a book that fell through a wormhole from thirty years in the future read: "Computers as Theatre" by Brenda Laurel.
A case where it does matter is with a good mobile phone camera. It must launch and be able to capture an image within one or two (or at least within 5) seconds.
But back to the Electron topic... Would you rather a tool exists and isn't perfect, or it does not exist at all? Ok, or maybe it exists but costs $99 per user?
I love clean, performant, low latency interfaces. I live in a terminal. But I also understand the value of developer time. Whether tools and frameworks actually make devs more efficient can sometimes be unclear, but often they allow things to be made that otherwise wouldn't be made due to budget (time cost) constraints.
I understand this argument for niche tools. I'm eternally grateful for things like Insomnia (a GraphQL client), NoSQLBooster (MongoDB GUI), etc, all written in Electron. I understand that asking for things like that in native is a recipe for them to not happen, or for them to be Mac-only, or for them to cost $100/year.
Slack is not in this category. It is produced by a corporation valued at three billion dollars. It is a product that is completely, totally, and wholly solved. They produce very little that is novel. I expect that experience to be all twenty shades of pixel perfect, because they have no excuses.
Let's look at Telegram. Great app. But they wondered if there were ways it could be improved, so they released, simultaneously, Telegram X on the app store [1]. A rewrite, using the same backend and APIs. It's even better. With Slack's resources, they could have done this twenty times over.
In a winner-takes-all, marketing>quality market of today's web? I'm inclined towards "not exist until it's at least somewhat good". The problem with Slack is that it sucked out air from everything else, and it became a de-facto standard for intra-company communications. It's hard for a better solution to take off, as it now has to fight uphill against a rich corporation and network effects.
I think the article is generally correct when it concludes that we're on the wrong path. But I'd just like to assure the "engineering community" that the "design community" is fully aware of this and has been since about 2003 (mainly due to the effects of Flash at time - remember the loading screens?).
Part of the problem stems from the fact that UI design has swung into a bit of a dark age at the moment in terms of usability. Most designers are "visual designers" who don't know much about the history or practice of interaction design as developed by Norman, Raskin, Tognazzini, Nielsen, Cooper and others. With so few interaction designers around it's not surprising that UIs are designed to just look good rather than also work well. Some of the main issues are summarised here: https://www.fastcompany.com/3053406/how-apple-is-giving-desi...
I'd also point out that this means engineers are probably just as confused about the difference between visual design and interaction design, since there are so few people to look to who are practising the latter. So articles like the one at brandur.org will be written as though they are broaching new issues on the topic. In fact, discussions around the advantages of CLUIs are pretty old and nothing in the article is particularly new in that regard.
The only thing I'd say after that is a minor point: he says native phone apps are faster and more responsive than web ones. Is that true? The apps I have on my phone mostly use webviews or network API calls for large parts of their UX which is by definition practically the same speed as the web, no? At least, I can't tell any difference between using, say, Amazon's native app to search for and buy something compared to if I go to Amazon with my phone's browser.
In addition, the GUI has conditioned us to think that in order to make a computer do work for us, we have to perform precise manual labor to guide it through a lengthy series of tiny discrete steps. "I have seen the computer, and he is us." In addition to making those steps quicker, we should also be thinking about how to eliminate them altogether by having the computer understand natural language.
The progress animations are out of control too. Every time I see one, I imagine the engineering hours it took to animate and wondered if they could have just spent hours optimizing the code instead. The weirdest thing about a lot of progress indicators is that developers don’t even get the point: your indicator has to be in sync with the activity! It has to give meaningful updates, it can’t just be a background animation that looks alive even when the server has died and isn’t coming back.
And they don't apply to your version of the OS.
The instructions for installing the same thing on Linux is just a series of commands that you copy and paste into your console.
On the other hand, imagine the office where I work, one room, four people, and imagine them talking to their computers instead of typing or mouse clicking.
[0] I have no idea how many accidents are caused by drivers looking at their radio, AC control, whatever. I am conviced the number is greater than zero, but I suspect it is only small fraction of the overall number of traffic accidents. But still.
You're looking for click
It's the best framework across any programming language that I have found for building command line user interfaces.
I instantly know how to use an application made using click because it prevents you from making non-obvious GMO interfaces.
Even as a developer, I love using it. I often create CLIs for common chores in my projects using click. The applications always come out perfect, with little to no effort.
I wish there was something like this for GUI.
This makes me want to make a GUI framework like click, where you don't deal with the bare components, but "compose" your UI by just providing data
Personally I would treat design as being purely about function and anything superficial is about aesthetics.
But I think the author is throwing the baby out with the bathwater by wanting to restrict all animations. Fast, subtle animations, especially in the form of transitions between states/screens are extremely important for keeping the user informed about where they are in the context of the system.
I don’t think it would load any faster without the animations.
I think we may be too quick to judge these things within our own context rather than in the broad range of users which these user systems were designed for.
Every designer needs to read this article. I am just so angry at what is being taught in graphic design schools and the sheer incompetence that graduates from UX/UI courses.
There are two regularly occurring situations times where I'm delayed by the slowness of interfaces:
1. At work, waiting for our web app to reload after I've made some changes to the source. This is actually a problem and eats up a significant amount of time and makes me lose focus.
2. I'll occasionally come across a slowly loading webpage. And I stress 'occasional' here—it's maybe once every couple of days when I open an article on HN or something and it's some site with a tons of ads and stuff. It's a non-issue—easily less than 5 minutes per week.
Aside from those delays, I basically never find myself waiting for whatever software interface I'm interacting with, and that's on a 2014 macbook pro.
edit: typo
Can anyone explain, in concrete terms, what resource does Slack require a lot of, which is fast to produce on iOS but slow to produce in HTML?
Not everyone thinks like you (seasoned terminal users) do. There are different kinds of intelligence. The only way to get good with a terminal is to RTFM and _play_ with it, until you're used to it and have constructed a mental model of its internal "types", their logic and composability.
Software developers are as a group highly predispositioned to construct mental models of this sort, and to learn by reading the docs. Most people aren't. Many more people are very good at building a _spatial_ model of something, and remembering how to do things by _where they are_. Animations, different screens, various OSX ui components, etc, tabs, all do this. For discovering features and learning to do new things, rather than read the manual, you explore of the environment presented to you. While working, instead of writing intermediate state to buffers somewhere (like the pushd stack) you _put_ it somewhere, and when you want to find it again you go look where you put it.
I'm personally better at this than at the software way of thinking and generally find that if things move too fast I just get stuck and have to wait for my brain to catch up. This is probably a fault but it's not going to change overnight. I'm also bad at reading manuals, or at least, I don't like to put the time in to read the manual for everything I do, and am very annoyed when an interface exposes its internal model and complexity non-uniformly, ie to do something that I can _think_ about quite simply I have to absorb and model a lot more of how it works than it feels like should be necessary. (That sentence was about git, also a favorite of these advocates. But also bash, and honestly most CLI tools.)
Yes, and here's the point I would like to stress that is completely lacking to make the idea of user friendly terminals work:
GUI:s are more user friendly than Terminals because of discoverability and limiting affordances.
User friendly Terminals might just be possible if you allow users to explore what is possible with clever search and query completion. It should be able to recognize what entities you are likely typing about and suggest commands that use them. Let's call it "Semantic terminal"?
Have you ever used a calculator, and wondered if you'd punched in the operands correctly? I have. And so I do the calculation again.
With a scrolling terminal, you can see (and check) the operands on the previous line(s).
Never tried it, but Soulver looks like a good solution for iphone: https://acqualia.com/soulver/
and CalcNote on Android - just installed this and its' just like numi. https://play.google.com/store/apps/details?id=com.burton999....
IMHO, two big curses in UX today are unnecessary animations and webfonts that render ugly when font smoothing is off.
We need faster network and faster websites.
We need less bullshit on websites, that'd solve both problems. See e.g. https://www.techtimes.com/articles/229533/20180606/thanks-to...
Definition:
Console: (verb) To comfort someone in a time of grief because they are forced to use the command line.
Oh, wait. You thought console was a noun?
https://www.merriam-webster.com/dictionary/console
Specifically:
3b. a combination of readouts or displays and an input device (such as a keyboard or switches) by which an operator can monitor and interact with a system (such as a computer or dubber)