If you really want to see the advantage of keyboard hotkeys just look at the top Starcraft players. Yes they still use their mouse but they need hotkeys to even be able to compete at that level. They actually measure the number of actions they can execute per minute! There's no way it can be done only with either just the mouse or keyboard

I think software development also falls into this category. Some hotkeys are at least an order of magnitude faster. And 90% of the time hotkeys will be faster. But in some cases you absolutely need to use your mouse, it's just much faster.

Here's a YouTube video that discusses what it takes to be a competitive Starcraft player and shows them entering actions: https://youtu.be/zmYhX8fjmo8

As a heavy keyboard user I have to agree. I've been using vim extensively and also use vim bindings for my browsers, without them navigation feels constrained. Obviously I still use the mouse for some tasks and certain types of text selection are much easier with a mouse then a keyboard for me.

Anyways, the point I wanted to make is that even some instances where the mouse is considered superior can be negated by a different UX.

So consider the idea that FPS games are more effective with a mouse. I believe this is a UX choice to reward developing mouse skills, not a fundamental limitation of the keyboard. As such, consider the following levels of keyboard FPS controls--

Option 1: Aim by directional arrows. Will be beat out by a mouse user for sure.

Option 2: Aim by movement commands (e.g. B skips and tracks the target on the left, F skips and tracks the target on the right, etc). Might be on par? Definitely has a different learning curve than using a mouse.

Option 3: Aim by label. Every target has a letter hovering over its head, and pressing the key will aim & track at that target. I suspect this would be much more _efficient_ control scheme than using a mouse.

Option 1, is akin to navigating text with arrows, Option 2 is akin to navigating with jump commands, and Option 3 is akin to navigating with an ace-jump type interface.

So although #3 would be considered unfair in a typical FPS context, as a programmer I just want to reduce effort as much as possible.

AHH TYPING OF THE DEAD! Best typing game ever (helps that it's just a rework of an actual rail gun shooter). From a gameplay simulation perspective though, mouse is the only method that I feel provides any relatable idea of aiming. Just being able to directly jump between targets would definitely be "more efficient", but so is an aimbot, both sort of defeat the general gameplay design.

> Just being able to directly jump between targets would definitely be "more efficient", but so is an aimbot, both sort of defeat the general gameplay design.

Of course - in the context of an FPS, where the basic expectation is for it to be "skill-based".

But this makes the notion a truly great metaphor, IMHO: The goal behind a text editor is for the user to get stuff done. "Fairness" is not a constraint; everything is allowed.

I'd even go to say that if you've developed some AI that allows me to quickly do what I want without getting in my way, I'm in! I don't think this will be the case any soon (at least in a usable manner), but having it would certainly be great.

In fact, I already pondered if it might be doable to use the new, cheap eye tracking hardware one can buy nowadays (e.g. Tobii devices) to develop something like Ace jumping with...

For vim there are plugins like EasyMotion[1], and for emacs there's Ace Jump Mode[2], which let you precisely get to any character on the screen with a couple of keystrokes. These plugins really revolutionized my vim and emacs usage.

Then there's also the ability of vim and emacs to quickly and precisely select text objects like words, paragraphs, functions, etc (even when they may span more than one screen). There's just no way a mouse can be anywhere near as fast as doing that for larger objects, and using the mouse is much more error-prone.

Speaking from the Emacs side of fence, my brain doesn't "point" in Emacs shortcuts either, but it sure does intuitively translate "I want to be there" / "I want to change that" to a series of keyboard presses, usually much faster than I could ever achieve with moving a mouse and clicking.

Generally I'm inclined to agree. However with textual hints pointing with vi-motions are a breeze.

In addition my joints click when I reach for the mouse putting an actually physical barrier between keyboard and mouse movements for me personally, hence I tend not to move between the two a lot. Laptop touchpads doesn't induce this strain so those are easier.

For me it's not the mouse itself as much as it is moving my hands back and forth from the keyboard to the mouse. I've had RSI symptoms from that. Now I use a ThinkPad keyboard with a trackpoint and no separate mouse.

qutebrowser as default for opening links, then I run Chrome(ium) with Vimium and Safari with vimari and blank command prefix. I've previously also used Pentadactyl (think there's one named Vimperator as well) for Firefox. Once you're used to it you'll never want to go back.

