Dvorak keyboard layout (Source: Wikipedia)

Four years ago, I switched my keyboard layout to Dvorak. I did it because it sounded like it would not only be easier to use, but also make me a faster typist. I’ve read multiple accounts of various software engineers that did not experience significant improvements when they switched to Dvorak, but this post is meant to be a counterexample to those naysayers.

Starting Out

The way that I learned Dvorak is not the methodology that I would (initially) recommend to anyone. I switched my computer to Dvorak and quit QWERTY cold-turkey. This meant that when I first switched the keyboard layout on my laptop and was laughable bad, I had no recourse. I never switched over to QWERTY for a few moments to pound out angry response to DogLover88’s uninformed critique of Obama’s presidency. My hubris was most poignantly demonstrated the first time I logged out of my computer after switching to Dvorak. As I only later realized that I couldn’t actually type my password in to log back in.

For weeks, I struggled through writing papers and engaging in conversations with my friends online. My journal entries became spartan and concise to save myself the strain of having to type too much, but eventually…things got better.

My stats according to Typer Racer (my favorite typing speed site)

At the time of writing, I am in 96.5% percentile at an average of 91 wpm. I know there are many people that are faster typists than me already on QWERTY, but my max typing speed for QWERTY was 71 wpm while it is 113 for Dvorak. Not to extrapolate my anecdotal experience to everyone, but…

Writing Code with Dvorak

I personally find the layout of most commonly used programming punctuation marks to be more reasonably positioned on a Dvorak keyboard. This is because some of the most commonly used programming punctuation marks <“,.’> are accessible with the left hand, while the remaining /?+={}[]()-_\| are on the right side. This distribution of marks is extremely helpful when writing long Java-esque trains of object / method trains and when writing C++ with lots of namespace modifications. For example: