Coding without a mouse? Easy, just use any decent text editor. But coding without a mouse or a keyboard? That’s where things get interesting.
About three years ago, I set up Dragon NaturallySpeaking on my home computer to give my hands a chance to heal from RSI (Repetitive Strain Injury) on the weekends. I mostly used it for web browsing and occasionally writing emails. It was a great relief; finally I didn’t have to feel guilty for using my computer on weekends. But it was also very limited, especially when it came to coding. I’m a professional software engineer, and I liked my job, but I also wanted to work on side projects. I tried one of the leading Dragon extensions to help with this, VoiceCode, but after a few hours I decided it was too frustrating and slow, and the software just wasn’t there yet.
A couple years later I watched a great talk by Tavis Rudd, Using Python to Code by Voice. I was put to shame. Not only did he manage to do it, he did it professionally! He managed to cure his RSI completely over several months, but he never stopped using his voice. He was even faster using both voice and keyboard than keyboard alone.
I decided to give it another try, using the Dragonfly library that Tavis recommended. Unlike VoiceCode, which is a complete solution, Dragonfly is just an improved Python API to Dragon. It doesn’t come with too many built-in commands, but it’s extremely easy to extend. With a powerful Python API to Dragon in hand, I started experimenting with different commands and grammars to use in Emacs and elsewhere. For the first time I started to see that it was possible to become productive. This was good timing, because my RSI was only getting worse.
About six months ago, I decided it was time to start using my voice environment at work. At first I was very slow. It took a lot of mental effort to do the most basic things, and I definitely had moments where I questioned whether I would ever become efficient. But with each week I got faster and faster. And something else changed: I started having fun! Adding new features was building my future. Getting faster was gaining freedom. I felt like Bruce Wayne building his Batcave!
I’m not Batman yet, but I think it’s time I start to share what I’ve learned to help others do the same. I could just publish my code, but that wouldn’t reveal all the little lessons I learned along the way that you will need to know to build your own custom environment. I’m also hoping to hear from others, so please post your own ideas in the comments and tell me what I could do better!