Wandering Thoughts archives

2019-08-25

Text UIs and the problem of discoverability

After setting up GNU Emacs to use LSP for Go and Python, I've been digging into what I can do through lsp-mode by doing things like finding out keybindings and reading up on features. One of the questions I wound up asking myself was if I was ever going to use various of these features, or whether they'd suffer the same fate as a bunch of Go programs and Emacs packages I had installed for similar purposes but then never used, such as gorename (which is directly supported by go-mode).

Part of my problem here, both in the past and today (with things like git-timemachine, which I have installed because of an interest of mine), is simply remembering that these things exist and how to invoke them. I don't do tasks like renaming Go identifiers or paging through the past versions of files in git frequently enough to remember these things off the top of my head. In fact, I didn't even remember that I had some of these Go Emacs addons installed until I switched to LSP based Go editing and had to revisit that area of my .emacs.

My outsider's impression is that I wouldn't have as much of this problem in a full bore GUI IDE, simply because with a GUI there's a lot more places to put reminders that things exist (and many of these reminders can be contextual, which cuts down how many are shown by excluding inapplicable ones). Mouse-driven GUIs also offer a larger set of options for how to interact with the program and expose things; you have text input, just like a text UI, but also mouse buttons popping up menus, hovering the mouse over things, and so on.

(Of course, a GUI can make bad or limited use of text input, and GNU Emacs can to some extent make use of the mouse and of GUI elements if you're running in the right environment. That GNU Emacs has a 'LSP' menu of things you can do with lsp-mode is actually quite helpful; I probably wouldn't remember the M-x invocations for half of them, much less know that they're possible.)

People have written some GNU Emacs packages to help with this, such as which-key (which I'm now using). But I think it's a genuinely hard problem in a text UI; there's only so many places to put things and prompt people, and you can't do it too often or your UI is far too busy. My GNU Emacs setup probably has hundreds of useful things I can run with M-x under various circumstances, but I'm extremely unlikely to discover them through ordinary use or know where to look for them in the way that I might learn to check, say, a mouse button popup menu in a GUI IDE.

(Similar issues apply to vim, of course. There are tons of useful vim commands that I don't know or can't remember; every so often I discover a new one, and sometimes it sticks.)

PS: I think that good text UIs are often great for experienced regular users, because their constraints push them towards efficiency and direct invocation of things. If you can remember all of the vim commands or GNU Emacs keybindings and M-x functions, you can do a lot very fast, and if you use vim or GNU Emacs all the time for something you'll wind up remembering all the things you use.

(This is related to but not quite the same thing as how custom interfaces benefit people who use them regularly, while standardized interfaces help infrequent users.)

tech/TextUIDiscoverability written at 22:15:00; Add Comment


Page tools: See As Normal.
Search:
Login: Password:
Atom Syndication: Recent Pages, Recent Comments.

This dinky wiki is brought to you by the Insane Hackers Guild, Python sub-branch.