Stenography for Programming

So I'm learning Stenography.

I ordered a UTOPEN stenoboard recently and this is what it looks like fully assembled (and with masking tape "training wheel" labels):

At this point you're either thinking:

"um... why would a game developer want to learn Steno?"

Or perhaps:

"what the heck is Stenography?"

To answer the second question, Stenography is a different way to input text that uses far fewer keystrokes than traditional typing, and at a far greater speed. Personally, I'm mostly interested in the fewer strokes part -- speed has never been the bottleneck on my programming effectiveness.

The answer to the first question is a bit longer.

Our team's writer went through a pretty tough time with a nerve problem where he couldn't use his hands. He's recovering now, but it was quite scary and we went through the whole gamut of find a replacement for typing. Eventually we settled on Dragon Naturally Speaking, which was okay, but that wouldn't work at all for a programmer. As I've frequently experienced pain in my own hands, I've been looking for ways -- even radical ones -- to reduce the #1 source of repetitive stress in my daily life - typing. You see, I've done all the basic stuff -- ergonomic keyboard, ergonomic mouse, correct posture, elbows and wrists at the exact right perfect angle, take frequent breaks, blah blah. That all helps but I still have pain throughout the year and I worry about my long-term hand health.

First I looked into voice-to-text, but based on James' experience it felt really cumbersome and frustrating to use, and the only working examples of people who had adapated it to programming were extremely hacky and didn't seem well-suited for general use.

I briefly considered alternative keyboard layouts like DVORAK, but not only is the research on that somewhat mixed (whereas I am looking for a slam dunk), all alternative keyboard layouts (even the more evidence-based-design COLEMAK) come with the very real risk of mentally scrubbing my QWERTY skills altogether, making it difficult to use other people's computers. That, and the benefits seem marginal -- sure, maybe I'll type a little faster and move my fingers a bit less, but I'm still going to be typing exactly as many keystrokes. It might be the right trade-off for someone else, but personally, if I'm going to relearn how to type from scratch, I want some serious benefits.

Feeling like I had perhaps hit a dead end, I came across this fascinating video by Mirabai Knight:

This is exactly what I was looking for. Not just a coherent explanation of the benefits of her method (Stenography), but also a live demonstration of her using it to write arbitrary Python code in real time! Now this is something I could get into.

As it turns out, there's a reason I haven't heard much about Stenography for general computer use before. According to Mirabai, Stenography has traditionally been a niche field with enormous barriers to entry, in terms of hardware (expensive), software (clunky and DRM-filled), and training (shady for-profit vocational schools). Mirabai and the Open Steno project are trying to fix that.

On the software side, there's Plover, the open source Steno program, which is cross-platform and accepts input from a variety of steno-enabled devices. It sends Steno output to the system as low-level keyboard events, so they'll work with any program just like regular text input. On the hardware side, there's a variety of solutions -- you can get a regular consumer keyboard so long as it has N-key rollover. The user experience is aided by affixing little plastic Steno-key toppers, or you can be a little fancier like me and order something custom like the UTOPEN Stenoboard, which has the form factor of a real steno machine, but sends standard keyboard input for Plover to Stenogr-ify (I think it can also use the input stream format of various professional steno machines). And finally, on the learning side there's a wealth of resources online in the Plover community, such as Learn Plover and Stenomatic 9000.

I've been trying it for a week and I'm already doing pretty well. I started a Steno Diary which records my learning progress which you can read here.

My hope is to be able to do completely arbitrary text input in about 2-3 months, after which I'll try to replace keyboard typing entirely, both for writing blog posts and for writing code. Admittedly this is a bit of a crazy experiment, but I'm keeping careful notes as I go.

Wish me luck!