Saturday, May 2, 2009

On Touch Typing and Dvorak

This topic turned out being longer than I expected. I shouldn't be surprised though. This topic means a lot to me.

Part of my 1 million step schedule to improving my productivity has been typing. Actual touch typing. I've been using all kinds of software. This is not an article telling you to touch type though. You should already be able to do that. At least 40 wpm.

This is sort of an intermediate article on touch typing. I'm finding that I'm at that intermediate level in a lot of things at the moment. This class doesn't seem to be well catered for in general. There's plenty of "Absolute Beginners Guide to ...", "Complete Idiots Guide to ...", and "(Blah) for Dummies" and then there's "Advanced blah..." and "Super Advanced ..." but not much for us intermediates. This is for you.

This has been a debatable topic for a while as far as I've seen. I don't believe it should be. I'd wager that most people that say that touch typing is not an important skill for a programmer can't themselves type (very fast), and are responding out of insecurity; fear of having to invest time in typing if the idea catches on.

Let me be clear here: You can't convince me that touch typing is not an important skill unless you can type at greater than 100 wpm. Even then people may find it hard to say whether typing has improved their productivity or not, because you most likely built up your speed over time, and may not have noticed the improvements in the way you would if you somehow miraculously jumped from 30 wpm to 130 overnight.

If you can type over 100 wpm and don't believe that touch typing really is deserving of second place on my list try swapping your keyboard layouts. Do that for a week. Or two. Notice how frustrated you become when doing any sort of typing? You start to develop work flow problems. You can't think straight. More on changing keyboard layouts shortly.

You see, when I say "you should touch type at over 100 wpm" I'm aware that actually most programmer's time is spent thinking. If I can type at 120 wpm, and Bill only types at 40 wpm, that doesn't correlate to me packing up at 12:00am and poor Bill battling to 6:00pm, because programmers usually don't type for 9 hours straight. Our jobs don't require that sort of thing (although if the occasion does arrive I'll have saved myself 6 hours in one hit. Do you realize how big this number is?). The reason I put this so high is because being able to touch type with 100% accuracy at 100 wpm is good for your work flow. When I typed at only 30 wpm I would have all these ideas running through my head and I couldn't put them down fast enough; I ended up losing them. It's the same when I write with pen and paper - it's just not fast enough. I can't control when ideas come, but I've noticed they usually seem to come in short, rapid bursts. And if I can't type quick enough, they're gone. Maybe I just have a poor short term memory. Does it really matter? I don't want to risk losing my million dollar ideas.

I've also found typing much better for documents, manuals, emails, and the like. When I can touch type fast I'm much more confident in my typing. I "talk" more, more inclined to give better, more detailed explanations. I communicate better. And if you hadn't noticed, communication is number 1 on my list. So typing fast doesn't just facilitate your creative flow, but also your communication. Since communication is so important anything that helps is vital.

And yes, the obvious one: You get stuff done faster. Just reading that sentence you might underestimate just how good a feeling it is when you know you've whipped up something quickly. Typing fast is just plain fun.

It's hard to convey the liberties that touch typing gives you if you haven't experienced it for yourself. There is a subtlety that I've skirted over until now though. You must not only be able to type fast, but at 100% accuracy on average. Or at least about 99.5% accuracy. Otherwise the amplitude of your benefits are significantly attenuated. This is crucial. It's also not as absurdly hard as it may sound. I've been doing it for a while now.

I'm quite confident that there are a few more reasons why learning to touch type is important that I've forgotten; stuff like showing off to your friends and the like. Important stuff.

Creativity, communication, and productivity. Touch typing improves your ability in all of these. Notice too that these three characteristics appear all the time on job application forms (or is it just me?). So typing nicely captures three very important characteristics that modern companies appear to be looking for in employees these days.

Now do you understand why it's number 2 on my list?

Now, as promised, a bit on changing keyboard layouts. One of my pet irks is when someone writes a blog, an essay, an article, a comment on an article, or whatever, claiming a totally unbiased point of view. Everyone brings their own biases to the party. You can't help it. It's what makes people interesting.

I mention this because as I said earlier I've been on the march recently looking for awesome productivity increases, because I got to the point where I realized I've been working too much. Been there? More than once? Every day? Hmmm...

So I've been learning Dvorak for a while now. Love it. Love it. Love it. You should learn it, if you have time.

It clobbers you productivity initially, but it's worth it. I went "cold turkey", which seems to be the hip word for someone who stops typing in Qwerty totally; like a smoker who's just seen their best friend die from lung cancer.

Now I can no longer type Qwerty. Some people say they still can after switching to Dvorak. I can't. I don't care. I'm glad. It means space in my brain for something else.

But here's the irky part: I've been reading a few blogs recently and have seen some people claim that there are facts saying that Dvorak is not only no better, but worse. Worse!?! Hmmm...

Let me illustrate how absurd this is. 'E' is the most frequently typed letter in the English alphabet. No arguments there? Ok, so now on Qwerty 'E' is located directly above the left-hand tall finger, so pressing 'E' requires your second finger to extend a few millimetres vertically and down to push the key.

Now, in contrast, on Dvorak 'E' is still typed with the same finger, however now 'E' is on home row. So there is no vertical moment. You save a few millimetres every time you press the 'E' key. This may not sound like much but when you reach typing speeds in excess of 100 wpm it's a lot.