I've recently made the switch to VimFX as a result of this and I have to say I couldn't be happier - it may not have some of the more powerful features (that I'm unaware of) but it definitely gets the job done.

I also switched to VimFX from Vimperator, and it blew my mind how much faster Firefox suddenly became! I used to simpathixe with my friend who switched back to Chrome "for it's speed" but without Vimperator, Firefox is waaaaay snappier than Chrome (on my machine). It made browsing a fun tactile experience again!

Software development has absolutely nothing to do with code entry speed.

Requirements gathering, mockups, design, testing, and thought make up the vast majority of development time. Then even once you get down to coding, you're often maintaining existing code rather than writing code from a blank slate, which requires more time reading and thought than actual modifications. A one character code change might take an hour; but you spent that time testing, following workflows, and documenting.

So the supposed developers online who obsess over their mechanical keyboards and 1ms time saved hotkeys really confuse me. I genuinely think the day to day software development that I and my colleagues do has no relationship to this bizarre online fetish with code entry speed.

If I really want to improve my coding performance, I'll do a standing meeting instead of a sit down meeting, reduce the number of people in a meeting, or stop requirements slip by completely clamping down on change requests mid-work. Those are my performance tips, and they save hours, not milliseconds...

As someone who obsesses online over my mechanical keyboard (cherry mx clear today, but I have a collection), system hotkeys and .vimrc, I actually generally agree with this. Code entry time has almost nothing to do with software development productivity. It's just stuff I enjoy, and the fact that people get obsessed by it shouldn't confuse you any more than the myriad of other things people obsess about online. Learning to save a keystroke in vim is really just my equivalent of learning to kill a certain monster in a video game.

On the other hand, I'm generally shocked when I meet programmers who don't know their tools at all, and in my experience that really does correspond to poor productivity. I'm not talking about people with average typing speed or people who use toolbar shortcuts rather than hotkeys, but programmers who don't know how to auto-format in their tool of choice or who stop typing every few keys to reach for the mouse, click file and then save. There's a mindset that goes with effective software development, and a natural curiosity and a constant desire to do things just a bit more efficiently are key factors in that mindset. People who are constantly getting out of the flow even in their editor of choice because they haven't learned to use the tool efficiently might not have the right mindset for software development.

> Software development has absolutely nothing to do with code entry speed.

I think this is false. I think, then I type. Then I think, then I type. The more time I spend entering code, the more I lose context on the problem. So while it's not as simple as "speed * time = total amount of code written", I'm fairly certain that code entry speed has a significant impact on my productivity.

Typing speed and use of shortcuts may not be the most important skills for a software developer, but I think it's borderline ludicrous to claim that they're irrelevant. For a trivial counterexample, try coding using an onscreen keyboard and mouse.

You spend a lot of time thinking, and interruptions negatively impact that. The concept that you only think while you type is non sequitur; if that's the case then even with all of the hotkeys you're still going to lose your train of thought every couple of minutes while you test, navigate, or dwell.

Again, the kind of software development people claim they do online, and what I see day to day have no connection to one another. If you're literally spending a whole day typing then you're extremely unusual. Even when writing fresh code with no front end, a lot of time is spent mapping data to structures, requirements building, diagramming, testing, or just considering the most maintainable way to solve the problem(s) presented.

These programming speed challenges that have popped up in the last few years are lies too. All these people do is pre-solve problems slowly and thoughtfully, then regurgitate those solutions within a very small timespan on the day. That's why many of them let the contestants create their own problem to solve, or give them very generic problems (e.g. twitter clone).

I completely agree that code writing speed is not the important metric.

However, keyboard shortcuts can still be very useful for the tasks of testing and debugging. Consider the problem of stepping through many lines of code, or copy-pasting data from one place to another in order to run a test.

Lastly, when you know what you want to write (or refactor) it helps if the input system just fast enough that you can keep your sensation of flow. This part is probably highly variable among individuals.

For me a large part of the reason I use Vim and only Vim for writing code is it just makes the experience so much more enjoyable. I realise this is quite subjective, but my personal experience is that whenever I use a colleague's non-modal editor I find the experience frustrating even though I know how to use it. Years of using Vim has sensitised me to the constant annoyances that accompany using a conventional editor.

Has Vim sped up the rate at which I can edit text? Probably, but for me this is missing the point.

I'm not a physiotherapist but being able to rest my forearms/wrists on the table 99% of the time when using Vim significantly reduces the risk of RSI.

Starcraft is not a good example, because to play at any level above average, you need both keyboard and mouse.

Neither one is optional. Also the actions undertaken by keyboard/mouse in Starcraft are generally not equivalent, e.g. you cannot select a hotkey group of units with a mouse, unless you select the same units visually where they are, which will always be slower.
Same way you won't be making a selection box with a keyboard. Although possible, it is far less precise than a mouse.

In other words, there are certain subsets of actions for which the keyboard OR mouse will always be faster.

This is contrary to operating in a text editor or doing configuration in shell vs gui, where some people have a legitimate preference for doing it with a mouse vs text.

Actually I'm fairly sure (at least in newer SC like HoTS and LoTV) you can select a hotkey group of units with the mouse since they are represented visually in an icon on the screen that can be clicked.

I think the main point was to say the aspects of the game that are faster with the keyboard is around 95+ percent and that top players reduce their use of the mouse to the bare minimum because of its inefficiency.

I think, however, if there are still micro mechanics (e.g. marine split vs banelings), then you will only be able to use the mouse to do that action - I have never heard of a professional player that uses the keyboard for microing units exclusively, but I do admit not having played in a while.

My larger point was that it's going to be hard to make proper comparisons because the result of the action has to be 100% equivalent. Otherwise, the comparison is pointless.

Yes, but you only have one thumb covering all those hotkeys. Pressing them in rapid succession will be much easier in parallel on a keyboard, simply because your four fingers aren't occupied on aiming the mouse and clicking the main two buttons.

The one Razer product I own is the Naga Hex, because having the keys 1-6 at thumb reach on the mouse is wildly helpful for RPG hotbars. Not that I think I'm that much faster a player, merely that my WARS movement hand gets a little less to do.

The real question is, does it matter? I've been programming for nearly 15 years and I'm really struggling to think of a time that my productivity has been limited by the speed with which I can interact with the computer. I've never actually tried to keep track of how my time is spent, but these days I wouldn't be surprised if I average 5+ minutes of reading/thinking/planning/discussing/etc. for every minute spent editing code.

To be honest, I'd go even further - I think we rarely code more than 10% of our time. I know, there is an argument that implementation matters – you don't think about typing at all with good sense of the keyboard, but I personally think it is overrated; unless you are super slow typists, it does not really matter.

What matters, though, is the fact that it is some kind of an art – people master it, people enjoy when they are able to accomplish some tasks in an elegant way (coarse example is macro in vim).

I experienced this recently. Crashed my bike, and broke my wrists. Had about a month where I could only type with one finger at a time, or gently use a touchpad.
I thought it would be fine, since I could take my time and think things through fully in my head before typing the code. Instead, I found it so difficult - as if I could only think as quickly as I could type.

I agree. I was asked in an interview how fast I type. I didn't know how many WPM, but said "Average - maybe even kinda slow". I followed up with a similar thought - I tend to spend more time thinking about the correct solution, finding the right spot in the code than I do typing. I got the job. I've had the reputation at every job as someone who can get things done quickly so it must not hurt too much. Knowing what to type is way more important than how fast you can lay it down. Of course, having both would be ideal.

My input speed definitely is my bottleneck when writing down the code I have constructed in my head

Same here. Never learned to type properly and this happens often enough. I can't count the numbers of times I thought 'man, if I'd just have a brain-machine interface which would tranlate my thinking into text this thing would have been done 10 minutes ago'.

And I have actively practiced my typing to try to reduce this pain. I am stuck at a sustained speed of about 55 WPM, much slower than think. In bursts I can get it much higher, but not for a whole C++ class or lengthy function. I know it shouldn't annoy me but it does that my father, who is practically retired and has has never coded types at like 80 and this while in the military of all the unlikely places.

My bottleneck is usually how many things I can hold in my head at once. Getting things out of my head before I forget them and have to start over is not entirely about input speed, but it does have a significant effect.

Very true. People talking about how vim is so much more efficient than me using VSCode with my "slow" mouse inputs and I'm just thinking about how my brain is the biggest bottleneck of all - it completely dwarfs keyboard and mouse bottlenecks.

I agree 100%. I also feel like vim helps me stay in flow by providing a frictionless input environment. The way vim edits text is pretty close to the way I think about text. "change these quotes", "delete until that >", etc.

The slowest and most time-consuming thing is not writing code, but reading code. And vim, for me, optimizes reading a code base distributed across large numbers of files. I can be anywhere I want in seconds.

I know other editors also have fuzzy file finders and text search, but damn does it just feel good surfing text objects at the speed of thought!

VSCode has a great Vim plugin these days and even without it, a ton of good key shortcuts. Not that maybe you need them today, but options if you need them.

I think that's probably the best summary here: it's great having options.

Also, speed isn't the only bottleneck to worry about. It's easy to forget about things like ergonomics. Things like hand movements in mousing and back and forth between mouse and keyboard can slowly take their toll. Again, it's great to have options to control the overall amount of movement.

I do sometimes because my only to the computer tends to happen very unevenly, in bursts. I ponder things for a long while, then when something clicks mentally, I want to get it typed in as fast as possible before I lose it.

Studies (that I don't know how to look up and probably am remembering wrong) show that the eye jumps forward and back while reading. It is easy to use eye tracking to figure out what word your eye is looking at. They used some scheme to figure out what word subjects were reading, and blurred the rest, and it slowed reading down when the next two and previous words were not readable.

Thus the limit is not mechanical as the eye is moving faster than the brain to feed both the current word and preprocessing of the next few.

Back when the Ask Tog piece came out, I wrote a Slashdot comment along the same lines as this article.

I had one additional point. Keeping in mind that this uses a WYSIWIG editor, use a very slightly different benchmark task: instead of replacing every ‘e’ with ‘|’, replace every ‘l’ with ‘|’ — and by the way, your text is in 6 point Helvetica. And you'd better not miss any, or replace any ‘I’s.

The key (badum tish) is that characters on a keyboard are semantically connected to characters in a document, in a direct and obvious way. By contrast, there is no such direct link between mouse (or touch) and the document, only a transient link via the document's current presentation. With a keyboard, you can operate on text; with a mouse, you can only operate on pictures of text.

> By contrast, there is no such direct link between mouse (or touch) and the document, only a transient link via the document's current presentation.

It need not be this way. It's simply an utter lack of imagination on part of modern peripheral makers. I had a touchstream keyboard and after a bit of work I had emacs integration that was absolutely fantastic and involved semantic gestures.

There is nothing fundamentally flawed about suggesting that gestures could be semantically meaningful.

Another point missed by anyone using the AskTog article to argue against the need for keyboard shortcuts is the fact that you have two hands.

My own Photoshop use often involves simultaneous or near-simultaneous use of both keyboard and mouse. Sometimes I start one action before the other is completed so my hand or cursor is already near the right place.

There is no conceivable keyboard-only or mouse-only control scheme that could better this for one important reason: assuming some use of the mouse is needed (true of Photoshop and many other applications although probably not true of text editors and IDEs) then the cost of moving my right hand from the mouse to the keyboard and back again is a very large cost.

Every watch ‘the mother of all demos’⁰? Engelbart's system was designed to be used with one hand on the mouse and the other on the chordset. Xerox followed this with the Alto, and on to the Star¹, eventually dropping the chordset but with the same model: the mouse and the left-side function key block worked together.²

This "context switch" cost of moving from keyboard only to keyboard+mouse (or mouse only) is why I always have both VimFX for keyboard controls in FireFox, and FireGestures, for mouse-only tools for doing most things.

Whether I'm leaning back in my chair with a hand on the mouse, or sitting forward with both ands on the keyboard, I can have all or most functionality available without having to reposition.

Another problematic point that perhaps should be raised about those studies:

Most of today's software is optimized for usage of mouse, with keyboard only as afterthought. But we should compare software optimally designed for the use of the mouse with software optimally designed for the use of the keyboard (e.g. Vim). Though I am not sure former really exists - which is perhaps a testament of how slow mouse actually is. :-)

>Most of today's software is optimized for usage of mouse, with keyboard only as afterthought.

And can I add my personal pet peeve: Keyboard COMMANDS are referred to as keyboard "shortcuts". As if using the keyboard for anything other than typing text is somehow an invalid usage, and the real way of doing it is with a mouse or something?

Having spent a lot of time in emacs, vim and plan9's acme(1) editor (which uses the mouse heavily):

The speed is about the same for most work. The time spent thinking is the major task which happens, so the time it takes to edit your buffer is not that dominating.

When you have unique reordering which you only have to do once, the mouse in acme(1) tend to beat emacs/vi. One subtle trick is that the acme cursor sits "between" characters, not "on" a character, which makes selection of text much faster. Also, if you click on eg, { it marks to the }. You need a precise mouse and some acceleration to make mouse flicks possible, but then it absolutely rocks.

On the other hand, whenever you have a repeated task, you are better off programming a solution. Here macros or vi move-style comes in handy. In acme(1), you use the built-in command language (which is close to the sam(1) command language). It is a bit easier in emacs/vi I think, but only a bit.

disclaimer: I didn't really time myself, so there may be a perception mistake in these observations. But I don't find one method vastly faster than the other. In a typical editing session, the mix of tasks makes sure that on average the editing speed is about the same. OTOH, I have enough muscle memory for emacs-fluency, so a newcomer would probably be faster on the mouse than in a keyboard-binding-experienced vi/emacs programmer.

I switched to a touchpad over 10 years ago, and my right hand RSI problems went away.

But with an Ubuntu 16.04 upgrade, the touchpad driver went to hell (don't get me started...) and I've been using a mouse again for the last several months. So far no problems, but I really wish I could go back to my once-trusty Logitech touchpad.

Yes. I'm waiting for Apple magic track pad 2 support in Linux before I switch. It's by far the best track pad I've ever used. Unfortunately Linux track pad support is shit as you point out. I'm hopeful it won't be in a few years. And people still wonder why Linux on the desktop will never happen. This is why.

My experience was that my trackpads worked perfectly with 12.04 and 14.04, but in 16.04 they changed the driver to... something that uses 'synclient' to adjust parameters. And this was a disaster; there are some 60 params that affect operation, and many of them have completely non-working defaults (like you sweep your finger across the touchpad and it randomly selects stuff).

I tried for weeks to try and find some synclient settings that made my trackpad work as well as it did in 12.04, to no avail. I have another machine still running 14.04 (don't ask) and the trackpad still works perfectly.

I tried posting on StackExchange, but I am apparently the only person (besides you?) that cares about Linux support for trackpads, or has trouble with the support in the current driver.

As someone diagnosed with RSI, I'm looking for ways to type and use my track pad slower and less of the time. I find that other than text chatting with my co workers, nothing really depends on me being able to type fast. I don't know what kind of programming work the author does, but I find I have to type/track pad very little even for large refactorings and slowing down from about 80wpm typing to probably half that hasn't really affected my working speed. I'd say I'm at least half to a quarter as slow both typing and tracking (used to use a trackball which was faster than any track pad or mouse) and it's affected my overall speed less than 10%. There are many ways to automate and avoid a lot of repetitive actions in programming which also help quite a bit.

My mouse cursor is in a different place every time I reach for it. My keyboard is always in the same place. Sure, if I'm using a cursor with my keyboard, I'll have the same problem, but at least the cursor tends to be in the exact same spot I was already focusing my attention, ie where I was just typing.

If I'm executing an action with my mouse, the path between my cursor's current location and where I need to click is almost always different. I have to move my attention to the cursor, and I can't just rely on muscle memory to do the command.

If I'm executing an action with a hotkey, the path between the home row and the keys I need to hit are always the same. If it's something I do frequently, it's in my muscle memory, and I don't have to shift my attention away from the task at hand.

I don't care much about the speed at which I can accomplish a single action (as long as it's not unbearably slow), but I do care about having to shift my attention away from what I'm doing. If I'm doing something that requires a lot of typing (eg, programming), I'll try to do as much as possible with the keyboard. If I'm in a novel environment and have to rely on visual cues (eg, surfing the web), I'll do most things with the mouse.

There's a lot more potential for repetitive stress injury (e.g. carpal tunnel) with using mouse on one hand constantly. At least with a keyboard, you are distributing the stress among four fingers and a thumb. Although, admittedly I use my right thumb for space rather than alternating with my left thumb.

About this Tog guy, I've never heard of him before, but for all his claims of doing UX research, he has 0 peer-reviewed papers, and the "experiment" about the 'e's and the pipes is so laughably bad, that I wonder what's the point in taking anything of what he says seriously.

Regarding speed across overall, day-to-day usage, the trackpad is closer than a mouse – you can move the pointer a fair distance and click/etc. with just your thumb while keeping your hands on the keys.

And on the new MacBooks, I'm pleasantly surprised how the Touch Bar saves me from even reaching for the trackpad, sometimes.

For me isn't just the fact that using the keyboard is faster to carry out a specific task, it is also that in Vim (or most places using a good keyboard layout) I don't have to take my fingers out of the home row and then carrying out the next action is also faster.

Also worth mentioning, when it comes to picking or pointing from the keyboard, is keynav. It lets you do a binary search in screen-space, which can be pretty fast (though probably slower than the mouse if your hand is already on it).

Keyboard can be a bit slower, but I find that moving to the mouse interrupts my train of thought. I'm not sure why but it seems to engage a different part of my brain that pauses what I'm thinking about.

I find it to be a big pain on my iPhone. You have to tap and hold for a long time, very carefully not moving the finger so it doesn't interpret the gesture as a scroll, then probably adjust its selection using those tiny fiddly little blue touch thingies, and if you mistap at any point it resets everything. Then you need to long tap again to bring up the options, but not medium long tap because that will reset everything, nor have any wiggle since that will scroll, nor super long tap since that does nothing...

The best I can say is that it's better than nothing. I use it from time to time, but only because I have to.

> You have to tap and hold for a long time, very carefully not moving the finger so it doesn't interpret the gesture as a scroll, then probably adjust its selection using those tiny fiddly little blue touch thingies, and if you mistap at any point it resets everything.

That isn't what I was referring to. Force-pressing on the on-screen keyboard lets you move the caret around like a mouse pointer, by sliding your finger on the keyboard. Pressing again/harder begins a selection.

I dunno. I keep screwing up when picking an entry from a list of them on my phone. Perhaps because there is no way for me to correct by dragging my finger elsewhere unlike with a mouse (outside of web links most mouse actions happen on button release, not button press).

I use my Surface Book with touchpad (pointer/mouse), keyboard, touch and pen. Pen and touch can work quite nicely together, e.g. in Maps using touch to pan and zoom and pen to write, all in the one hand. But it certainly requires the software to have been designed with all of these possibilities in mind.