💾 Archived View for gemini.circumlunar.space › ~solderpunk › gemlog › keyboard-hegemony.gmi captured on 2022-01-08 at 13:45:39. Gemini links have been rewritten to link to archived content
⬅️ Previous capture (2020-09-24)
-=-=-=-=-=-=-
In Australia, the standard computer keyboard layout is the US layout. On the face of it, this is a bit odd, given our older and stronger ties to the UK, who have a layout of their own. My guess is the underlying cause is currency. The Australian pound was replaced by the Australian dollar in 1966, well before the arrival of PCs, and so when the time came a keyboard which made it quick and easy to type $ would have been seen as a lot more useful than one which made it quick and easy to type £. Anyway, suffice it to say, the US keyboard is what I grew up with. It's what I learned to use unix on, it's what I learned to program with, and I have decades of muscle memory for it.
My first serious encounter with a different keyboard was when I moved to Finland, where the layout was considerably different. The familiar QWERTY layout of the unaccented Latin characters is exactly the same, thank goodness, but in order to accommodate just three additional characters - ä, ö and å - significant changes have been made in the region to the immediate right of the QWERTY block, which is of course an extremely important area for programmers, being home to {, }, [, ], ;, :, ', ", <, >, / and ?.
I ended up more or less dodging this issue in Finland. I didn't want to just remap my keyboard to a US layout, as I wanted to make an effort to learn some Finnish and hence having quick and easy access to ä and ö was important (å is only needed for Swedish, an official language of Finland but not one I had any interest in at the time). What ended up saving me was that my workplace gave me a Windows machine, and so in order to be even remotely productive at the more technical parts of my job I setup a VirtualBox VM running Debian, and set *that* up with a US mapping. So I got the US mapping for coding and command line work, but the Finnish mapping for email, web and office stuff. A nice compromise and I didn't really have to confront the issue at all.
Now that I am in Sweden, the keyboard layout is unsurprisingly exactly the same, but something else has changed: I'm allowed to use Linux at work. Hurray! I installed Lubuntu and regret it tremendously, but I'll save that rant for another time. The problem is that without my little VM isolation chamber, I'm using the Finnish/Swedish keyboard layout (is this a pan-Nordic layout? Maybe, although I don't see how to get an ø...) for everything. I'm sure I probably could configure some kind of keyboard shortcut to quickly switch between two mappings, but I suspect this would just be more trouble than it's worth, as I would constantly be forgetting which mode I was in, stopping and starting all the time. So, I just decided to make a concerted effort to learn to code on this new keyboard. Of course, my personal machine at home has a US layout which is what I use for all my personal projects, so I was, in fact, aspiring to become in some sense "ambidextrous", which is fairly ambitious.
Frankly, I'm hating it! It's not *just* a matter of having to relearn where particular keys are, the problems are far deeper than that. Early on in the miserable process I found myself thinking things like "this layout is objectively inferior!", but of course that's not true. Well, actually, maybe I still believe there's a grain of truth in there. But the real situation is not that the US layout is "good" in some way and the Nordic, or whatever, layout is "bad". It is, of course, that unix, and all its shells, and C, and regular expression syntax, and HTML and so many other things, were all designed by people who happened to be using the US layout. This presumably influenced their decisions of which characters to use for certain purposes, and those decisions have then been inherited by huge additional swathes of software, e.g. by all the many programming languages which use "C syntax". The frustrations I've been having are the inevitable result of a mismatch between an aspect of my reality and the assumptions of the people who designed the tools I'm trying to use. Having realised this inescapable truth, I kind of wonder - *do* non-US-layout-native developers typically switch their layout when coding? Or do they actually just put up with stuff like what I'm about to describe...
The biggest issue, by far, is with characters like ~, ^, `, '. On a US layout, these work very simply - you press, e.g., the ^ key and a ^ appears and that's that. Presumably this mimics the way they worked on mechanical typewriters, where to type, e.g. an ñ you'd type an n, then backspace (which of course didn't *delete* the n, but merely shifted the carriage back to put your n into striking position again), then a ~. In the English-speaking world, where things like ñ are exotic oddities, this makes sense and as a result all those characters are quick and easy things to use as arbitrary symbols for things like denoting your home directory, or requiring that a regular expression matches the beginning of a string, etc. But in places where those characters are an actual part of everyday language, having them work this way isn't really practical. On the Nordic layout (and I assume this is common to all European layouts, since you don't actually need this mechanism for any Nordic language) when you press the ~ key, nothing appears on the screen at all, but when you subsequently press, say, the n key, you get an ñ. The ~ functions as a combining character, like on a typewriter but you don't have to do the backspace in between for things to line up. In order to actually type *just* a ~, you have to press the ~ key and then the spacebar, so that it "combines with emptiness" (at least, this is how I've been doing it). This means that all those characters which were just random, convenient single keystroke symbols from the US point of view are actually two keystroke symbols. A ``` "code fence" like in Markdown, or Gemtext requires *six* keystrokes, alternating each time between needing a shift key and not! This is way more cumbersome. It gets even worse if you want to follow the ``` up with something between {}s because...
...the second biggest issue is with how brackets are handled. I mean brackets in the most generic sense, i.e. including all of (), {}, [] and <>. First we need a bit of a digression, though, to introduce the existence of two different Alt keys. The US layout has two Alt keys, functionally identical, on either side of the spacebar. The Nordic layout instead has the familiar Alt to the left of the spacebar, but to the right we find its grumpier, non-interchangeable cousin "Alt Gr". I don't know what the "Gr" stands for. In my inner monologue, this key is "Alt Grrr", hence "grumpier cousin". This key acts as a kind of "alternative shift", to facilitate heavy overloading of keys. For example, and bringing us back to the subject of brackets, the 8 and 9 keys, when combined with shift, will produce ( and ) (frustratingly shifted one position left from the US layout, where 9 and 0 do this, but oh well), but when combined with the Angry Alt will instead produce [ and ]. This is just the first, and actually least annoying, instance of my big struggle with brackets on this layout, which is a complete lack of consistency. On the US keyboard, corresponding pairs of brackets are *always* immediately horizontally adjacent, and with the exception of [ and ], which are their own keys, *always* need a shift key. In this setup it's very easy to type an opening and closing bracket in immediate succession, which is a handy habit many developers have acquired. On the Nordic layout, () and [] are adjacent pairs, but one requires shift, and the other Alt Gr, { and } require shift, but are *not* adjacent - { is on 7 and } is on 0 - and, the pièce de résistance - < and > are on the *same physical key*, which produces < when used without shift and > when used with it. There is literally no aspect of your hand position or movement which remains constant across all possible opening and closing pairs of brackets!
Actually, Alt Gr causes quite a lot of problems, even when not coding. In most web browsers you can use Alt in conjunction with the left and right arrow keys to go back and forward, respectively, through your browser's history. With an Alt key on the right hand side of the spacebar, this is a very easy, natural, one-handed operation. But with only a single Alt on the left hand side of the spacebar, this is impossible to do with one hand. And the old muscle memory is dangerous here on Windows! There Alt Gr plus arrow keys serves to rotate the display 90 degrees, either counterclockwise or clockwise - I am astonished both that such an obscure and surely very rarely needed operation is mapped to such a convenient and easy to accidentally trigger key combination, and at how it seems to temporarily bring a machine to its knees with intense load for a few seconds.
I am sure all of this would eventually become second nature, but it's such a more complicated undertaking than I imagined that I'm no longer convinced becoming "ambidextrous" in this way is worth the effort. It's not a case of becoming equally skilled at two arbitrary but equally functional ways of doing something - it's a matter of becoming equally skilled at using one tool designed for the task at hand (actually, interestingly, here the *task* was designed to fit the tool!) and one tool designed for an entirely different task. Why bother?
Anyway, I went to the trouble of writing all this up not to make fun of a particular keyboard layout (although, really, < and > on the same key?!), but because I thought it was an interesting example of implicit, unquestioned cultural assumptions influencing technical design decisions which eventually become widespread outside of their originating cultural sphere, which seems like a good thing to be aware of in general. I also just never realised how deeply and directly ingrained the US origin of most of modern computing is in details like this until I started thinking about why coding on a non-US keyboard sucked so badly. Perhaps it shouldn't be, but it was kind of shocking for me to realise that the only reason we use $ not just to talk about money but as a prefix for shell variables or in regular expressions, but never use £ or ¥ to talk about anything other than money is simply because of where the relevant technologies were developed! In an alternate history, it could be the other way around...