We Are Typists First, Programmers Second (2008)
blog.codinghorror.com
blog.codinghorror.com
(I did try learning Dorvak for RSI reasons a few years back, but I spent too much effort thinking about the typing that relatively easy coding became difficult. So maybe I proved his point to a degree).
"I sit with a pen and paper and draw diagrams, or write pesudocode until I have worked out what I am going to do. When I was far less experienced I liked typing a lot and enjoyed programming Java. Now I see that every extra line of code is an extra place that bugs could hide and I prefer more expressive languages and more functional / declarative styles of code"
ie: You have optimized typing, using something else!
----
I have tried VIM and Emacs a few times and after some few minutes with them I think "This is stupid. Relearn everything will slow me too much, terminal is too limited, and I'm fast enough with "normal" editors."
Being slow a typing on vim/emacs make me appreciate how "fast" I'm with native editors like sublime.
Also, I have a MS Ergo Keyboard and building a close clone with the minimal changes that I imagine will close the small things that bother me.
Similarly, by doodling (or whatever), I have not optimized typing but instead have stopped typing and optimized programming.
edit: made sentences make sense and stuff
Edit: Formatting
The slowdown results in a mindblowingly different working experience. There is so much time in between me designing the program in my head and the program being in my editor. It drastically reduces the degree of interactivity between me and the programming environment, where I can play around with different shapes for the program. Insubstantially small improvements are no longer insubstantially small; I resist making them. I resist writing mini-documentation like detailed commit messages and docstrings. Way less work gets done in a day. I frankly feel totally incompetent.
If there was any doubt in my mind that being good at keyboarding is a worthwhile skill for a programmer, it's certainly gone now.
This is one (two?) of the 12 points it The Joel Score, but I don't think anyone outside of stack overflow uses it. And no answer I've gotten in an interview setting has ever painted the entire picture.
Maybe you're not convinced that typing is a core programming discipline. I don't blame you, although I do reserve the right to wonder how you manage to program without using your keyboard.
Instead of answering directly, let me share one of my (many) personal foibles with you. At least four times a day, I walk into a room having no idea why I entered that room. I mean no idea whatsoever. It's as if I have somehow been teleported into that room by an alien civilization. Sadly, the truth is much less thrilling. Here's what happened: in the brief time it took for me to get up and move from point A to point B, I have totally forgetten whatever it was that motivated me to get up at all. Oh sure, I'll rack my brain for a bit, trying to remember what I needed to do in that room. Sometimes I remember, sometimes I don't. In the end, I usually end up making multiple trips back and forth, remembering something else I should have done while I was in that room after I've already left it.
It's all quite sad. Hopefully your brain has a more efficient task stack than mine. But I don't fault my brain – I fault my body. It can't keep up. If I had arrived faster, I wouldn't have had time to forget.
What I'm trying to say is this: speed matters. When you're a fast, efficient typist, you spend less time between thinking that thought and expressing it in code. Which means, if you're me at least, that you might actually get some of your ideas committed to screen before you completely lose your train of thought. Again.
I have no problem with people who decide that the learning curve of both is not for them. The thing I personally take issue with is when someone then tries to explain to me that those upsides are effectively nil, because "you're not really typing that much all day anyway". I call BS on that. If your code is non-trivial and you're trying to make it readable, you are going to iterate on it a couple of times. No amount of scribbling and diagrams is going to prevent that - even with the perfect data layout, the actual logic will need tweaking until it's suitable. So, the only argument you're then making from my perspective is that you actually don't care about readability, at which point there's a much bigger elephant in the room than your typing style.
> But all other things being equal – and they never are – the touch typist will have an advantage.
Will they? I type at over 100 WPM compared to the author's 80, and I never bothered with learning to use the home row, etc, nor did I dedicate any time to the practice of typing in and of itself.
> The best way to become a [better] typist is through typing, and lots of it.
This I can get behind, at least. And if you have kids, start them with it early on in life.
You should be able to type well enough that you don't break your concentration to hunt and peck. Other than that, you are optimizing the wrong thing.
Imagine you could type instantly. As soon as you thought of what you wanted to type, it was there. Moving a block of code or an expression into a REPL and evaluating it would be immediate. The first bit of boilerplate for a new project wouldn't get in the way of thinking about what you're actually working on. None of your time would be spent on the mechanics of transcribing.
Is it a minor optimization? Definitely, especially given the real limits on human tying speed, but anything that keeps you in the zone is going to add up over time. In my opinion, it's not that typing is a bottleneck, it's that breaking concentration for anything is one of several bottlenecks.
Edited to add: As I think about it, I may have failed to draw a clear distinction between "breaking concentration to type" and "breaking the flow", and in fact went back and forth on the wording I used to refer to each.
To summarize, I feel that breaking the flow can happen anytime you have to wait on something, be it physically typing a command or bit of code, waiting on compilation or evaluation, or glancing up at and thinking about a notification. Build times are largely out of your hands and people will always interrupt you (in person if you mute notifications), but physical typing delays are solely in your own hands and eliminating them can help keep you in the productive flow.
Every single time I've attempted to learn touch typing I get pain in my wrists before the first 10 minutes. Why would I do that to myself?
You also might just have an absolutely terrible keyboard. Some people pound on keys when they don't need to. There are a lot of reasons typing can cause finger, wrist, and forearm pain.
https://en.wikipedia.org/wiki/Typing#Hunt_and_peck
One study examining 30 subjects, of varying different styles and expertise, has found minimal difference in typing speed between touch typists and self-taught hybrid typists.[3] According to the study, "The number of fingers does not determine typing speed... People using self-taught typing strategies were found to be as fast as trained typists... instead of the number of fingers, there are other factors that predict typing speed... fast typists... keep their hands fixed on one position, instead of moving them over the keyboard, and more consistently use the same finger to type a certain letter." To quote doctoral candidate Anna Feit: "We were surprised to observe that people who took a typing course, performed at similar average speed and accuracy, as those that taught typing to themselves and only used 6 fingers on average"
I personally dislocated my wrist during the same time that I was supposed to learn touch-typing in school. Hence, I never got around to learning it. However, as someone who spent a lot of time in online discussions, I developed my own typing style that was just as efficient. I only use ~4 fingers, and they move all over the place. But my mind has also memorized the keyboard layout perfectly, and I can type all this without ever looking down at the keyboard. According to most online typing tests, I can achieve ~70 WPM this way, which puts me in the same category as a "professional typist". From my casual observation of others, I also seem to make much fewer typing errors as compared to other touch typists, and have never suffered from carpel tunnel or other symptoms, since my hands movements are a lot more dynamic.
Would it be great if I could type at 85 WPM instead of 70? Sure. But I honestly don't think my mind can even work at those speeds, so I'm not sure what benefits I would be getting out of this. Besides, I'd rather spend all that time doing something I enjoy and am passionate about, instead of training myself to crank up my typing speed further.
At this point I'm not sure what benefit I would get as I spend far less time typing now.
That being said, I almost want to learn just so I don't have to have this conversation anymore when this post inevitably pops up every couple of years.
If I could go back to my teenage self, I would not bother to learn typing and I would try to practice more ergonomic computing and use more ergonomic tools. Unfortunately, ergonomic keyboards and pointing devices are typically extremely expensive and not at all widespread. Maybe if they were, I could agree a little with Jeff here, but even then ... ruining one's health is definitely not worth it. Perhaps Jeff and others like him should stop judging others based on a skill that's completely irrelevant to being a good developer. I've worked with developers who didn't type at all (they could use voice as they spoke native English).
LOL
Sadly, they no longer teach typing, at least at my kids' school. I would have signed them up in a heartbeat.
§
I don't think speed is that important. You don't have to be really fast, just fast enough for it not to get in the way of your thinking.
Instead, I tend to spend as long as it takes mapping out a problem in my mind and just mulling it over. I find that for bigger problems exercise (jogging) and other activities like sleeping and showering to be healthy for this sort of thing. It's better if I'm not staring at a bunch of crap on the screen. I'll cycle between thought sessions and research until I've got an answer, but often the code I have written during that time is minimal (just enough to test an idea to see if some part of my model would work as I hoped).
At the end of all that, I'll just puke out what's already in my head, but it's hardly ever so much code that typing speed is all that relevant. Sure, maybe I save an hour here or there because I'm an excellent typist, but I caution that if you're typing your knuckles off because you don't want to lose a train of thought that you may be moving too quickly.
Obviously not everyone has the liberty to chill and seem unproductive until a moment of inspiration comes, but maybe that too is an indicator of a deeper problem ;)
The line about perl made me laugh out loud because I spent about 3 days this past week trying to figure out how to write what turned out to be one simple line of code and that's sometimes why it takes me so long.
I hunted and pecked when I first started, but I had taken a typing class in the 7th grade and remembered enough to put it to practice. I'm still kind of lazy though and will find myself copying and pasting and editing a line of code when it'd be faster to just type it :D
If you have no idea how to touch-type and need to start all over, then maybe it would be ok to start out with a new keyboard just for something fresh, but unless you are trying to prevent RSI, I would argue that Dvorak and other keyboard layouts are pretty useless.
It’s obviously the second, because the actual programming is obviously more important.