How I learned Dvorak in 3 weeks

and built aoeu: a tui Dvorak teaching application built for programmers.

aoeu menu

The Dvorak keyboard layout is an ergonomic alternative to mainstream QWERTY layout. Although spelled similarly, Dvorak (Dah-vor-ack) should not to be confused with the popular composer Antonín Dvořák (Dvo-zhack)!

Choosing a layout

Over one winter break in college, I decided to learn an alternative keyboard layout. My limited timeframe meant I had three weeks to become proficient enough with the layout such that I can resume a normal level of productivity by the start of the Spring semester. So why choose a layout that only shares 4 key locations as QWERTY when other layouts like Colemak are more similar and much easier to learn? Dvorak and QWERTY share ~ , \ , a , and m if you were wondering.
Dvorak Layout

The Dvorak layout

Firstly, I wanted to switch to the most ergonomic layout. Many people learn an alternative layout to increase typing speed, but I was targeting typing efficiency. I've dealt with minor carpal issues in the past and I value my hand health highly. From my research, Dvorak seemed to be the best layout ergonomically that wasn't also overly obscure, so I chose it.
Dvorak heatmap
Colemak heatmap

Dvorak vs Colemak ergonomics

After watching How I went from 10 to 130 WPM in 3 months by Penguify about his journey learning Colemak, I didn't want to risk losing my QWERTY skills like he temporarily did. I think the main reason people (including Penguify) lose QWERTY skills after switching to Colemak is because of the similarity between the layouts. If you train a golf swing for years and then pick up baseball for a few months and irregularly practice your golf swing, it only makes sense that your new baseball muscle memory would impact your swing. What about if instead of baseball you took up ice skating? Once you return to golf, your swing will likely remain unchanged because ice skating shares little resemblance with golf. The same applies (I believe) to keyboard layouts. Dvorak is so different from QWERTY, it's actually an advantage as it's less likely to impact existing muscle memory. Over the initial weeks and months of learning Dvorak, my QWERTY speed and skill remained unchanged despite hardly using the archaic layout :^).

How I learned Dvorak in 3 weeks

First, I worked through TypingClub to learn the basics of touch typing: the location of each key and which finger to press it with. During this time, I was EXTREMELY strict when choosing which finger to use and never looking at my hands. I reviewed TypingClub's lessons until I could touch-type (albeit very slowly) without ever looking at a reference image. At this point, I moved onto practicing quotes with monkeytype. Even at this point, I would have to pause for multiple seconds to conjure an image of the Dvorak layout in my head before remembering where a key was. Here, I valued accuracy over speed: aiming for 96%+ accuracy. This was the toughest part since typing was painfully slow and difficult. Trying to recall the exact location of a key in an unfamiliar layout is surprisingly mentally taxing. I can still not-so-fondly remember typing 10-20 words per minute and being mentally drained after half an hour. After graduating to 30 WPM Woohoo!, I started mixing writing into my typing routine. Weirdly enough, typing words from your head is significantly different than typing words from a screen. After a hellish couple of weeks of practice, I was typing at ~60 WPM and decided to graduate to practicing programming-specific skills. I practiced typing code with speedtyper.dev which is basically typeracer but with code snippets instead of quotes. By this time in my learning process, I felt like I was flying compared to where I was a couple of weeks ago! The final key was relearning Vim with Dvorak. I'm aware some people re-map their vim binds to avoid this part, but I came this far so I figured I'll do it right. I ran through vimtutor a few dozen times and that was good enough to get me back to vim proficiency and ready for my Spring semester classes! After classes started, I continued typing training on monkeytype and speedtyper.dev but it still took a few more months to surpass get to 70WPM, be aware of diminishing returns!

Takeaways:

1. Take frequent breaks. Building muscle memory is a lot like building real muscle. It get strengthened from rest, not work. Don't expect to see improvement over the course of a session, expect to see it over the course of days and weeks and months!

2. Value accuracy over speed. Hitting backspace isn't fast nor ergonomic, so don't rely on it!

3. Know when to move on. Once you feel yourself plateauing, move onto the next step! Similarly, don't start practicing difficult words and symbols before you've mastered the alphabet.

4. Have fun! Remember this should be a fun challenge, so take a break if it's getting stressful or (overly) miserable!

Aoeu

I built aoeu to help programmers switch layouts more quickly. Other typing resources focus on learning to type quotes while aoeu is a resource for practicing words and symbols that are common in programming. Through focused practice, facilitated by aoeu, programmers can speed up Dvorak's intimidating learning curve. Aoeu teaches in short, focused typing tests. Each lesson has one focus, from common shell commands to popular language keywords. As you may have noticed, aoeu gets its name from the home row of Dvorak!

I initially wrote aoeu in Python using the Curses library for the ui, but it had some issues. The Curses library would completely break the tui if the terminal was resized (really awesome feature of that library). Aoeu was written in go and uses the tui-go library for the ui. Aoeu breaks everything down into words, meaning the user must correctly type a word before moving onto the next.

aoeu on GitHub