
Programming's Dirtiest Little Secret - erictobia
http://steve-yegge.blogspot.com/2008/09/programmings-dirtiest-little-secret.html
======
rtf
If Steve Yegge typed slower, I wouldn't have to read as much.

~~~
DanielBMarkham
I just skipped down to the bolded text. Took about 10 seconds.

I'm sure he had something else important to say.

Maybe?

~~~
briancooley
Ironically, he also said this:

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

~~~
DanielBMarkham
I wonder if he had anything to say about people who wrote rambling, long
articles?

Heck, I'm one of 'em!

------
caustic
Guys, could you please take a look at the project I am working on:
<http://keybr.com> I thought it could be a good touch typing trainer web
application.

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

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

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

~~~
Xichekolas
I also have a 'modified style' when I use qwerty... via legacy of learning it
on my own before being taught.

When I switched dvorak I figured I might as well do it right. As a side
effect, my hands no longer hurt like they did with qwerty...

------
henning
Three-word summary: learn to type.

~~~
KiwiNige
Thank you

Edit: why is learning to type a dirty little secret?

~~~
jamesbritt
I think the secret is that those who type slow are picking up speed by being
hasty in their code decisions.

I'm skeptical, since far more development time is spent thinking about what to
do than in banging out text to implement it.

And maybe some faster typists just emit more bad, buggy code.

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

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

~~~
axod
Good points.

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

~~~
biohacker42
Can you convince me you're just as fast if you have to look at the keyboard?

I bet you'd be faster if you didn't need to.

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

~~~
biohacker42
When you don't have to think what you're typing, your mind is free to think
about the code. The more you think about your code, the better you are.

Image if you had to stop and think to use the mouse.

~~~
run4yourlives
Ok, but not thinking about typing comes much earlier than being proficient in
typing to the degree mentioned here.

Besides, I don't really think about kicking a soccer ball, but I certainly
look at it when I do.

------
zandorg
I go by Andy Hertzfeld (Apple)'s credo: Your productivity can be measured in
how many lines you REMOVE that week...

This is especially true with Lisp - you compact it down like one of those
trash compactors.

[folklore.org]

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

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

~~~
epe
Hehe, good one, but I think he means the email that the can't-typers send
_him_ will be "really short".

------
jrockway
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!

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

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

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

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

~~~
prospero
What's your definition of "not touch typing"? Do you use two fingers? Do you
keep your fingers on the home row?

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

~~~
andreyf
You do 130wpm with two fingers? Try using more, you'll do >200wpm easy!

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

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

Plus he's not talking about "average."

~~~
DenisM
Even if you are 10 times the average that's coming out to 55 lines per day.
Seriously, did you ever find your coding constranied by your typing speed?

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

------
mhartl
It frankly never occurred to me that any programmers _wouldn't_ know how to
touch-type. How does that happen?

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

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

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

What's the most solid keyboard you have used?

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

~~~
bootload
_"... 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?

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

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

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

<http://www.freetypinggame.net/>
<http://thepiratebay.org/torrent/3552142/Typing_of_the_Dead>

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

------
bitdiddle
This is less an issue when programming in lambda calculus, if one takes the
combinator approach and just uses S, K, and I.

I know, I can hear the complaints about the lack of good libraries...

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

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

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

------
phony_identity
This: <http://www.typeonline.co.uk/typingspeed.php> tells me I type at about
55 wpm with about one error. Apparently this sucks. Damn it.

------
abstractbill
I can see his point, but most of my "typing" consists of pressing two or three
keys, followed by M-/ so how much would it _really_ help to touch-type?

------
maxklein
He should not try to hard so be funny. He is not succeeding, he's just drowing
his point in superfluous words.

~~~
kirubakaran
That's like... just your _opinion_ man :)

------
rms
Typing is by far the most useful thing I learned in school.

~~~
blogimus
Really? Not math and/or English?

~~~
rms
I had typing class in 6th grade. So I'll restate it as the most useful thing I
learned in school, from 6th grade on.

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

Repeat for each core feature.

~~~
andreyf
That's exactly where I thought he was going...

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.

~~~
ibsulon
The mantra from eXtreme Programming:

1\. Make it work. 2\. Make it right. 3\. Make it fast. 4\. Make it small.

#1 first, then if you have the need, #2. If you have a need, #3. If you have
the need, #4.

It's a lot easier to make it right once you've made it work.

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

~~~
ibsulon
There are a few problems with this:

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.

------
time_management
My typing speed is about 75 wpm, which probably sucks by HN standards. I don't
type nearly as fast as I think.

When I'm writing Java code, I find that my typing speed is often a bottleneck.
In Ocaml or Lisp, it never is.

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

~~~
mhartl
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!

~~~
LogicHoleFlaw
I keep threatening to get two foot pedals. One for CTRL and one for ESC. I
think it would give me vim superpowers.

~~~
mechanical_fish
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_...

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

~~~
menloparkbum
Kinesis has their own foot pedals.

<http://www.kinesis-ergo.com/foot.htm>

There are a number of midi/usb pedalboards, but they have tons of pedals and
are relatively expensive.

There are also a lot of DIY footswitch projects. Check this one out, it is for
turning pages inside digital music stand software. :)

<http://www.instructables.com/id/USB-Foot-Pedal/>

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.

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

~~~
jrockway
_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 :)

~~~
eru
So touch typing let's you procrastinate more efficently? ;)

