Ask HN: Does touch typing make you a better programmer?

6 points by wilsonfiifi ↗ HN
Hi folks! I've been trying to learn how to properly touch type and move away from my 'own system'. However I have been wondering if typing slowly actually helps organize your thoughts better when coding?

18 comments

[ 3.8 ms ] story [ 58.6 ms ] thread
I think this is all relative to the person. My friend can touch type but he struggles to work out the logic needed in programming at the speed he can type so he works it all out first and then just types it out. etc... so I think it really does depend. I cant see it hurting your skillset to be able to touch type though :)
In general, I've found typing slowly to be more a distraction than a moment to focus. The difficulties are always in the logic you're trying to express, and the typing is merely a way to communicate that to the computer. If you type slowly, it might give you more time to think about what you're doing, but you can make that time yourself.

On a more personal note, 90% of the lines I type are not ones I need time to think deeply about, so the faster I can pump those out, the better. It's why I've shifted from visual typing to touch typing, and why I optimize for ever faster keyboards once they start feeling too slow for me.

You are talking about a couple of different things.

Touch typing means your fingers are trained to know where the keys are. You can type without having to look at the keyboard.

Touch typing doesn't necessarily have to be fast typing. You can touch type slow or fast.

Bottom line, anything which removes barriers to doing your job is better. the less you have to think about it, the better. Hitting the wrong keys is a bit of a distraction and having to look at the keyboard could be a small break in concentration. This is especially the case when it gets to the point of being annoying.

Sometimes people prefer writing with pen and paper because the physicality of it, the slower pace of writing and not being able to delete your mistakes makes you think a bit more about what you are about to write and what you have already written.

It would be interesting to write out a program with pen and paper and have that immediately be translated into digital. Maybe an E-ink editor. ;)

write out a program with pen and paper

I competed in the BCS programming competition years ago, when the rules allowed one computer for a team of four. We found the optimal division of labour was one person developing at the keyboard, one person pair programming with them, and two "researchers" working on the next problems. If the person at the keyboard got "stuck", they were to print the program off and let someone else start typing. It was basically a superscalar pipeline of humans with a single "issue unit": the keyboard.

Organising your thoughts at the point when you're typing them seems sub-optimal!

Some people build time into their working day for "reflection" and "supervision". They think back over how stuff went this day, week, month; and they get advice from a colleague about how they're doing - especially around how they could have tackled the tricky bits.

So maybe slower typing would allow programmers some reflection time.

But from what I've read programmers dislike interruptions to their typing rhythm - mouse based editing instead of keyboard shortcuts or programming languages that involve having to hold shift to get a character (too many braces?).

I think touch typing gives you the advantage of having less to focus on - some people can type at 120 wpm and hold a conversation.

Most coding is very very different from the touch typing I'm using to write this comment. Coding is dominated by editing. Debugging, refactoring, adding features to an existing part of the code. I suspect that if you did a frequency histogram of keys hit then the arrow keys would dominate.

IDEs can help in ways that aren't available to people touchtyping natural language. For example, Eclipse can pile up matching brackets to the right of the cursor as you add opening brackets. Many IDEs can autocomplete identifiers and keywords.

My highest ever "productivity" was around 500 LOC in a day, whereas some of my most useful work was entirely away from the keyboard. I know someone who prides himself on having removed thousands of lines of code from an open source project (something similar is going on in the OpenSSL audit).

If you're a fast typist, you'll probably fall into a pattern of alternating thought and action. It's worth quite a lot of time thinking rather than acting, to prevent committing a bad piece of code that will plague you forever.

According to Steve Yegge, yes, absolutely. See http://steve-yegge.blogspot.com/2008/09/programmings-dirties... . The major points:

- "If you spend more time hammering out code, then in order to keep up, you need to spend less time doing something else."

- non-touch typists have less impact on text-based forums (like this one)

- "non-typist code is... minimalist. They don't go the extra mile to comment things"

Whoops, looks like our posts crossed on the wire. I definitely think Steve's post is worth the read - it hits home.
One of the best arguments I've seen on this matter is by Steve Yegge. It's a must read: http://steve-yegge.blogspot.com/2008/09/programmings-dirties...

I spent 10 years in industry before I decided to learn to touch type. I noticed how fast some of my colleagues could chat and code and I was embarrassed. Then I read Steve's article. It was tough at first but I can't tell you how much it's helped my productivity.

Also, remap CapsLock to Ctrl on your keyboard. It makes coding a dream. And if you use Vim or a Vim-mode in your IDE, remap the sequence 'jk' to Esc. I never leave the home row anymore. See http://learnvimscriptthehardway.stevelosh.com/chapters/10.ht...

Bowing my head in shame! Stevey doesn't mince his words does he? Lol
> And if you use Vim or a Vim-mode in your IDE, remap the sequence 'jk' to Esc. I never leave the home row anymore

Wow, thanks so much for this

I think of software development on a continuum from tactical to strategic. The tactical end of the scale involves faster creation and modification of artifacts. Strategic involves knowing what artifacts to create and why.

To be an outstanding developer, you should be skilled all along the continuum. Those who are slow tactically will only every be able to read books about strategic designs etc, which is good but will limit their skills. I'm reminded of a developer I once knew who thought he had all the answers architecturally, but was such a slow typer and didn't know how to use tools available to modify code that he'd never actually implemented any if the things he dreamed of, and who is going to trust someone with no experience? Also his ideas definitely had a "here's a big picture design, you guys figure out how to implement it" view to them, which meant they usually were not really a good idea.

As such, I think it is important to learn; fast typing (touch typing), fast editing (Vim, regex scripts, and all available refactoring tools), fast local coding (TDD, proper use of functions as an abstraction, and good naming), good module sizing (either namespaces or objects), then good module separation through services or message passing. I had to learn all of these in the last six years. I think every one was valuable. I had to learn to touch type after 22 years not being able to, but it has helped immensely in being able to fluidly get thoughts to editor.

Yes it does. If you touch type, there is less effort involved in refactoring code. Because typing is not a chore you have to spend energy on. You just have to think out how you want the code to look and your fingers does the transformation automagically. If you can't touch type, you have to both spend energy thinking about the code and about what keys you should hit to get there.
I think it does and it's something I work on. I don't think speed is as important as touch typing with less errors. having to backspace every couple of lines because you hit ' instead of ; really messes up flow.

I started practicing typing because I tend to type with 2 or 3 fingers per hand and was experiencing RSI symptoms. My hands feel a lot better when I type properly.

There is a great article about this on Coding Horror: http://blog.codinghorror.com/we-are-typists-first-programmer...

I've enjoyed typing.io for learning as well as typing of the dead.

You should be able to type pretty quickly as a coder, but a big part depends on your language of choice and refactoring you do.

Can you type "The quick brown fox jumps over the lazy dog?" with your eyes closed? If so, you're probably in good shape.*

*Does not apply on touch screens. Ain't nobody got time for that!

(comment deleted)