K e y b o a r d s v s M i c e | |
Now and then a question pops up on the net, asking whether keyboard | |
based interfaces are faster than mouse-centric interfaces[1], | |
mostly citing an article from Bruce Tognazzi[2], or one of | |
the many responses to said article[3]. This is usually followed by the | |
comment section filling up with responses from die-hard emacs or | |
vi users that vehemently point out the superior speed of keyboard input, | |
interspersed by a few thoughtful people that recognize the subjectivity | |
of such claims[4,5]. | |
But, in the end, they all miss the point. The original claim sounds | |
indeed questionable, and mentions an obscure study paid for by Apple, | |
likely to be a marketing move to push mouse-based user interfaces. The | |
case studies seem artificial, the counterexamples stupid and very few | |
are actually able to judge the difference from own experience since | |
one usually starts in one of the respective camps and stays there, | |
continually optimizing their interfaces to the input method they prefer. | |
What actually matters is for what kind of input method your user interface | |
is optimized. Since typing-heavy activities like coding tend to favor | |
optimizing for keys, programmer's interfaces accumulate more and more | |
ways of doing as much as possible using keyboard shortcuts. The problem | |
here is that there are very few programmer-centric interfaces that try to | |
do the opposite and optimize for the mouse. The mouse-based interfaces | |
that exist are mostly trying to serve the silly desktop/folder/trashbin | |
metaphor, this terrible and pointless view of a computer that the average | |
graphical user interface has been cursed with since the 80s, starting | |
from harmless and well-meaning beginnings like the Smalltalk environment | |
which later turned into usability horrors like the Windows and Mac OS | |
desktops. Mobile devices gave a fresh impulse but only because of the | |
constraints imposed by handsized bricks of plastic that are either too | |
small for a keyboard or too big to be carried around in your pocket. | |
And it doesn't help that most mice are of utterly bad quality. | |
Interestingly, there is a programmer's environment based on the mouse, | |
namely the rio[6]/acme[7] interface, by Rob Pike, itself influenced by | |
Oberon[8]. Or, to put it differently, it is an environment that allows | |
to be extended and optimized further, by adding functionality that can | |
be accessed with the mouse instead of keyboard shortcuts. This goes | |
surprisingly far, shown by an example from the documentation of Wily[9], | |
which is an acme clone for UNIX: | |
Susan has fetched the file frob.tar.Z. She clicks with B1 in the file | |
name, and with B2 in the word untarz. The utility untarz uncompresses | |
and untars the file, verbosely printing file names as it goes. She | |
clicks with B3 on one of the file names, INSTALL, which opens the | |
file. The INSTALL file suggests that she run configure then make. She | |
clicks B2 in each of these words to run the suggested programs, but | |
there's a problem. The make fails when gcc quits with the error message | |
keyboard.c:4: strings.h: No such file or directory. She clicks with B3 | |
in the first part of the error message, which opens the file and selects | |
the line. On Susan's system there is a string.h but no strings.h. She | |
removes the last s with a B1-B2 chord. When she modifies the file, | |
Wily sets the ``file modified'' indicator, and adds the word ``Save'' | |
to the tag for this window. Susan clicks B2 on the word Save to write | |
the file, clicks B2 on make again, and she's done. | |
This whole process uses about ten mouse clicks and no typing. | |
What is important here to note is that what slows you down is the | |
change from keyboard to mouse and back. The longer you can stay at one | |
of the respective input devices, the more efficient you will be. As | |
coding is only partially the job of a typist, it is also searching, | |
browsing file systems, navigating through a file, copying and pasting | |
of text that occupies our time to a large extent. Moreover, navigating | |
seems to be something that ought to be easier with the mouse than by | |
cognitively planning a course through the 2D-plane of your source code | |
with more or less ingenious keystrokes. This is one of the arguments | |
of the original study that stresses the cognitive load on navigating | |
with keys and remembering keyboard-combinations. I leave it to you to | |
judge this claim, but I do remember that after long exposure to emacs, | |
I was unable to conciously recall many keyboard combinations I used all | |
the time when one of those moments appeared when my hands had actually | |
forgotten the moves that were sort of wired into them. | |
Because, yes, I was a raving emacs user once. Lured by the conceptual | |
simplicity of acme, I gave it a try, forcing myself to use the mouse and | |
forcing myself to look for an improvement in usability, based on unrelated | |
reasons like an aversion to bloat and overcomplexity. I'm using it for | |
a while now, specfically a clone[10] and while I don't consider myself | |
an expert, I nevertheless do not have the impression that it slows me | |
down significantly. | |
But what really decided this for me was the fact that I'm less stressed | |
out: my usual mode of working with emacs was a frantic typing session - | |
I was relatively fast, but paid for this with the preception of constant | |
brain activity, while it feels to me that I'm nowadays calmly clicking | |
through the virtual world of my computer. I may be less inside the | |
"zone", even though I doubt that flow must be based on constant action. | |
To demonstrate that it is possible for a mouse based environment to | |
actually not suck, consider the following examples of effective mouse | |
use: | |
Scrollbars - the standard scrollbar is an epitome of bad user interface | |
design. Scrolling through large bodies of text is a pain. In acme, | |
it's the button that decides where to scroll: B1 (left) scrolls up, B3 | |
(right) down, depending on the position where you click - the further up, | |
the smaller the amount of scrolling, B3 near the bottom of the scrollbar | |
scrolls a full page. Clicking and holding B2 (middle) in the "thumb" | |
does what you expect and moves the visible area. | |
Searching - B3 on a word moves the insertion point to the next occurence | |
of the same word and it warps the mouse to that position, so you can | |
just continue to click B3 to jump from one occurence to the next, | |
wrapping once you reached the end. Selecting ("sweeping") with B3 over | |
text extends the search string to that range. Note that in this and the | |
previous case repetition of the action (continue scolling, search next | |
occurrence) does not involve mouse movement. | |
Cutting and pasting - this is done by mouse-chords: click B1 and hold, | |
while moving to the end of the text to be cut, then click B2, with B1 | |
still held. To paste is the opposite: click B1, hold, then click B3 to | |
paste the text at the position where you clicked B1. It sounds more | |
complicated than it is, and is be influenced by the quality of your | |
mouse and, of course, practice. | |
The acme-style interface tries to minimize retyping by allowing | |
already written out commands and search texts to be executed and | |
searched arbitrary times, provided it is visible somewhere. This | |
trades in the time taken for a (visual) search of the required | |
text for the cost of either typing it again or locating the commands | |
in the input history, if there is one. | |
Add that every piece of text is effectively hyperlinked, following a few | |
rules (that can be extended), you can do a surprising amount of things | |
by mouse clicking and sweeping, depending on context (location in the | |
file system, type of window you are in, etc.) And these rules are more | |
obvious compared to the keystrokes an advanced emacs user has to memorize. | |
So, in conclusion: Apples remain apples, oranges will always be | |
oranges and comparing differently executed variants of two input | |
paradigms doesn't give any objective measure on how efficient they | |
are and alternatives may be buried too deeply in history to be | |
commonly known. | |
You just may have to try it out for an extended period of time to | |
know for sure. | |
https://danluu.com/keyboard-v-mouse/ [1] | |
http://www.asktog.com/TOI/toi06KeyboardVMouse1.html [2] | |
https://blog.codinghorror.com/revisiting-keyboard-vs-the-mouse-pt-1/ [3] | |
https://news.ycombinator.com/item?id=14544571&goto=news [4] | |
https://lobste.rs/s/jxtser/is_keyboard_faster_than_mouse [5] | |
Plan 9 rio(1) man page [6] | |
Plan 9 acme(1) man page [7] | |
Using Oberon [8] | |
Wily [9] | |
MA, an acme clone [10] |