Refactoring Keyboards

After Thomas cunningly found a cheap way to get a smaller keyboard, I’ve been thinking about keyboards. I try to make myself conscious of how I do things and think about whether there’s a better way. I might not spend a lot of time thinking about keyboards, but I spend thousands of hours each year using one, and several of my friends have had crippling injuries related to keyboard use, so really it does merits some thought.

There’s at least two things to think about. Firstly, what physical input device is most useful for you. I spend a lot of time writing code and navigating code. I’m certainly not typing english text all day long. So it is likely that a keyboard design invented for people typing out memos is optimal for me? Unlikely, I think.

That’s a common problem with design of popular objects – economics causes a worse-is-better situation. Regardless of whether or not qwerty is Best, it’s unlikely to go away quickly because People have learned to use them and have little interest in learning something different. So, they’ll buy qwerty keyboards. And economies of scale makes qwerty keyboards cheap. People don’t choose a keyboard because it is Better, they choose it because it is cheap and familiar and requires no new learning. So that means that if you want to set away from the mainstream you’re going to have to spend more money because economies of scale are no longer shining their light in your direction. (Unless you are cunning like Thomas was)

Secondly, there’s the question of how you set up your software to make the most of your input hardware. I’m a big (x)emacs fan, mainly because it is easily mouldable into a tool which is useful for the work that I do. It becomes a tool for me, customized to allow me to easily do the things which I do every day. I watched myself for a week, noticing which tasks I did most often. Then I automated these tasks, and set up key bindings so that my common tasks were easily reachable with single keystrokes. Now when I want to push source code from my windows machine to the linux box on my desk and compile it, a single keypress launches unison to sync the files, then runs make/scons over ssh. That’s a task which I was doing several times a day. Now it’s a single keypress. I like “do what I mean” keypresses too. For example, I have a key-press that gets me to a shell prompt. I don’t care whether or not I was already running a shell – the computer will start one if needed, or switch to an existing one if possible. I don’t want to be hitting alt-tab, looking at the screen and figuring out how many times I need to keep hitting alt-tab to get to the right application or thinking about where the start menu icon for that program is. Do what I want, computer. But software is malleable and exists in a virtual world. We are physical beings and we communicate with the computer by hitting buttons and sliding around lumps of plastic.

So, back to the physical design question, unfortunately you have to weigh up the fact that you want a device which allows you to efficiently control your computer, but also one which won’t cause you discomfort and injury. Computers can be nasty things because they occupy your brain with interesting things, and you end up ignoring your physical body. In the past, I’ve been so involved in coding that my body has got really really cold. I only noticed when my fingers started getting less responsive from the cold and I started making typing mistakes! I’m really bad at noticing this gradual decrease in body temperature – I ended up putting a digital thermometer next to the computer. Anyway, here’s a quick experiment to get you thinking about physical design – try switching off your monitor and sit in your “at the computer” pose for five minutes. Without the internet to distract your mind, you’ll notice that sitting with your arms out on front of your isn’t a terribly natural or comfortable pose for humans. Now think about how many hours of your life you spend on front of a computer.

I’ve tried a few alternatives to the usual keyboard. I find the Microsoft “ergonomic” split keyboard to be pretty good, and I use one at work. I also have a twiddler chord keyboard, which I can use well enough to type english text at an acceptable rate, but it’d take a reasonable amount of customization to make it useful for programming. Tonight I found the Keybowl which is a kind of gesture keyboard. And there’s always the choice of where to put your keyboard – for example, on the arms of your chair. I also think that foot pedals could be interesting, not least because it’d be easy for me to knock some up and see how useful they are. If you could do shift/ctrl/meta/hyper keys on footswitches, then your fingers could get back to only ever hitting one key at a time. I find that scrollbars are one of the most annoying bits of gui which I have to deal with several times an hour. You have to zero in on a tiny bit of screenspace and carefully drag this wee thing around. A tilting footswitch would be ideal for this. I’d love to play with an eye-tracking system – I wonder if you can build one yourself without accidently burning your retina with a laser .. maybe you’d have to be careful to avoid repetitive looking injuries though. 😉

5 thoughts on “Refactoring Keyboards”

  1. I don’t think it was that cunning… just a combination of luck and my refusal to go out and pay GBP 60 for less keyboard than your typical GBP 15 one. Thus far it continues to work fine under windows. Might explore linux again soon.

  2. I use the Datahand keyboard, which is much better designed for the human body but which is also much too expensive for most people. It cost more than my computer.

    However, the most important aspect of using a computer safely is learning to use your body at the keyboard. We keep many muscles contracted in typing position when we’re not typing and even hours after leaving the keyboard. Body awareness training like the Feldenkrais method is the key to avoiding this, and Paul Linden has a good book on the subject called Comfort at the Computer.

  3. James, can you mod the Datahand chord keyboard (i.e. choose which modes/keys on the device map to which conventional keypresses?)

    As Andy mentioned, the best choices for typing English prose don’t tend to coincide with the best for coding in a particular programming language – the letter distributions change, and certain punctuation symbols become as popular as the etoan clique. What have you found?

    I intend to learn a chord keyboard as soon as I get a mobile device. (I don’t even have a mobile phone yet, let alone something more CPUish, but when I switch I suspect it’s going to be in earnest.)
    I don’t suppose Datahand and similar are built with use whilst standing/walking in mind, though.

    Andy, do your feet work fast enough for them to take CTRL? And will it be comfortable to use them for binary yes/no choices? (I guess the experience of many musicians suggests I could be worrying unduly?)

  4. Anthony, you can borrow my Twiddler chord keyboard if you’d like (it has both usb and old-style keyboard/mouse connectors). It’d give you a chance to see how you get on with that style of keyboard. It is remappable, and also has some degree of builtin macro support (ie. pressing a chord makes the twiddler emit a sequence of keystrokes). As for foot pedals, you just have to watch a good drummer to see how quick and controlled people can be with their feet.

  5. The professional version of the Datahand can be modified to map the keys in any way you want to, including mapping single key presses to sequences of multiple characters.

    I would like to play with a Twiddler for a few weeks someday to see how working with a chording keyboard feels.

Comments are closed.