top | item 17817162

The Workman Keyboard Layout Philosophy (2010)

122 points| caustic | 7 years ago |workmanlayout.org | reply

161 comments

order
[+] reacweb|7 years ago|reply
He uses the wrong test. Testing on "The Adventures of Sherlock Holmes" is meaningless for developpers: tests should be performed using real usages like "source code of linux kernel" or "mailing list of linux kernel" to have a better balance between code and text.
[+] jstanley|7 years ago|reply
Even better, it should be performed using a recorded vim session, rather than a full file. The keystrokes you use while editing are not the same as those that end up in the finished file.
[+] deong|7 years ago|reply
There's another issue as well. His mapping of difficulty reaching a key isn't really the whole picture. On a conventional QWERTY layout, neither the E nor the C keys are especially hard to reach, but if you had to frequently type them successively, that would be terrible. What matters is not just where a key is in relation to your hands, but also where two keys are in relation to one other.

In grad school, I did a lot of work on the Quadratic Assignment Problem (https://en.wikipedia.org/wiki/Quadratic_assignment_problem). If you model that "key reachability" metric as two-key sequence difficulty instead, you actually get a QAP instance to solve. I built a little toy project that would look at the source text of my dissertation in LaTeX as well as the accompanying C++ source code for bigram frequencies, and I mapped out a flow matrix manually in a similar way to the author here, but including that successive keypress difficulty, and ran my multiobjective QAP solver to generate a range of keyboards optimized for my specific dissertation work.

I did this as a fun little gimmick as part of a sort of "ignobels" within my department, so the results weren't really a thing you could use. To generate a usable keyboard layout, you need to also include a ton of heuristics for things like "put all the number keys together" and the idea that you can treat "a" and "A" as the same letter, but "2" and "@" may make sense to separate, none of which I really properly handled. But I think with some work one could actually formalize the problem of finding a real layout for normal people to use.

[+] Timpy|7 years ago|reply
Agreed, a complete text is quite a different thing from editing text. Recording your typing session would be interesting, it would be interesting to see an analysis on where common typos keep happening.
[+] deno|7 years ago|reply
Sit up straight (fix your posture) and stop gluing your wrists to the desk or wrist “support” and the layout doesn’t matter unless you’re going for typing records.

There is no magical layout that can eliminate the tension you’re artificially creating by stretching your fingers into unnatural positions instead of just moving the entire hand.

What healthy typing looks like (on a horrible keyboard no less): https://www.youtube.com/watch?v=Vs2B5XRtr6k

Imagine you tried playing a piano the way you type on your keyboard: https://www.youtube.com/watch?v=InqmH-o1cX0

The pain is letting you know you’re doing something wrong.

[+] brandonmenc|7 years ago|reply
Agree with you in general - that adjusting your body, and not your keyboard, is the fix - but not necessarily the specifics.

The most important fixes imo are:

- Neutral angle wrists (elbows flared so that it's a straight line from the elbow to the fingertips, i.e. no wrist "yaw")

- Monitor at eye-level

- Forearms parallel to the ground

- Feet planted on the floor

afaik slouching takes pressure of the lumbar vertebrae, but neither that nor sitting up straight is uncomfortable for me, and I arbitrarily alternate between the two. Also, arms resting on the desk doesn't bother me.

I find it nearly impossible to work on a laptop for any length of time, mostly because of the monitor-at-eye-level requirement. Speaking of, an adjustable monitor arm is the best investment you can make. I use the Humanscale M2.

[+] tjoff|7 years ago|reply
It is natural to statically lift your arms like that for hours upon hours?

Where one places the support is important, but I've seen conflicting statements whether lifting your arms would be beneficial.

I have not yet seen the piano video but a piano is much bigger than a keyboard and I see tons of reasons as to why whatever works for one doesn't necessarily have to work for the other.

[+] SkyPuncher|7 years ago|reply
I strongly, strongly disagree that the layout doesn't matter.

I was experiencing pretty bad pain from typing on a qwerty layout. Qwerty has high percentage of combinations that require jumping rows or contorting your hand.

I switched to Colemak (which follows a similar philosophy as Workman) and my hands have significantly too less pain. I still get some from being a heavy typer, but I no longer experience the worst of the paint.

I know you can't prove anything with one word, but the word nice is a great example.

On qwerty, "n-i" forces an uncomfortable twist with the pointer and middle finger. "c-e" forces a jump of the home row.

On colemak, "n", "i", and "e" are all on the home row with the same hand. "c" is on the opposite hand in the lower row. There's no uncomfortable twisting.

You find these types of improvements across nearly all of the intentional layout designs like drovak, colemak, and workman. Regardless of "proper" posture, they do minimize a lot of difficult typing procedures.

Look at the stats on this comment alone: http://patorjk.com/keyboard-layout-analyzer/#/load/1mwrX5bH

[+] wruza|7 years ago|reply
I can imagine typing a wordy contract with this body and hand position, but not programming. He doesn’t use ctrl/shift much, and when he does, it seems not like a quick thing. He also will bottom out as hell even on non-horrible keyboard. (Mac kbd is far from horrible when compared to other membranes, btw.)

I’m not a homerow-guy even, but try to {foo:(x,y)=>(x[y]+1)} and I bet this method will feel the struggle.

[+] brennebeck|7 years ago|reply
Huh. I had no idea I typed pretty healthily. Thank you.

But... references? (It does make sense, though)

[+] eru|7 years ago|reply
No, thanks. I'd rather use my Kinesis Advantage than a horrible layout on a horrible flat keyboard.
[+] fooblat|7 years ago|reply
As a full time developer who used to suffer terrible RSI pain, I solved the problem without changing keyboard layouts. After consulting with my doctor and an ergonomics expert, I realized my problems were cause by the setup of my workstation and the bad posture habits I had developed.

1. I would rest my palms as I typed. This turned out to be a major source of pain. Retraining myself to "float" my hands over the keyboard was a massive improvement.

2. My desk was too high / my chair was too low. Setting up my desk so that my keyboard is as close to my lap as possible was the next big improvement. When in a seated position, my hands are very comfortable when resting on my thighs. Putting my keyboard in a drawer that is just above my thighs helped a lot.

3. I also switched to a trackpad instead of a mount and a split keyboard. I found this allowed a more comfortable angle for my hands and less temptation to rest my wrist while mousing.

After making these changes, I have been pain free for over 10 years.

[+] eggie|7 years ago|reply
Did you consider using an isomorphic layout like the typematrix? I find the anachronistic skew in keyboards to be a source of discomfort.
[+] lbj|7 years ago|reply
You hover? Doesnt that just move the strain to your upper arms?
[+] lorenzhs|7 years ago|reply
This looks interesting but the symbol still look very qwerty-ish. I type on Neo-2 (https://en.wikipedia.org/wiki/Keyboard_layout#Neo), which uses ISO keyboards and primarily targets German, even though the majority of my typing is in English. Its entire third layer is for symbols that are common in programming. Layer 3 is activated via either caps-lock or the key above Right Shift, and has \/{}* ?()-:@ as the home row, …_[]^ !<>=& above it and #$|~` +%"'; below it (there's a picture in the Wikipedia article linked above).

Layer 4 (right alt or the key to the right of left shift) is also pretty cool, it has lots of navigation keys and a numblock in convenient positions, but I somehow never got around to learning that. All the layers are shown on https://neo-layout.org/ (in German, but that doesn't matter for the pictures).

With a Trackpoint (Thinkpad USB keyboard), this means that my hands don't have to leave the home row at all. It's super convenient.

[+] floatboth|7 years ago|reply
> Try typing “The” with the T capitalized on Colemak and hopefully you’ll see what I mean. Your right hand will move somewhat like this: you swing to the right to get the SHIFT key with your pinky, then you swing back to the left to get the letter ‘H’, and then you move to the right again to get the letter ‘E’.

Why would you use the right shift here?? I shift with the left pinky in this situation and it feels fine.

Colemak is just fine, and it's already included in most operating systems.

[+] cammil|7 years ago|reply
I think there is a theory that one "should" use the _other_ hand for any modifiers. Presumably and primarily so that the letter key is always pressed using the same finger and position of the hand.
[+] SkyPuncher|7 years ago|reply
I shift this way too on Colemak. I much prefer the slight shift down of the pinky than the whole arm/wrist shift to tackle the rights shift in many cases.
[+] Loic|7 years ago|reply
If you are looking at alternative keyboards, I have been using the TypeMatrix 2030[0] with a transparent cover for about 10 years.

I am using the Dvorak layout, but I think that the main reason it is so comfortable to use is the ortho-linear layout of the keys and that it is totally flat.

I would recommend anybody with RSI to test first ortho-linear physical layout of the keys with your standard Qwerty or Azerty or whatever you use right now before moving to something else.

[0]: http://www.typematrix.com/

[+] jimmy1|7 years ago|reply
> I didn’t like the way Dvorak was laid out especially for the weak fingers of the right hand.

I am not sure if I only know this from playing piano and guitar, but it is surprisingly easy to strengthen those fingers. The exercise is very simple and all it takes is a couple minutes a day, it can be done anywhere (even better if you have a piano or guitar!):

1. Lay your fingers on a table, and curl them like you were at a keyboard or holding a small ball in your hand.

2. Keeping all of your other fingers on the table, lift your weaker finger, typically the ring as high as you possibly can without causing the other fingers to rise.

3. Bring it down as hard as you comfortably can.

4. Repeat 1-3 until you can lift higher and bring it down harder without affecting the other fingers.

[+] bena|7 years ago|reply
Thanks for that. I've started playing guitar a few years ago and my ring fingers are pretty weak and dependent. I can't do the Vulcan salute for instance, my ring finger is kind of "tied" to my pinky.
[+] zafiro17|7 years ago|reply
I don't have any RSI issues but I love the idea of alternative/improved keyboards and layouts and have accidentally become kind of an aficionado/collector. I have on permanent rotation and have written reviews of a Kinesis Ergo [0], Truly Ergonomic (TEK) [1], TypeMatrix [2], and Happy Hacker [3] and I'm looking seriously at buying an Ergodox one of these days. I happen to like and dislike each of those keyboards: each has advantages and disadvantages. Same goes for Dvorak (which I use regularly) and Colemak, etc. I'm hard pressed to say which is my favorite, but I like each for different reasons and conclude it would be impossible to combine them into any "perfect," ultimate keyboard.

One thing that almost never comes up in these discussions is the need to change or rotate keyboards. I love the Kinesis but eventually get tired of it, and am happy to move to the TEK, which then starts to bother me until I move to the TypeMatrix, etc. Every keyboard and layout improves some part of typing while exacerbating another. Switching keeps you nimble. I suspect it's like bicycles, of which there are infinite variations. If one bike hurts your wrists and another hurts your legs and another bothers your neck, switch every few rides.

[0] http://therandymon.com/index.php?/archives/167-Typing-in-Sty... [1] http://therandymon.com/index.php?/archives/290-The-Truly-Erg... [2] http://therandymon.com/index.php?/archives/295-The-TypeMatri... [3] http://therandymon.com/index.php?/archives/304-Review-of-the...

[+] QasimK|7 years ago|reply
A keyboard layout for programmers, which allowed the use of special characters on the home row, perhaps by using a mixed corpus of source code rather than just novels, would be interesting to see.

Recently, I ordered the Ultimate Hacker’s Keyboard because I think typing is quite important for a programmer, especially if you consider health as the author of this article does. I’m a little bit weary of not using QWERTY because of the high cost of switching, so if I did switch, I’d want to select a layout that was basically perfect for me long-term (which sounds very tough to do).

[+] jerf|7 years ago|reply
"which allowed the use of special characters on the home row"

Unless you're programming in something very symbol-heavy, even by programming language standards, I suspect you'll find that it's hard for any symbol (other than space) to break into the top-10 non-space symbols; not impossible, but hard. I just did a 200KB perl file here, and the top 12 symbols are space, e, a, r, s, i, t, o, n, newline, l, and d. The first symbol, underscore, shows up in position 13, then it's u, then finally, $. Underscore is less than half as popular as the e. As you may guess, the naming convention of this code is mostly underscore_based. If this code was camelcase instead, you'd have to go down to position 14 with $.

The other problem is that languages will significant differ, so you can't really create "a programming layout". If you did nothing but type Perl, that list of symbols may suggest that perhaps $ should be on the u or i key or something valuable like that, but if you run the same process over your C# you're not going to see $ popping up nearly as high and now you've got a huge wasted key. Parentheses are in the 22nd and 23rd slot on this count, the only thing that I would be comfortable saying is really generic. (And then there's still Haskell, where they are used, but much, much less often.)

[+] lorenzhs|7 years ago|reply
See my other comment in this thread -- this exists for German with a secondary focus on English and programming (neo2: https://en.wikipedia.org/wiki/Keyboard_layout#Neo), and it's what I've been using for at least five years, and I love it. I'm not aware of something similar that is geared towards English and programming, though.

It takes a few weeks to learn a layout that is radically different from what you used before, and sadly the most efficient way to switch is to just dive in and use it all the time, even if it's painfully slow and annoying. I switched when I was in university, but it might be difficult to do when there's someone paying you for things that require typing.

[+] chrismorgan|7 years ago|reply
If you have keyboards with physically different layouts—e.g. one ergonomic, one typical laptop, one swipey touchscreen—and use them all at least occasionally, you’ll be able to develop independent muscle memories for each.

Go ahead and learn a different layout on a fancy keyboard, while keeping a stock standard layout (not even remapping Caps Lock to anything!) on a laptop keyboard, and I understand you’ll have little-to-no trouble with it.

(I’m only early on in this process myself, but have been told this by others and it makes sense to me. As one small example I have experienced, I automatically switch to using Cmd for shortcuts instead of Ctrl with no thought, as soon as I’m faced with an Apple keyboard—regardless of the OS, which has tripped me up a couple of times!)

[+] SkyPuncher|7 years ago|reply
Oh! I have an answer for this one on Mac. https://github.com/tekezo/Karabiner-Elements

It let's you software remap keys. I've entirely disabled my caps locks key (I barely ever used it) and turned it into a combo esc/modifier key.

Holding caps plus a home row key types the corresponding symbol (e.g. "a" is "!", and ";" is ")". I also have u,i,o,p mapped to arrow keys (similar to vim). Then some misc. combos for things I commonly program (e.g. caps + m = "() => {}" - very helpful for JS)

[+] hobofan|7 years ago|reply
> I’m a little bit weary of not using QWERTY because of the high cost of switching, so if I did switch, I’d want to select a layout that was basically perfect for me long-term (which sounds very tough to do).

Similar to programming languages, after learning a second keyboard layout the switching cost will be much lower for each additional one.

I switched from QWERTZ (German) to QWERTY (US/international), because it is already much better for programming, and am currently trying out Colemak, and it was much easier to adopt (=get to a reasonable workable speed).

[+] yiyus|7 years ago|reply
> special characters on the home row

In my opinion, the best setup would be an ortholinear keyboard with not many keys and multiple layers (let's say something like a Planck), but instead of using key combinations to change layers, use pedals.

I know there has been some attempts to do something like this, but I've never tried it. Has anyone here used a similar setup?

[+] vemv|7 years ago|reply
I left Colemak for Qwerty some 5 years ago. Keyboard layout matters much less than your typing technique.

Same thing for ergonomic keyboards - they can be a dangerous sign that you're focusing on the wrong thing, on micro-optimizations rather than on the root cause.

I have no guide to share unfortunately but I'd recommend observing one's movements, and try to figure out what's the most natural way of doing a given thing.

Also, regardless of what you do, typing many hours will tire you / be painful. Act accordingly.

[+] ubercow13|7 years ago|reply
I have been using this for ~4 years. So far I like it, it is extremely comfortable to type on and instantly felt better than eg. colemak to me, though I never learned to touch type as quickly on any other layout. However, I wish I had just stuck to qwerty in the end, as I use vim keybindings wherever possible and the extra steps needed to customise the keybinds in each application is a hassle, and sometimes not even possible.
[+] StreakyCobra|7 years ago|reply
Anything other than [AQ]WERT[YZ] layout-based keyboard is already a big improvement for your fingers. The differences between Workman / Colemak / Dvorak and so on is mostly a matter of taste. One thing to note is that widely used layouts have more chances to be supported by software and by keyboard manufacturers (e.g. http://www.typematrix.com/). So it may be wiser to choose mainstream layouts that creating your own or using niche ones.

There is probably not a definitive answer for which one is better ("better" would have to be defined for this), so go ahead, read a bit about them and do your choice. Be aware though that once you have choose one, you will be stuck with it for a looong time, because switching layout is hard. You have to remap all your brain an muscle memory before being able to reach your previous efficiency. Spoiler alert: it takes months to years for this.

PS: For french speaking people, you may want to have a look at https://bepo.fr

[+] lorenzhs|7 years ago|reply
Agreed. I use neo2, which is the German equivalent of bépo. It's shipped with pretty much every Linux distro, which means that all I need to do is "setxkbmap de neo".

It definitely takes several months to achieve a decent speed on a new layout, but I wouldn't say years. I did a full switch after deciding I wanted to learn neo. That means that from that day on, I didn't use qwertz at all, and forced myself to type everything in neo. Also, don't use stickers. They teach you to look at the keyboard. Put a printout of the layout next to your keyboard and look at that. Otherwise you'll just form bad habits. It took me around a month to get to a point where my neo typing speed was reasonable, and maybe another month until I had managed to get to the point where it wasn't annoying any more. Of course I was in university back then, and not paid to develop software.

[+] eggie|7 years ago|reply
The author doesn't even learn dvorak before deciding that it doesn't work for them. They mention don't like how it behaves on the consonant-heavy, qwerty-optimized commands used in unix. (I have to say this is a fair evaluation, but in practice the layout somehow doesn't encourage RSI despite the apparent awkwardness of typing unix commands on it.)

In result they don't seem to understand that the dvorak layout is optimized for alternation between hands (they do mention this) and inward rolling motion (they don't seem to understand this). You can really feel this when typing, and it makes typing downright enjoyable.

I wouldn't be surprised if much of the added distance relative to colemak and workman is probably reaching for the "i" with the left pointer finger. These are the easiest movements to make repeatedly, and in my experience the home row horizontal movement that they try to optimize out of workman isn't really important.

People should be free and encouraged to make their own layouts to beat RSI. But, scientific measurement of what is better seems basically impossible...

[+] cityroasted|7 years ago|reply
In the author's defense, I came to the same conclusion using Dvorak when I was a teenager learning unix and programming. I switched back to QWERTY for a while, but around 8 years ago I learned about Colemak and switched and have been very happy with it since.

One thing I like about Colemak is that it is close enough to QWERTY that I can still type on QWERTY by looking at the keys and not look like a complete fool. Dvorak is so different that it completely rewires the brain and it's very difficult to switch between it and QWERTY. That's been my experience at least.

[+] rlkf|7 years ago|reply
> dvorak layout is optimized for alternation between hands and inward rolling motion

True; Dvorak seems to always score worse on tests that don't weight distance by ease.

[+] etatoby|7 years ago|reply
Yes, that was my impression too. I find Dvorak so natural, with the alternation and the inwards rolling motion. Plus it's already supported by every OS ever.
[+] amelius|7 years ago|reply
Given that micro-movements can lead to RSI, shouldn't the goal be to make the hands move as much as possible instead?
[+] ObscureScience|7 years ago|reply
That's an interesting question. Then, dvorak or similar (alternating hand) layout would probably be a good starting point.
[+] bnewton149|7 years ago|reply
My biggest issue with traditional keyboards is using non-alpha keys like the arrow keys, modifier keys, punctuation, numbers, escape, and function keys. I (sorta) solved this issue by getting an Ergodox and designing a qwerty layout[1] that made the modifier keys thumb accessible and other non-alpha keys close to the home row through layers:

- navigation layer: arrow keys and tab navigation on the home row.

- number and symbol layer: numbers on the home row, function keys one row above and punctuation one row below.

Its still a work in progress but I think it has helped me.

[1] https://configure.ergodox-ez.com/keyboard_layouts/zjdlgd/edi...

[+] mherrmann|7 years ago|reply
I feel Carpalx has a less arbitrary, more rigorous solution to this [1]. I've been using its QFMLWY for years. It is hugely better than QWERTY. Though as a programmer, I'm still not fully happy with the Ctrl and Shift keys being in their standard location, and thus at the weakest (pinky) finger.

If anyone would like to give QFMLWY a go, let me know. I have scripts to install it on Win, Mac and Ubuntu.

[1] http://mkweb.bcgsc.ca/carpalx/?full_optimization

[+] roenxi|7 years ago|reply
It is interesting, given that the corpuses are available, that keyboard design isn't framed as some sort of linear or nonlinear optimising problem.

Choose a set of tasks -> plug into an optimiser -> get a keyboard mapping tuned to the task you are doing. There'd be people who find that useful. The maths isn't at all hard, the data is there.

EDIT Maybe it would be a fun project to take something like top 100 C libraries from github and build up an optimised keyboard layout for C coding. It is an interesting idea.

[+] toyg|7 years ago|reply
The problem is generalizing the corpus enough to make it viable for more tasks than "writing C libraries", so that it can achieve mainstream support. The parameters to consider are also contentious - are we optimising for travel, finger stretching, speed, etc ...? It's not just about data.
[+] AprilArcus|7 years ago|reply
The Colemak Mod-DH family of layouts incorporates the major insight of Workman (that QWERTY v and n are lower-effort positions than QWERTY g and h) without abandoning the better elements of Colemak (common left hand shortcut keys QWAZXC remain unmoved, good hand alternation, emphasis on inward rolls).

http://colemakmods.github.io/mod-dh/

[+] gedy|7 years ago|reply
While I don't use the DH change, the angle mod mentioned where zxcv are shifted left one key has been amazingly helpful for me. It makes standard staggered keyboards a lot more comfortable to use correct fingers for left bottom row
[+] nicolas_t|7 years ago|reply
Thanks for this. I've used colemak for many years but the position of the dh is definitely not ideal. I'll try it out and see how it fares.