Hacker Newsnew | past | comments | ask | show | jobs | submitlogin
We Are Typists First, Programmers Second (codinghorror.com)
41 points by bdfh42 on Nov 18, 2008 | hide | past | favorite | 58 comments


My uncle crushed his spinal chord and lost the use of his legs and fingers. As a c6, he can move his arms in broad strokes, allowing him to type.

He has become a hacker in the best sense and done important work for many years now. His mind matters more than his fingers.


That's ridiculous. Good programmers work out how to type less using the power of their mind. If you can type exceedingly fast, where is the incentive to produce better more concise maintainable code? Learning to type fast before programming could be a big mistake IMHO.

Also, if you love programming, you practice... and the more you practice, the faster you get.

Typing is just the current method most people use to pass data from ourselves to computers. Programming will continue to exist once we have moved on from using keyboards.


If you can type exceedingly fast, where is the incentive to produce better more concise maintainable code?

You don't strive for concise code because it takes less time to type. You strive for it because it's easier to read.

The reason you have to be able to type quickly is that, while your final result may be concise, you may have to type parts of your code several times as you revise it down to that final form. Then you have to type the documentation, the emails to the rest of the team, the blog posts describing your work. Then the specs will change, or your ambition will grow, and you will type some more.

Programming will continue to exist once we have moved on from using keyboards.

I don't see why this would happen. Except for those who are unfortunate enough to sustain a typing injury, keyboards are better than the alternatives. Have you ever tried dictating Perl code to someone? As if reading /^foo+([bB]a+r)$/ wasn't hard enough -- trying to pronounce it is like torture. Are you capable of writing 82 WPM longhand? I certainly can't. Maybe if my notepad had autocompletion, but even then I'm dubious. Keyboards have autocompletion, too, and they have it right now.

Maybe someday we'll perfect the mindreading interface which rearranges text based on pure thought, but until then I suspect that keyboards will always be the first choice. Which is not to say that I'd turn down a notepad that could flawlessly read my writing. The problem with typing 82 WPM is that it's hard to do it all day. I'd be willing to switch back and forth to longhand just for the ability to write digital text while I'm taking a break from the keyboard.


"I don't see why this would happen."

You can't foresee any time in the future of the universe when we will stop using keyboards to transfer data from ourselves to machines?

Before the advent of the typewriter, I'm sure there was a similar argument for Authors - that they must learn to write quickly and neatly with pens. Good advice in the day, but an Author is still an Author, whether they use a pen or a typewriter.


"The future of the universe"? Who can predict that? Let's stick with "in the working lifetime of anybody reading this".

And "transfer data from ourselves to machines" is far too general as well. We're talking about programming, right? In the future -- in the present, really -- we're all going to use cameras and mics and touchpads and accelerometers and (god help us) mobile-phone keyboards for most of our human-computer interaction... but for writing software? Am I going to write software by doing an interpretive dance?