Still not convinced? Ok, well consider the word 'the'. Pretty common word. Now on Qwerty none of the three letters that form 'the' are on home row. None. Which means lots of little millimetre movements every time you need to type the word 'the'. According to my text editor I've typed 'the' 26 times already.

Now on Dvorak all three letters that form the word 'the' are on home row. Yep. All three. No little vertical or horizontal movements at all.

Still not convinced? Ok, here's a quicky - semicolon/colon. I type the letter 's' way more than I type either ':' or ';', (and I use Vi too). This may seem helpful for programming C-type languages, but not much outside that.

I get the impression that when people start trying to stick mud on Dvorak they haven't really thought it through. Their comment is a reaction sparked by emotion, not thinking. This in itself is fine. That's what blogs are about. Say you don't like Dvorak. Say it's ruined your blissful world where you didn't have to feel bad about using Qwerty. Say you're too lazy. That's fine too. What's not fine is mud-slinging. Of all the people that I've heard claim 'facts' that Dvorak is slower or worse that Qwerty I've seen none. None that stopped me from learning it in a rush anyway.

I understand that lots of people don't have time to learn Dvorak. That's a pickle. If you really want to the best I can suggest is book a holiday and take your laptop. Practice for half an hour to an hour a day, depending on what you can tolerate. It only took me a day to memorize the key positions, and about two weeks before I could build up any sort of speed. To get back to the speed you were will be different depending on how quickly you used to type. It took me about a month before I stopped considering myself as 'handicapped' at work.

Now for all of you who might try and turn my argument around on me accusing me of throwing mud at Qwerty, I have a get-out-of-jail-free card. I'm not hypocritical. Unlike the fact-less Dvorak-bashers I've proved in general (thanks to those little thought experiments) that Dvorak is faster. There's always the possibility that Dvorak will not be faster for the unusual user who might be using an English keyboard to type in another language or something, but that's not who I'm targeting.

My target audience for this article is really school teachers and the makers of Typing of the Dead. For the latter my message is simple:

Dear Typing of the Dead creators,
Please, please, please, put in support for us Dvorak typists in TotD 2. Please!

Thanks,
Joel

I know you may be thinking: 'If I can't play Typing of the Dead, then there's no way I'm switching to Dvorak.' Well it didn't stop me.

I want to target school teachers because that's really where I think Dvorak should start being introduced. Qwerty was great for mechanical typewriters but I've noticed somewhat recently that nobody seems to use those anymore.

Make kids aware of it early. Not when you've already been typing for 5 or more years. If there's any school teachers reading along please, make students aware of this layout and give them the option based on the merits of each method. If nothing else, do it for me, :).

And any parents out there, give your kids a head-start. Save them from RSI, carpel-tunnel syndrome and all those other nasties.

And that's it for me. My thanks to August and William for making this post possible.

The 5 Most Important Programming Skills

As offensive as it may seem to bundle up such a complex field as programming into 5 major characteristics I hope you can appreciate that this is certainly not an all encompassing list, and nor does it aim to be. To prep undergraduates for molding by their employers is what I aim to do.

I hope my blog goes at least some way in achieving this.

To save me from being incinerated by angry readers I claim that this list is by no means definite; it's just my opinion. Take it or leave. The most I can hope for is that it clarifies my thinking and where I'm at. If it gives you something to think about too, then bonus. Let me
know.

So, the top 5 characteristics a programmer should have. Ok. See, this has been changing for a while now as I've being doing my research, but I'm confident that now this list will provide a good framework for undergraduates and others to focus on.

Here we go.

1. Communication - Yep. This is number 1. Most important. This may have been an obvious one. But I mean like almost English-major-good at communication. If you can't get a job as a programmer then you should be able to get a job teaching university English. I believe good communication skills are more important than mathematics. I also believe that this may make people slightly uncomfortable. Certainly during my education all the emphasis was on mathematics, 'coz there's so much to know. And communication means that talking thing, right? Ah, it's not so bad, but I'm mainly referring to reading and writing skills.

If you're like me then you might feel that you need to brush up on these skills a bit. Well I have some handy pointers, just for you:

a) Blogging is an excellent way to practice your reading and writing skills. Read people's articles (including mine), and what you liked about it and perhaps what you could have done better (including mine).

b) An excellent book is 'Writing with Style: Conversations on the Art of Writing'. It's small so you should be able to read it over the course of a few days on your commute to work, or during your lunch break or whatever.

2. Touch Typing - Vital. I find it hard to respect programmers who can't type. See my article on touch typing for why.

3. Text Editor - You should have a favorite editor. Bottom line. I think this would make a good interview question.

Every programmer should be comfortable with a powerful text editor. I'll give you two options. Emacs or Vi. Both are excellent.

Anyway, using any other editor than your favorite should drive you crazy. It should feel like changing keyboard layouts. As so many people have said before me, it's probably the program I spend more time in than any other. And not just a little more time, it's a lot.

4. Compilers - I'm taking a bit of a stab with these last two, as I haven't actually learnt them myself. I have looked into them though. This is kinda of almost the all encompassing CS theory point. Knowing compilers I'm told requires strong knowledge in a range of CS fields. All your essential CS mathematics, regular expressions, parsing, code generation, artificial intelligence, data structures, ... So much good brain food here.

5. Operating Systems - The Compiler's CS brother in arms. This one should be obvious.

But hey, I'm just an undergraduate stuck in the alcoves of academia. What do I know? I'd love to hear your thoughts.