The "Even Dirtier Secret", HN edition: devs who can't type, don't read books, can't understand LtU or git or BDD, get all their info from Stackoverflow. Oh, yeah, they're not in the top 99.999999%, so now way Joel will hire them.
"You'd be absolutely astonishedly flabbergasted at how many programmers don't know how to READ. I'm dead serious. You can learn to speed read even faster than you can learn to type, and yet there are tons of programmers out there who are unable to even skim this blog. They try, but unlike speed readers, these folks don't actually pick up the content."
It's nicely done!
I'm not sure that I like the fact that the text doesn't mean anything... I guess it's in purpose so that you have to look at the words and not type mechanically for words you know but at the same time, I spend a lot more time figuring out what is going on...
The words are throwing me off. Not because I can't type them fast enough, but because I can't read them as fast as I type so I need to slow down and pay attention to the letters.
I second (or third now!) that I don't like the meaningless words. Makes it much harder to type them I reckon, and some of the words seem to be real words, but with missing letters, so you find yourself typing the real word, which is wrong!!
I started hunt and peck typing at 5 (Apple //c represent!), and had evolved to a four finger lazy-look typing method by 7th grade typing class. I didn't start actually typing without looking at the keyboard until I purchased a factory defect keyboard from a computer fair when I was in 9th grade. This keyboard had no lettering ink on any of the keys. I remember my mom being in disbelief that I could look at her and type something else quickly at the same time.
Best $10 I ever spent.
Because I learned to type this way I have rather unconventional / poor form. My hands rarely center properly on the home row, I tend to use my middle fingers for the upper inside letters, and I don't always use the same fingers for the same keys (I type the first "e" in "letters" with my middle finger and the second with the proper finger).
One other positive side effect of that keyboard while I was exploring UNIX was that there was no value in looking at punctuation either, so I learned to touch type all punctuation, not just the secretary subset, at the same time.
> Hell, if you're having trouble, just email me, and I'll give you a personalized pep talk. I can afford it. I type pretty fast. Plus your email will be really short.
I'm tempted to email him just to find out what Steve Yegge's idea of a "really short" email is.
It may depend on your style. I know some programmers who can just construct a complete function in their head during thinking. For them, typing is just a mechanical step to dump the code into a computer. You know, those who claim they can code with cat >foo.c. If you're one of them, probably typing speed doesn't matter much, since it is not the major part of development.
I'm more like an oil-painter. I have to put something on canvas to think. Always typing small expressions into REPL to see where they take me. Writing down a function from top of my head and see if it looks right---I mean, not only logically, but also whether it feels natural and straightforward on screen. Emacs is an extension of my brain. If I have to type slowly, it really gets in my way. If some bad setting on driver or some slow connection to a remote machine puts a delay in the response of keypress, it drives me crazy. I couldn't stand if my own fingers are the cause of the delay.
(BTW, the original article claims "Slow-typist => Bad-programmer". Saying some fast-typist write bad code has nothing to do with the claim. You have to show a good programmer who types slow to refute it.)
> I know some programmers who can just construct a complete function in their head during thinking.
This is interesting. What level of detail do they go into? Most people should be able to do this at a simple level. The fastest example is probably a wrapper function: you probably know 100% what you intend to type before hitting the first key.
If you are making a bigger function that has intermediate variables, naming the variables properly becomes an exercise in itself. When these programmers do a "code dump" from their brains to the keyboard, are all the variables named already? Do they use placeholder names then replace them? Do they first write the algorithmic parts then do the naming?
I agree with you. If your bottleneck in development is typing speed you're doing something terribly wrong.
If it's a "lines of code" contest, then sure, learn to type fast, but if it's about producing good concise code I don't think typing speed makes much difference. If you want to program enough, you'll naturally become fast enough.
> If it's a "lines of code" contest, then sure, learn to type fast, but if it's about producing good concise code I don't think typing speed makes much difference.
In my experience, good, concise code is rarely written on the first pass. Also (and unfortunately), more often than not people who don't type well are unwilling to spend time on rewrites...
Not looking at the keyboard as you type is important for secretaries who have to copy text off a hard copy. For a programmer I'd say it makes little difference.
But hey, don't let that get in the way of smug superiority.
I switched from typing qwerty while looking at the keyboard (but definitely not hunt-and-peck; I knew where the keys were, I just needed a trigger) to touch-typing Dvorak. My typing speed went from 70 WPM to about 75-80. That's not all that much of a difference, and much of it may be attributable to Dvorak.
I really don't think it makes that much of a difference, as long as you're not hunt-and-peck.
Incidentally, my speed now is about 55 WPM because the T and M keys on my lapop are broken and often don't regiser. You can lose more with bad hardware than you gain wih good training.
Can you convince me that the quality of a programmer has anything to do with speed?
(At least, to the degree that keyboarding skills would make a measurable difference. I'm not arguing that it's ok to spend all week building a single function.)
Personal request: next time Steve posts, let's just assume the "long post is long lololol" angle has been thoroughly covered, and let's discuss the contents. If the contents do not merit discussion, let's ignore them.
I learned something from this article; I can't touch-type numbers. After reading that part, I moved over to a friendly unused xterm and tried to type 65536. My head immediately began to bend down to gape at the keys. I tried not to look, but I couldn't do it.
Interestingly, I can type the symbols on the numbers just fine. (hello "world"). $here @are &some #sigils!
I'm always a little surprised to find a programmer who can't type while looking at the screen. I never actually sat down and learned to touch type, it was a by-product of coding.
But this isn't just about programmers, you can see it in the movements of any expert.
Systems administrators know how to move around directories with minimal keystrokes - the characters seem to just fly by the screen. I know I'm in the presence of a good one when this happens.
A former colleague of mine proved that he'd spent many years in the trenches as a consultant through his mind-blowing ability to do excel. Any shortcut, he knew. He could set up a pivot table, create a LUT, denormalize data, simulate a query, set up scrolling, and automate charts in, like, 4 minutes. I could do this, but I'd have to hunt around the help, and it would take me a long time.
Good tennis racket stringers chat with you while they instinctively weave the crosses through the mains with a slight waving pattern that reduces friction and extends the life of the string job. They use the clamps and tensioner without really looking at it. I have my own machine and I can string a racket fine, but it takes me an hour and requires my full, fumbling focus - I certainly can't multi-task.
When a Judo expert falls backwards he/she just sort of rolls through it. No thought is necessary.
It goes on and on. Programmers type fast without thinking about it. It's one of the things they are simply able to do as the result of programming. I'm not saying it's critical, but it would be really odd to get good at programming without making this skill inate.
Hmmm. I want to hear from some great programmers who are often here on HN. Do you guys type quickly? Paul Graham and Patrick Collison, are you speed typists? How about Ryan Davis and Jey Kottalam? Suggest some more great hackers, too.
I can't speak for them, but I've been able to type at ~80WPM for 20 years, since about age 10. I took Pascal and C in college 12 years ago, but to this day I'm a borderline useless scripter.when tasks call for a bit of Perl, Ruby, automated bash, or whatever.
Not being able to touch type is not a bad thing; not being able to type fast is. I can't touch type and I used to be able to type 130+ wpm without errors. I can still average around 100 wpm.
I was actually thinking of "touch typing" as being the standard method that is taught in schools and typing classes - put your fingers on the home row to begin and use all eight fingers to type.
I type by mainly using two fingers, with occasional pinkie and middle finger use. I also use my thumbs for the spacebar sometimes.
If you define "touch typing" as not having to look at the keyboard, then I guess I do touch type and I apologize to the author. I was mostly taking offense to the idea that there is only one correct way to type.
I don't do the home row touch-typing stuff, either. Nothing formally taught, all organically grown typing from using computers since I was a teenager. I'm typically in the range of 80-100 wpm depending on the test.
Primarily only using the index fingers, thumbs for shift keys, spaces and sometimes the other fingers will hit keys in the farthest reaches, depending on what the index fingers are doing.
It's kinda neat-- I discovered I type different words differently. For example, if I type "provide" my left hand index finger hits the "v", but in "forever", my right hand index finger does. Not a beat skipped-- they just do it.
I think typing with fewer fingers does put a maximum on my typing speed, but I'm perfectly comfortable with ~100 wpm.
The issue is probably staring at the keyboard while you type, rather than not touch-typing "properly". I learned to type exactly the same way, not quite proper, but at 80-100 wpm.
I switched to the Dvorak keyboard layout about two years ago. Same speed, but it feels better -- much more time on the home row, for one thing. I think it's worth trying if you're interested, but it's your life. ABCD (http://www.gigliwood.com/abcd/abcd.html) was helpful (and funny). Just dive in, give it a month or so of normal typing. The first few days will be disorienting -- very old habits are being disrupted. (Also, you can switch back and forth once you're accustomed to it, but doing so initially will probably make learning much harder.)
It works quite well with Emacs, but hjkl navigation in vi becomes a bit awkward. (I tend to use Emacs on my own computers and vi on others' Qwerty-default systems, FWIW.)
Forgive the neuroscience buff here, but I disagree.
By looking at the keyboard, you're relying on vision to direct motor actions and detect errors (fingers in wrong positions, etc.). This requires the involvement of association cortex in, I believe, the parietal lobe, to integrate vision, somatosensory (i.e, touch), proprioception (i.e, body position) stimuli. The end result is that typing speed is limited by the processing speed of the cortex.
On the contrary, pure touch typing does not involve vision. Somatosensation and proprioception can be integrated in the hindbrain and spinal cord, and so touch typing can be done almost exclusively there, with only goal-oriented, "type this word" input from the cortex. Vision comes in later to detect errors, but because it is not in the loop, touch typing is not limited by it.
Accoridng to Mythical Man-Month average programmer produces 2000 LOC per year. Other data I've seen backs this up. Typing speed is not really a problem.
Umm, nice rationalization. But that's 2000 lines of debugged, documented code. It takes a lot more typing than just 2000 x 80 characters. The article basically describes why.
Actually, often. Back when I used to write for school (with a pen) I always had the feeling of losing ideas because I couldn't write as fast as I could think. I don't feel it nearly as much when coding (or writing for that matter), I think because I type faster than I used to be able to write.
Remember that the set of "any programmer" is pretty big. It probably happens by not spending much time programming. Or by not noticing your bad habits.
I think most "kids" today can type pretty well because it's essential for IM-ing. I know that's how I learned to type quickly. Older people might not do much real-time communication, so they might not know how slow their ad-hoc typing is.
Although I already had a computer I was taught to touch type "properly" on a typewriter. It really did take just a few weeks to get totally proficient and it's been handy ever since.
The only time I've managed to make a significant boost was when I bought a Das Keyboard. Not having any labels on my keys means I have learned to absolutely never peak at the keyboard. It's improved my speed overall, but especially with the number row.
I have known a lot of programmers who don't type fast. I don't think it's a massive impediment, but I do think there's a strong correlation between bad programming and lack of typing ability.
I don't think any of the people I personally know and consider uber programmers type really badly. Certainly could be though and I just haven't noticed.
"... Yeev noticed that one of the electives, surely placed there by mistake, was Typing. Like, on a typewriter ..."
What an elective? Mine was compulsory complete with manual typewriters and battle-axe teacher. One thing I do miss about those old clunkers was the solid feel the keys had. You had to learn to position your index fingers at 'F' and 'J' remember where each key was positioned and hit hard. So letters like 'P' and 'q' required a greater force than say 'v' or 'n' (because my index fingers are stronger than pinkies). Keyboards these days have no resistance so typing fast leads to random hits.
I have an ancient Northgate with delicious feel. It's huge, and heavy, with some kind of mechanical switches that snick into place in the coolest way when you press a key. Feels like an IBM Selectric typwriter, if you remember those.
I haven't used it in years, since I now use laptops exclusively. I can't bear to get rid of it, though.
"... It's huge, and heavy, with some kind of mechanical switches that snick into place in the coolest way when you press a key. Feels like an IBM Selectric typwriter, if you remember those ..."
My last IBM model died. The Selectric model was good. Big & heavy I used these in undergrad for creating camera ready artwork. Are the laptop keyboards you use any good?
I've been disappointed with my MacBook Pro kbd. Usable, but not great. It helped a lot for emacs to remap the caps lock key to control. I also have an old Thinkpad T42 that I keep around for running Windows apps. The keyboard is quite nice, but I don't use it enough to have really learned it. Both are way behind the Northgate.
The old DEC VT220 dumb terminal had a nice feel, too, though nothing like the Northgate or Selectric.
Previously they also carried a "professional" model which featured blank keys. Not only was it "l33t", but it was supposed to improve your speed by forcing you to learn to touch type which of course is required for late night hacking sessions in the dark.
Finally, there is the classic carpal tunnel inducing IBM keyboard:
"... Previously they also carried a "professional" model which featured blank keys. Not only was it "l33t", but it was supposed to improve your speed by forcing you to learn to touch type which of course is required for late night hacking sessions in the dark ..."
That is pretty sad. While I can touch-type, typing accuracy at night decreases not because I can't find 'F' & 'H'. Must be murder with long passwords.
At risk of public shame, I actually use a blank keyboard. And, I switched to it from a kinesis ergo. O_o
Regarding passwords, for the past 10 years I've chosen passwords based on "shape." It is a trick I learned from a sysadmin friend, and know more than a couple other sysadmin guys who do the same. It can suck when you switch to a keyboard on a mobile device and the keys aren't where you think they are going to be.
Its keys are wonderfully weighted, tactile without being obnoxiously loud, but it's not really practical these days as it doesn't have F keys and the ins/del/home/end/pgup/pgdn set, and the arrows aren't in inverted-T form, which is annoying.
Otherwise I prefer laptop keyboards (50/50 between Dell's current-ish stuff and the traditional ThinkPad design). I'm more than happy to be more gentle in order to extend the life of my fingers and wrists.
My completely science-free analysis (it seems to me) that the less force your fingers have to exert, the less strain you're putting on the internal body parts that actually make that happen. Most laptop keyboards require less force and have less travel, both of which seem advantageous.
This of course assumes that all else is equal (good ergonomic fit, sitting properly, etc. I am not a doctor or ergo councilor, so your mileage may vary.
Kinesis advantage pro. The keys are placed very well, and require little movement to register. A small speaker goes off when it registers the stroke, so you know when you can stop pressing.
I'm a two-fingers-and-a-thumb, look-at-the-keyboard, what's-the-home-row? typer, and I can still hit 70+ on a bad day. Still not sure what that has to do with 1) my ability to code, 2) my ability to communicate.
It's just an all-around upgrade to your personal ability. We all spend a lot of time at a computer. Why not try learning? The process of learning touch typing will make you better at two finger typing, if nothing else.
One of my co-workers types with his two pointer fingers and I'm sure he hits at least 80 wpm if not more. He looks at the keys on occasion, but he mostly does not need to. However, I get the impression his error rate is quite high.
All that being said, I think he could type even faster if he just bit the bullet and learned to touch type. This is why Steve is right. You might be a pretty fast typer already, but you can probably be a lot faster using all your fingers instead of just two.
Does anyone else type on QWERTY but never from home row? I get 115wpm but with a disastrous 96% accuracy. The upside is much better access to the number keys and punctuation. I once tried to switch to Colemak, but never managed to completely switch over. I think this was because my muscle memory of QWERTY in 8 different positions was too powerful to unlearn.
I actually don't know anyone that doesn't touch type that is under the age of 35 (but perhaps I need to pay more attention). Anyone that went and did an engineering level degree surely would be able to (due to thesis writing at least).
Even when I was in high school (back pre 1992) we learned by having a tea-towel over our hands and having to type without looking.
i just realized that i may be a fast typist, but i use only 4 fingers. Left pinky for shift, ctrl,alt, left index for left letters, right middle finger for right letters, right thumb for space(sometimes left). I can type with a descent speed in two languages(English, Bulgarian) and i can even mix em and still type pretty fast. But i look at the keyboard pretty often and i my backspace key is the most clean one. This blog post has inspired me to just load KTouch and practice(KDE 4 came with a fast typing teacher, cool). I don't actually have a problem, because i make many mistakes, but i got really good at correcting them fast, so i still have a pretty good WPM count, haven't measured it, but its descent for a person who types a lot. I hope KTouch can help. After just 20 minutes with it i feel uncomfortable typing the way i used to, seems inefficient.
Incidentally, Steve brought up an interesting topic. Musicians practice by playing fast, then slow, then medium. Fast, slow, medium. Over and over. That seems like a good way to write software.
You first try to implement your idea as quickly as possible, stopping to think only when necessary. The goal is to not spend too much time overthinking the implementation -- you want to find out if your idea is worth executing on.
If you decide that your idea isn't worth it, then you move on to your next one. Otherwise you take it slow, going back over your code and refactoring it. (I personally don't believe in "make one to throw away", but rather that it's possible to refactor an ugly design into a succinct one.) At this stage, you should meditate on the best way to accomplish your engineering goals. It will pay off in the long run to spend extra time here.
Then comes the final stage in your project's lifecycle: medium. The core structure of the design has solidified, and you need to add the flourishes that make software truly great. But you have to take your time to ensure that the codebase stays clean. At this point, the design of the various smaller subsystems should flow naturally from the architecture you decided on in the "slow" phase.
I just recently started writing software >40 hours a week, and have been constantly torn between "getting things done" and "doing things right". The best way to program well might very well be a variation between the two modes.
Actually, it's a lot easier to make it work if you've made it right to begin with. (That said, I've always found the best way to develop is to add functionality to a working program, no matter how small it starts out).
1. Sometimes, making it work is enough. (one time code and such) There's no reason, other than for practice, to waste time designing such cases.
2. You may find out that you're solving the wrong problem, and it's much easier to justify throwing out code that you didn't labor over an extensible design, etc. It's much harder to throw away wrong code that you've put work into the internal design.
3. This doesn't mean that you don't design the outward facing interfaces correctly. Thus, you have a good set of unit tests already set up, and you can quickly tell if something is working as you refactor. You have a good baseline with which to compare.
While I'd agree with Lisp and Haskell, I not sure how SQL could be considered that dense. I often find myself frustrated that a split second thought takes so long to express as a query, and I type a decent 80wpm or so.
Well I was actually talking about writing queries that involve a join or two. Thinking to myself "I can get this by grabbing all these via joining on that where x = y" doesn't take very long, but typing that out can be annoying if you do it often enough.
Of course, if you are constantly writing 8-way joins with fun things like group_concat in the select clause, I guess it would require a little more thought than typing. Also, I'd imagine the people that spend their days writing stored procedures, triggers, and the like spend more time thinking than typing, but I can't claim to be one of those people.
I'm reminded of some K guy (Stevan Apter?) posting working code to the newsgroup from a WebTV. The language is that terse. 1 line of code == 1 page of explanations.
I find that when I'm doing Java, I'm not thinking or typing as much as I am hitting ctrl-space for the IDE to autocomplete superLongMethodNamesFactoryStubHome().
In Ruby, it seems I think and type in equal parts.
I remapped my Escape key to a more convenient place on my keyboard (it's a thumb key now); as a result, when I write Ruby code in TextMate, half of it appears virtually instantaneously. The downside? Sometimes accidentally pressing Escape when typing anywhere else. D'oh!
I have a pedal for my Kinesis keyboard, but I almost never use it. When I do use it it's for something like num lock... I tried it for Emacs ctrl and/or meta but it didn't work well. The big problem is that I don't keep my feet frozen in one spot for hours, so when I go to press the pedal I have to find the darn thing by feeling around with my feet. You don't have to lose much time doing this before the point of the pedal is lost.
I could try to train myself to keep my feet in one spot. But I fear the ergonomic consequences. I have enough trouble with the need to keep my hands in the same spot for hours on end...
Maybe I need much bigger pedals. Or special shoes...
What sort of pedal, how much did it cost, and where'd you get it?
I ask because my sister had this neat idea for a hardware hack: a digital music stand. The idea being that page turns really suck when you play any instrument that takes two hands (we're both violinists), and if you could hook it up to a foot pedal, you could control the music without putting down your instrument. I also pointed out that a digital music stand would cost at least as much as a computer, but now that you can get laptops for $98, this may be doable...
Plus, think of all the people on YouTube that you see lean over to stop recording. If it doesn't already exist, software to control a webcam through a foot pedal would be a great boon to YouTubers everywhere. The porn industry would love it too - that bra unclasp is so much sexier when she's not blatantly fiddling with her webcam.
Also, I used to be in orchestras. A Kindle for sheet music would be neat. Especially if it had built in metronome and tuner for practicing. Might take away some of the old-school ambiance though.
If you need to type that much, to where whether or not you can touch type matters . . . you are doing something wrong. Saying touch typing matters amounts to stating that programming is actually carried out ON THE SCREEN YOU ARE TYPING ON and I could not disagree with that more . . . programming takes place in the mind of the programmer, typing on the screen is a byproduct.
I can't wait to see how his argument holds up once we have brain to computer interfaces that allow us to skip typing altogether.
programming takes place in the mind of the programmer, typing on the screen is a byproduct
As he says in the article, the actual programming is not what requires much typing. It's communicating with others on IRC (or e-mail, whatever you kids use these days), typing documentation, writing blog posts, etc. that require typing skills.
I will agree with him on this. I don't type much when actually programming, but I do type a lot when talking with people on IRC (including co-workers, since we all work from home) and writing documentation. And writing HN comments :)
While typed communication IS a very big part of the work related to programming, it is not programming itself, which is what I believe to be important, and what I was referring to.
IRC, email, are secondary in importance.
Documentation and code comments should be concise.