(Actually, that would be kind of fun. And it might be great to have a system that can, say, watch a human move some stuff around on a monitor and then mimic the moves N times using a robot. But we're not going to write Javascript interpreters with dancing. Some tasks require precise specification.)

So, yeah. I don't see it. I'm still a believer in precisely formatted plain text, and keyboarding is a great way to create that. Although I'm really looking forward to using the table-sized multi-touch handwriting-aware Minority Report megadisplay of the future, I'm not confident that writing code is one of the things I'll do with it. Can anybody from (e.g.) the Media Lab, or another place where they have such displays today, point me to a substantial piece of software that they've written using handwriting recognition, or voice recognition, or intelligent circles-and-arrows recognition? That might help me to transcend my blind spot. But it seems like, when they sit down to code, the smart folks all use emacs or vi.

Obviously, just because I don't see it coming doesn't mean it won't happen. You're right: Most of the folks born before the typewriter became practical didn't foresee the typewriter. They just got really good at using pens.


So what about an adapting morphing keyboard that presents options applicable to what you're doing?

For example, you could start up an editor, be writing javascript, and the keyboard would know what is and isn't valid, and give you the options...

Does anyone remember the ZX Spectrum keyboard? "For" was on the F key, "Next" was on the N key - made for pretty fast typing once you got used to it.

I agree, formatted text seems the best method for programming, and keyboards are the best we have at the moment, but I'd expect there to be some surprises in our lifetime. I don't expect to be writing code using a keyboard in 50 years time.


"For" was on the F key, "Next" was on the N key - made for pretty fast typing once you got used to it.

Okay, I've been trying to control my inner lecturer but now I'm just going to come out and say it: You need to learn emacs. The features you're describing have been built into my text editor for years, and they could be yours today!

(Cue the dancing girls and the fabulous music!)

The emacs term for a feature that turns a key sequence like "f <TAB>" into "for" is snippets. Check out this screencast demo of the YASnippets package:

http://www.youtube.com/watch?v=vOj7btx3ATg

I don't really use snippets myself (although the screencast might inspire me to try again). I find that autocompleting "for" is not very interesting, because I can type it really fast. What I do use all the time is hippie-expand:

http://badbyteblues.blogspot.com/2007/12/hippie-expand-and-a...

I have that bound to a special key of my own, so that I can continue to use TAB for other purposes like intelligent code indenting. With hippie-expand I rarely type the same symbol name twice. The first time it's "drupal_set_message", but after that it's just "dru" followed by one to five keypresses to scroll through the options.

The other thing I'm just bursting to say is: you need to learn to type. Touch typists do not care about key caps that change their labels. We don't look at the keys. I can't type 80 WPM while looking at the keys. I've met typists who type Dvorak on QWERTY keyboards, for whom looking at the keys would break their typing. My own keyboard has an "End" key that's actually Escape, an Escape key that's actually Caps Lock, a Page Down key that functions as Page Up if you hold down shift, Page Up and Home keys that are actually Option... (Hint: http://www.kinesis-ergo.com/advantage_pro.htm).


hehe even after advocating "macro"/"tab completion" etc type programming, personally I'm not sure I could do it. I remember doing it fine on the ZX Spectrum, but those were "learning to program" days. Now I want full power, and that means the computer listening to exactly what I type - If I type "f, tab" I want it to show "f, tab"... auto completion would completely get in my way and irritate the hell out of me.

I don't look at the keyboard either. I was meaning more that instead of a qwerty keyboard, the keyboard would change shape/configuration to show macros, which you could configure and remember when they appear etc - you would still not look at the keyboard, but it'd just make things a bit more obvious rather than have special emacs key sequences etc.


"Maybe someday we'll perfect the mindreading interface which rearranges text based on pure thought"

So, the post you reply to does foresee a future without keyboards.

What intermediate stage do you see between keyboards and mind reading? As pointed out, handwriting and speaking code have significant drawbacks over the keyboard.


Maybe some sort of OLED keyboard which predicts what you're going to write and presents the logical options for you in obvious places?

For example if you're writing java, there's only a small number of valid syntaxes you could start with, so the 'morphing keyboard' could just present those, then present the next options etc.

As you got more used to it, you'd know what it was going to 'morph' to, so would probably be able to go pretty fast.

I don't know what might work well though. I'm just saying the keyboard is not the ultimate input method, I'm sure we'll see a whole raft of changes before we get to mind reading.


It would need to be something you don't have to look at. One of the important features of touch typing is you can keep your eyes on the screen.


"As if reading /^foo+([bB]a+r)$/ wasn't hard enough -- trying to pronounce it is like torture."

That's interesting to think about: how would language optimization be different if we spoke instead of typed?


Interestingly, one of the developers on the Lua mailing list uses Lua in part because he is functionally blind, and the pronunciation of Lua code is unusually human-friendly. This makes both voice synthesis and dictation easier. There have actually been changes to several Lua projects to make the code itself more accessible to the blind, instead of just the end application.


Interesting point. I did some searching and pulled up a few references from mailing list archives, in case anybody else is equally curious:

* http://article.gmane.org/gmane.comp.lang.lua.general/47841

* http://groups.google.de/group/comp.lang.perl.misc/msg/5454cb...



The difference is the following.

As a fast typist using emacs, code simply flows from my brain to the compiler. I think it, things compile, I see the results. My conscious brain is 100% focused on my code, it's almost like a direct brain <-> computer connection.

Lately I've suffered from RSI. The pain is no biggie, but it forces me to consciously focus on typing. When this occurs, I lose the (almost) direct direct brain <-> computer connection. The fact that 15% of my brain is focused on typing without pain lowers my productivity significantly.


Dude, take the pain seriously -- if you don't, you might find that connection totally severed! And I'm speaking from personal experience. If you think you have it bad now, try dictating your code using voice recognition. You don't want to end up there, trust me, so doing whatever is necessary right now is a good investment in future productivity.


Maybe I'm doing something wrong. The bottleneck for me has never been typing speed (Even when using idiotically verbose java), and I'm probably an average speed typist.


It's not a matter of speed being a bottleneck, it's a matter of context switching. Switching context makes me lose focus.

Fast, unconscious typing: Code -> program results -> code -> program results -> woohoo, it works!

Thinking about typing: Code -> typing -> program results -> code -> typing -> "Mmm, pad thai, so yummy." -> "Where was I?" -> code -> program results -> code -> typing -> "I don't know her name, but I think I'm in love with record store girl." -> "where was I?" -> "She has the nicest smile when I buy music she likes."


Totally. An editor like emacs changes everything.


How did you get to that point? Are there programming-specific typing practice tools or exercises?


It's not ridiculous at all. You may spend very little time actually typing in code, but most developers spend a lot of time typing things like API documentation, design proposals, e-mails, IMs, etc. The slow typists tend to write inadequate documentation and not exchange enough written communications with their colleagues.

Keyboards will continue to be the primary means for entering code and English text for quite a few more years. So it's rather silly to put off learning touch typing now while waiting for practical speech recognition or some kind of BMI to show up.


"API documentation, design proposals, e-mails, IMs, etc"

None of those are programming. They are communication and admin. Which are completely different.


Which wouldn't be a problem if you had infinite hours to do everything. If you are spending two hours a day doing that stuff instead of one hour because you type slow, that's one less hour that you could be coding, or learning, or whatever.


Exactly. And they all have to get done in whatever limited time you have.


I disagree. Writing and coding are much the same. I interpret the replies to this as saying you should hurry through this stuff. Just shovel the crap out.

Well, if it's not worth writing with some care then it's not worth writing at all. If it's worth writing with care, then your typing speed is not going to be the relevant bottleneck, unless we're talking about a hunt and peck typist.

I take it as given that anything one writes, whether code or English, should be read and edited three times before moving on. 80 wpm vs 50 wpm ain't gonna matter if you're doing this.


> developers spend a lot of time typing things like API documentation, design proposals, e-mails, IMs, etc.

Here's what I've noticed about fast typists: They produce large volumes of hurried and poorly worded and edited crap. Yegge, my current boss, and one of my co-workers fit this mold. They type very fast, and I frequently have no idea what their writing is about, or am annoyed with the excess verbiage.

The best writing is re-writing. The best coding is refactoring. In both coding and writing the bottleneck is going through what you've written two or three times and making the necessary edits and stopping to think. First pass typing speed is absolutely not the bottleneck to producing anything of quality. If you want to churn out unreadable or unmaintainable crap, belting out functions at 90 wpm and then moving right on is a good way to go.


That's so very true. I can and do type quickly, but I usually find myself typing in small bursts of words and single lines of code (discrete thoughts), not bursts of sentences or methods. An involved one-paragraph email for me entails composition, proofreading, revision, proofreading, revision, and so on...typing doesn't take the majority of my time by any means. The same goes for the majority of my comments on websites such as this one.

It's not a matter of habit, I just always find ways to better express myself when I take my time and correct those "problem spots," be they in code, email, or other correspondence. It's not that I doubt my skill as a writer, but rather, I owe it to my reader to be thoughtful and patient, just as I hope they will upon receipt.

The only thing I need to prevent is overuse of "etc." It's a tempting habit and lazy, imprecise, etc. When one uses "etc," they leave it to the reader to complete their thought, which is weak and clumsy.


I don't agree with Jeff or Steve. Mainly because a lot of programming is about thinking, reading, googling, and copy / paste.

However, a couple weeks ago I did read Steve's original post on this and decided that since I wasn't a great typist I couldn't really argue that it is or isn't a hindrance for coding. So I began learning to touch type. Since Steve's post I've put in approximately 1 hour (sometimes more) a day using a course I paid for. My words per minute is up to about 50 (I used to be around 35 with my own invented way of typing), however I've still seen no speed increase while programming because of all the symbols and numbers, so I'm still at it.

I still don't think it'll have much of an impact on my quality of code or rate of production. Most of my time is still spent thinking, reading, googling ;)

IMHO, anyone saying that typing is the most important skill for a programmer is being silly. It likely is one more useful tool in your toolbox though. We'll see.


I forgot to add a small point of criticism. In order to prove his point near the end Jeff is comparing extremes instead of realities. Touch typing v.s. not using a keyboard at all... I think the reality comparison is 80 wpm v.s. 35 wpm.

Also, I could be wrong on this, but I doubt the 84 wpm he rated on a word test is the same rate he'd get writing code. The -=+/?\|&*()$#@! really slows me down drastically. My apologies if I'm wrong.


This sounds like a good problem to solve, create a typing program for programmers.


yeah, the thought occurred to me. Something similar to http://online.typingmaster.com but allows users to create and pakage custom courses. I.e. a programming course that starts with most of the same stuff but then gears towards a specific language (java, ruby, python, etc.). Then allows you to share these courses with others.


Not to gloat or show off or anything - but I can type at approx. 120wpm with good accuracy. It helps immensely with all aspects of my life - not just code. I can put ideas to paper (or screen, as it were) very, very quickly. This drives a lot of iterations and allows me to hone and fine-tune my work even further.

I'm also able to write up large amounts of text - blog posts, forum posts, etc etc, and all have over the years helped me become a better communicator. I enjoy discussing things with people and writing about my work, and I can't imagine doing the volume that I do as a slower typist at, say, 30wpm.

Like others here have mentioned, being a fast and accurate typist is like having a direct mind connection to the computer - your words come out almost as quickly as you can think of them.


I hear you. My goal is to get up to 80+ wpm and I'll be throwing cycles at this goal everyday until then, so maybe then I'll be a convert.

I guess I just think the importance to programming is a little exaggerated is all. No doubt it is a great benefit all around, but I'll reserve final judgment about it's impact on my coding until I can experience the difference myself, and then report back to this thread.


For code I agree it's not so much help - after all the amount of mental work it takes to even think of all that code far outweighs the speed at which you can type it.

That being said, I do feel like it's improved my code in other ways - it's allowed me to discuss in a more in-depth way, with more detail, without a real time cost, my code with other people. I can write large blog posts and get feedback from very smart people about what I'm doing right and wrong, etc.

I've tried typing on the iPhone, and my speed is so slow that I find myself compromising the message I'm trying to get across just so I'd be done with typing.


What typing?

I use Visual Studio - you just hit a letter and then the <TAB> key and Intellisense writes the code. The programs don't always do what was intended but hey you can't have everything.


I only type 65 WPM and use long variable names, yet I usually don't bother using autocompletion.

I feel thinking about possible word clashes and the resulting background process of continually estimating the optimal prefix so that I type enough letters to get the correct completion yet not too much to waste effort is slower and more distracting than just typing it out.

As I see it, autocompletion is just an aid for when you don't remember the exact name of something.


I like Steve Yegge and Jeff Atwood a lot, and I respect them as experienced programmers who probably know a lot more than I do. But, frankly, articles like this discredit their expertise in my eyes.

You would either have to be an extremely poor typist or an extremely prolific programmer for your productivity to be constrained by your typing.


It's important to note that being a competent typist and being a competent programming typist are different things. On the test that Jeff linked to in his post, I scored 101 WPM. Throw in enough symbols and numbers and other non-standard stuff and I am forced to look at the keyboard occasionally which lowers that number significantly.

As someone coming back to Vim after years away, this is complicated by the need to memorize and be able to instantly recall a font of often complicated commands. I am so inefficient currently that if a task simply requires some copy/paste operations or I need to work with a very long file I will usually just fire it up in TextMate and use the dreaded mouse to speed things along.

I don't believe conventional typing courses are sufficient for gaining the sort of seamless connection talked about here because the focus is on proficiency in typing common characters / words. I much prefer the "Words & Numbers" test on that site (http://typeonline.co.uk/typingspeed_alpha_numeric.php) because it forces the practice of shifting between common characters and less common ones. There's another test I can't recall the link to that basically just makes you type never-ending series of single numbers and symbols along the top row.

Learning conventional typing is pretty easy. Becoming a highly skilled programming typist is a task that requires much more practice.


Hrm. I think great and just decent programmers are probably well within an order of magnitude of one another when typing, but not in terms of productivity. Yeah, if you don't know how to type, learn, but come on, is the sort of thing one has to resort to to get traffic?:-/


Dear painters: If you want to succeed, please use the largest brush available.


I've always wanted to learn to type with just my left hand. The Half-Keyboard idea goes quite a way to that end; http://gnufoo.org/ucontrol/ used to implement it on earlier Mac OS X versions, but they were threatened with a patent suit and so removed it.

Can anyone here type with one hand and recommend how to go about it?


Few months ago we were writers, now we're typists. What's next?


From Jeff and Steve:

The One Thing Every Software Engineer Should Know http://www.codinghorror.com/blog/archives/001177.html

Every week some thing is more important than the old thing from previous week. Next, we'll hear about stuff like "food", and "friends" and "love".

This necessity to shock is a gimmick. It does work for sensationalized news for example, where from time to time a certain crime gets more coverage and importance than others, even if the same type of crime is happening simultaneously.

Typing is cool, ok, and so is marketing. But the germinating view is simplistic: All things being equal, an awesome engineer who types faster is better than an awesome engineer. But things are never equal.

"Learn Typing" plays with a primal human necessity, apealing to the easier denominator. It makes people feel good to tell them that they can be better professionals in two weeks.

"Learn Marketing" plays with our frustations. So many people have lived this situation: The product was perfect, but maybe if I had just told about it differently, if I had just made my boss understand, if I just knew a way to convince others how much awesome I am, etc.

And let's not forget about yesterday's article about Honda, thriving in dificult times, but run by engineers. The truth is that we (human beings, not specifically the HN crowd) like to hear about what we like. I see so many indications of the little club that exists in here (reddit is even worse nowadays), but that's not the point, because this is normal. The point is that all this shit doesn't matter, but we like to pretend that it does because we get to be happy for five minutes.

Managers have this disease too, with their self-help books and curiosity to know who moved their cheese. These things are like happiness injections, making us feel good until the next shine stuff appear.

BTW, I do believe typing and marketing is important, but in no way they're even near the top qualities I am looking for in a programmer.


Great post.


The article should be called "We Are Bloggers First, Programmers Second."


On a barely related note, this article reminded me of how much I enjoyed Typing of the Dead. Unfortunately, the only legitimate place I've been able to find it is on GameTap, which requires a subscription fee. Does anyone know of similar games? It seems there is a market opportunity for genuinely entertaining typing games for a post-elementary-school audience.


Wow I never knew the proper definition for WPM - when I was young I started learning to type in VI and I practiced speed which as I recall was around 60 words / min, but trying out my typing speed on that webpage I find my speed under proper WPM definition I'm doing 110 WPM awesome :))

Typing fast and efficiently has many benefits - you save energy, you do things faster. Although in the case of programming typing speed is only one factor which determine how well you program. One could argue that learning more powerful languages or the ability to problem solve are equally if not more important.


As a rebuttal, I present this scientific graph: http://i37.tinypic.com/33e086s.png


Or...don't write bloated code. Same result. There's a point in life where you just need to understand your weaknesses but not obsess over them, and focus on your strengths instead.


As a hacker friend put it: "Programmers are paid to think, and occasionally type". Not the other way 'round.


Typing is almost never the rate-limiting step when programming.


If I had to, I could use a mouse with my foot on an onscreen keyboard. It would require a bit more patience and time, but it would in no way hinder my ability to create software.


Requiring more patience and time fits the definition of hinder.


Y'know, that gives me an idea. Why not a foot-controlled mouse? That way I'd never have to take my hands off the keyboard.

(quick googling)

Oh, they already exist. Has anyone ever used one? They're three hundred bucks, so I'm not gonna buy one just to try it out and see if I like it.


A SmartNav head mouse can be had for less. I've bought two for my girlfriend who has RSI. Yes, they work quite well, but you'll need practice, and a way to hit a mouse button without using your feet. (Hard to move your feet without using your head.) There are programs that will emulate a mouse button for you.


A coworker of mine uses one and loves it.


I don't even know where to begin with this. Typing is a way to program, but not the only way. One can get on ebay or the like and find these old engineering sheets of paper where people at IBM would hand write FORTRAN code, then take the paper over to the department that would make punch cards out of the programming sheets. No typing involved. It is like saying to fly you need to know how to handle jet engines, rather than the principles of lift, keeping the nose level, etc. Whether the plane uses a jet engine or not is incidental to good piloting skills. Similarly, whether one uses a keyboard to create a program or the IBM engineering sheets to handwrite out a program is incidental to good programming skills. Typing hasn't a thing to do with programming.




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

Search: