Hacker Newsnew | past | comments | ask | show | jobs | submitlogin
We Are Typists First, Programmers Second (2008) (codinghorror.com)
33 points by RyanShook on April 11, 2018 | hide | past | favorite | 54 comments


I find this argument bullshit. After 15 years, the best code I write is the stuff I think about the most and spend the least time typing. If I have anything vaguely complex and algorithmic, 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. I like writing SQL, despite being a crappy language in terms of syntax - I prefer the way I have to think about the problem.

(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).


The argument made here isn't to type out more lines of code but to match the speed of your typing to your mental model such that the slow typing does not get in the way


That's why I use a pen and paper. A diagram is far faster and more expressive than most code.


Or a pen-capable tablet or 2-in-1.


I agree, and I have always found "programming" to be about 10% actually pressing keys on a keyboard and about 90% thinking about what I'm going to press long before I'm even near a keyboard.


I don't remember where I read this idea (because now I'm also in the "build your own keyboard" thing and read a lot about this), but the main take is that when you have fluency in mundane task you focus better in the more intensive ones. in fact you already say this:

"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.


By driving a car, I have not optimized walking but instead have stopped walking and optimized transportation.

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


I find the argument convincing with the addition of a little tweak: it's not about how fast you type, but your facility with the editing. I use Emacs, and plugins like ace-jump (which I think is a copy of a Vim plugin) and paredit reduce friction between thought and code, not because I'm hammering out a certain number of words per minute, but because these tools abstract the manipulation of text away from twiddling characters on the screen, and towards "manipulating" text as a proxy for ideas.

Edit: Formatting


I got an interesting perspective on this in the past week. I type at 110 WPM on a normal QWERTY keyboard, and I use keystrokes to drive my editor and window manager (but not my browser.) I just switched to an ErgoDox configured as mostly QWERTY but ortholinear, split, and with some of the modifier keys and symbols moved around. The first day I was at 16 WPM, now I'm at about 35. (Probably a little slower in syntax-heavy parts.)

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.


Every time I work at a place with a heavy, slow (or nonrepeatable) build process I feel this over again. Like I have a giant albatross around my neck.

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.


I've had one since last July (using it to type this, actually) and I think it gets better with time. I'm now up to a respectable ~70wpm, which is nowhere close to where I used to be with a "standard" QWERTY, but it's still Good Enough.


I've always insisted on using standard un-ergonomic keyboards all my life, so I can always be an effective typist no matter what computer I'm using.


I feel the same, but I'm hoping that my heavy laptop use plus a lifetime-so-far of training will allow me to maintain my typing skills on a standard form factor even if I learn something slightly esoteric for my desk.


Using an ergonomic keyboard doesn't make you worse at using a normal keyboard.


On the flip side, I found it so frustrating learning colemak on the ErgoDox that I ended up learning a lot of new keybinds for things to save extra typing!


I spend a lot more time thinking than I do typing. The amount of typing is especially reduced when debugging rather than writing new code. In fact, quite a lot of my code starts on paper. When I'm ready to type the code out, it's already "written", I just have to transcribe it.


It's like he's speaking right to you!

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.


Kind of off topic, but it's not the speed it takes to move between rooms that is the issue, it's the fact they are different rooms. It appears the brain ties thoughts to context and when the context changes we have a weaker tie to the thought: https://www.scientificamerican.com/article/why-walking-throu...


I think realistically the "transcribing" portion takes the bulk of the time. It's not just typing out the code, but the realizations of all the gaps in your mental model and false assumptions always seem to come during this stage.


That's what the pen and paper are for. By the time I get to the "transcribing" portion of the work, I usually know how things are going to go together.


To me, being a programmer without being a touch typist is like being a bicycle messenger without knowing how to ride a bike. So, you push the bike as you run along beside it. Sure, you'll get to your destination, but slower, and you'll look ridiculous. I once knew a programmer who couldn't touch type, and he really needed all the brainpower at his disposal to do his job, but he wasted 10 percent of it looking back and forth between the keyboard and screen hunting and pecking. Trying to help him out was an exercise in patience. Jesus, learn to touch type, you can rail against it all you like but if you sit down and spend the two or three weeks to do it, you'll be thanking yourself for the rest of your career for having done it. Refusing to do it just plain stupid.


I whole-heartedly agree with you. In fact, I have the impression that there's a rather interesting variation of the Dunning-Kruger effect in play on this issue. Usually, mentioning DK implies a derogatory connotation (akin "dumb people don't notice that they're dumb"), but in this case, many actually very bright people can't imagine the upsides of touch typing because they never experienced them themselves. There also seems to be a similar discussion whenever Vim and Emacs bindings come up. Yes, you don't technically need them, but they sure help you manipulating code at a pace where you're not constantly loosing your train of thought because of some small change you're throwing in.

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.


> It's very difficult for me to take another programmer seriously when I see them using the hunt and peck typing techniques. Like Steve, I've seen this far too often.

> 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.


Do you look at the keyboard or are you just a self-taught touch typist?


Has how fast you could actually type code been the bottleneck on your development velocity? Have you ever thought (other than for school assignments), "If I could only type faster, this project would have been done faster"?

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.


Agreed, breaking your concentration to type is bad and rather easily mitigated. However, the time required to break the flow of whatever you happen to be doing is very small.

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.


Counterargument: I've been coding for around 10 years, and I've never ever had anything remotely close to RSIs or tendinitis. I don't type extremely fast, but it doesn't affect my productivity either.

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?


Without knowing anything else, it would be unlikely to find out that you have poor touch-typing posture (e.g., you break the wrist upwards/type with the wrist in extension), or that you have very weak forearms and wrists, and possibly slouch a lot in the shoulders. Not touch typing likely reduces the impact of these liabilities, assuming you have them, by putting breaks into the mechanical demands of typing.

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.


Query keyboards were designed for old typewriters, so that the most common combinations of letters were not beside each other to minimize jamming. Dvorak and Colemak were designed to be the opposite, so if you are keen to touch type then it might be worth looking into. I tried it for RSI, but my speed just wasn't the same as my usual style.


I used to think too it does not matter. I was typing reasonably fast. After putting in the effort and learning to properly touch-type I cannot recommend it enough. It feels very close to controlling the computer with your mind. IMHO this is not about typing speed it is about focus and unity with your tools.


After realizing how much mental energy I'm using looking down at the keyboard I've set the goal of becoming proficient in touch typing. Currently, https://www.ratatype.com/ has been very helpful.


It's ironic that he condescends towards hunt-and-peck typing, while simultaneously, the wiki he links to makes it clear that hunt-and-peck typists are just as proficient as touch-typists.

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.


Im in a similar boat. I am not a touch typist and I can do around ~70-80 WPM, its never been a problem for me (been coding professionally for like 13 years and been coding as a hobbiest since I was 10 years old).

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.


I couldn't disagree more. I used to touch type very fast like this article suggests. Now I have RSI and I'm constantly looking for techniques to type slower. I haven't quite resorted to pecking with two fingers yet, but that is indeed on the list of options and where I'm headed if I can't find another solution. Typing hurts and it has ruined my health. All to get some code typed in just a fraction of a second faster. Now I think more before doing any type of action on the computer (typing is not the only culprit as you can imagine). I've tried using voice but because of my accent, it's not accurate enough.

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).


> Don't just type random gibberish as fast as you can on the screen, unless you're a Perl programmer.

LOL


That got me lol too


I learnt to touch type in the mid-80s on a manual typewriter in secondary school. I knew I was going to work with computers and figured touch typing would be a worthwhile skill. I was the only boy in the class and copped shit from my peers for taking the subject. To this day I still think it is the best thing I learnt at school.

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.


I think this line of thought has basic merit but can be dangerous. Often for me, if I'm programming fast enough that I have to struggle to keep it all "in my head", it simply means I haven't internalized the problem enough to really "own" it. That leads to bugs and sloppy code.

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 ;)


I've never experienced this with typing, but I can definitely see how the amount of time it takes to complete a task can cause even more delay. For example, long page refresh times in development can take so long that I switch thoughts entirely and end up on hacker news. Using docker-sync with docker for mac made my page refreshes much faster and has had a very positive impact on my focus and productivity.


While I agree, I wonder how relevant this still is today. I could see the value in stressing this point back when computers weren't an integral part of daily life and a programmer might only ever use a keyboard when doing actual programming. But for most of us who grew up with PCs in our homes, using them daily for gaming, instant messaging, web surfing, etc... It makes me wonder how anyone could not naturally develop some level of decent typing speed on their own after 10+ years. Personally I can't say I've ever witnessed another software dev actually "hunt and peck" at a keyboard on the job. I suppose there's always room for improvement though and my own typing certainly isn't 100% perfect. I guess I just don't see typing as being a major hurdle for the newest generation of programmers.


I think it's possible that keyboard usage is decreasing at this point. My nephew's elementary school stopped offering typing classes, however I'm amazed by how quickly he can type on a touchscreen!


Just a nitpick: Computers were already an integral part of daily life in 2008, and I'd argue as far back as the 80s or even 70s. It's just that the public didn't realize it.


This is precisely as dumb as saying that efficient use of a chalkboard is important to being a great physicist.


And before being either of those, we are premature optimizers.


Check out https://type-fu.com for a programmer-oriented typing tutor. It has a built-in keyboard layout editor with presets for Colemak and Dvorak (and many others). You can also paste your own code snippets for practice.


Yep, I agree, we are all typist, and this is a fun read.

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


Something I really disagree with is suggesting to use Dvorak or Colemak keyboard for typing speed improvements. From my experience with Dvorak, and what I think most research shows, changing doesn't make you any faster.

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.


I’m sure that being good at typing is helpful. But “first”? No way. Just ask yourself who you’d rather work with: an awesome typist who can’t program for shit, or a 5 WPM hunt-and-peck typist who slowly produces reliable, fast, and well designed code?

It’s obviously the second, because the actual programming is obviously more important.


I'd like to add 'Epistory' to the list of programs for practicing typing at the end. I picked it up in a Humble Bundle and was surprised by how much fun it was. Pretty, too.


I think if your typing speed is really getting in the way of your development, you would know it, rather than need to read a blog post to find that out.


yes but people pick up typing skills "on the way". I suppose you could refine those skills, but then it is like anything in like. Diminishing returns. So this is actually counter efficient.


I use voice input


This mentality is what led to the sorry state of this profession.


hot take alert




Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: