Programming’s Dirtiest Little Secret
- Archivo descargado desde: steve-yegge.blogspot.com
This is another one I’ve wanted to write forever. Man, I’ve tried a bunch of times. No ruck. Not Rucky. Once again I’m stuck feeling so strongly about something that I’m tripping over myself trying to get my point across.
So! Only one thing left to try: bust open a bottle of wine and see if that gets the ol' creative juices flowing all over my keyboard. Rather than top-down, which is boring, let’s go bottoms-up.
Once upon a time…
…in, uh, let’s see… it was about 1982. Yeah. A looooong time ago. This is practically a fairy tale.
Once upon a time in ‘82, there was this completely hypothetical fictitious made-up dorky 12-year-old kid named Yeev Staigey, who was enduring his sophomore year at Paradise High School in Paradise, California. Yeev had skipped 3rd, 7th and 8th grades and entered high school at age 11, in a heroic and largely successful effort to become socially inept for the rest of his life.
Boy, I could tell you all sorts of stories about little Yeev at that age. He was even lamer and more pathetic than you’re probably already imagining.
However, our story today concerns Yeev’s need to take a, um, an… elective of some sort. I’m not sure what they called it, but at Yeev’s school, you couldn’t just take math and science and languages and history and all that boring stuff. No! Yeev was being educated in the United States of America, so he had to take “electives”, which were loosely defined as “Classes Taught by the Football Coach because Some Law Said that Football Coaches Had to Teach A Course Other Than Football.”
These “electives” (which you could “elect” not to take, in which case they would “elect” not to graduate you) were the kinds of courses that put the “Red” in Red-Blooded American. These were courses like Wood Shop, Metal Shop, Auto Shop, and of course that perennial favorite, Just Chop Your Hand Off For Five Credits Shop.
At the time our story begins, our pathetic hero Yeev is peering through his giant scratched bifocal goggles at the electives list, trying to find one that doesn’t involve grease and sparks and teachers screaming for a medic, can anyone here make a tourniquet, help help help oh god my pension, and all that manly American stuff you find in Shop class.
Yeev noticed that one of the electives, surely placed there by mistake, was Typing. Like, on a typewriter. Yeev thought this seemed, in the grand scheme of things, relatively harmless. The worst that could happen was maybe getting your fingers jammed in an electric typewriter just as lightning hit the building, causing you to jerk wildly in such a way that your pants accidentally fall down around your ankles and everyone laughs loudly at the Mervyn’s white briefs your mom bought you. That would be mildly embarrassing, yes, but in a few years almost nobody would remember, except when they saw you.
Despite this potential pitfall, Typing definitely sounded more appealing than Tourniquet Shop.
Yeev checked, and sure enough, the school’s football coach was actually teaching the class. For real. Seeing as this was going to be the closest Yeev would ever get to a football field during his educational career, Yeev decided to go for it.
Yeev didn’t know it at the time, but they say coaches make the best teachers. You know. “Them.” “They” say it. It’s got some truth to it, actually. Coaches have to get a bunch of complicated information through to people with the attention spans of hungry billy goats. That takes mad skilz, as “they” also say.
Have you ever noticed how on NFL Prime Time, the ex-coach commentators and coached ex-player commentators always have big, beefy hands, and they wave them at you as they talk, riveting your attention on the speaker? It’s because your reptilian brain is thinking “that dude is about to hit me.” Coaches know how to get your attention. They know how to teach.
So Yeev was pretty fortunate in getting a coach. It wasn’t all roses, mind you. He was unfortunate in the sense that he was living in 1982, he had little to no experience with computers, and the school was so backwards that by 2008 they still wouldn’t have a fugging website, apparently. And back in 1982 they could only afford budget for half the typerwriters to be electric; the rest were the old, manual, horse-drawn kind of typewriter.
It would have been better if Yeev had been learning to type today. Today they have fast keyboards, and smart programs that can show you your exact progress, and so on.
I feel almost jealous of people who need to learn to type today. Don’t you?
But in 1982, little bifocaled Yeev had no software training programs, so he had to learn from a football coach.
And all things considered, this was pretty rucky.
Let me tell you how it went down…
Learning Licks
Have you ever watched a professional concert musician practicing? I’m talking about those those world-class ones, the kinds of musicians that were trained in academies in China and Russia and have all the technique of Japanese robots combined with all the musical soul of, well, Japanese robots.
Well, they practice like this: Fast, Slow, Medium. Fast, Slow, Medium. Over and over.
That’s how they practice.
It’s kinda like Goldilocks. You remember her, don’t you? That little girl in the fairy tale that got eaten by bears? Too hot, too cold, just right. That’s how musicians practice.
In classical music, they call difficult hunks of music “passages”. In electric guitar music, they call ‘em “licks”. But it’s pretty much the same thing. You want to train your fingers to swipe through those notes like a Cheshire Cat licking its big smile. Llllllick!
Here’s how you train your fingers.
You start with a passage. Anything at all. At first it’ll just be a single note. Later it’ll become a few notes, a phrase, a measure, a couple of measures. Anything you’re having trouble with and you want to master.
First you play the lick as fast as possible. You don’t care about making mistakes! The goal of this phase is to loosen your fingers up. You want them to know what raw speed feels like. The wind should be rushing through their fingery hair! Yuck!
Next you play it as slow as necessary. In this pass you should use proper technique. That basically means “as proper as you can”, because state-of-the-art technique is (a) constantly evolving and (b) always somewhat personal. You pick any discipline, they’ve got schools of thought around technique. There’s no right answer, because our bodies all work a little differently. You just have to pick the technique that you like best and try to do it right.
Eventually you can invent your own technique. Sometimes you’re forced to: I’ll tell you about that in a little bit. But at first you should learn someone else’s tried-and-true technique, and after you’ve mastered it, then decide if you want to change it. Before you go charging off in your own crazy directions, you need to master your form.
Form is liberating. Believe it. It’s what they say, and they say it for sound reasons.
Whatever technique you choose, in the slow pass you don’t care about speed AT ALL. You care about accuracy. Perfect practice makes perfect, and all that. You want your fingers to know what it feels like to be correct. Doesn’t matter if it takes you 30 seconds per note. Just get it right. If you make a mistake, start over from the beginning, slower.
Finally, you play it “at speed”. If you’re practicing a musical instrument, you play it at the target tempo. You want your fingers to feel musical. Musicians generally agree that you don’t want to make mistakes in this phase, or you’re just practicing your mistakes. But realistically, most musicians are probably willing to make a few minor sacrifices here in the third pass, as long as the music shines through beautifully.
Let’s call it 5 sacrifices a minute. That’s what you’re targeting.
Fast, Slow, Medium. Over and over. That’s what they do. And it works!
Learning to Type
Yeev’s football coach was a very wise man. I don’t know if he played a musical instrument, but he sure as heck used classical practice ideas.
Yeev dutifully attended class once a day. First he had to learn the basics of typing. There’s not much to it, really. You hold your hands in a certain position on “home row”. You keep your wrists off the keyboard. There’s a diagram showing which fingers type which keys. You memorize it. You try each key a few times.
Think back to kindergarten, when they had you writing the alphabet. You’d fill a line with “A"s, and then a line with “B"s. Just like that.
Within a day or two, you have the keyboard layout memorized, and given enough time, you can type anything without looking at the keys. Just a day or two, and you’re already touch-typing!
After the basics, unsurprisingly, Yeev’s class played a lot of Typing Football. This was a game the coach had invented to help making learning how to type fun. It wasn’t too hard, since the coach astutely realized that not everyone in the class would have the NFL rule book and playbook memorized. Typing football pretty much involved dividing the class in half and moving the ball down the field by typing better than the other half.
The drills Yeev did in 1982 could be done a lot better today using software. Heck, today they have software that lets you practice typing by shooting zombies. How cool is that?
If there’s any secret to learning to type, it’s persistence. Yeev’s class kept at it. Every day, five days a week for 12 weeks, they typed. They didn’t have homework, since it wasn’t expected that they’d have typewriters. They just came in, played typing football, and did the fast/slow/medium drills.
Sure, sure, there were nuances. Sometimes they’d practice common letter groupings in their language of choice, which in Yeev’s case was English. Groups like “tion”, “the” and “ing” had to be practiced until they rolled out with an effortless flick. Sometimes they’d practice stuff with lots of punctuation, or numbers, or odd spacing.
That kind of detail is beyond the scope of our story. It’s all handled by typing software these days. You’ll see.
So how did it turn out? Well, by the end of the semester, Yeev was typing a healthy 60 words per minute. And he wasn’t even the best in the class. It was approximately a 45-day investment of 50 minutes a day.
And it was fun!
Realistically, these days, with better software and better keyboards, learning to type is probably more like a 30-day investment of 30 minutes a day.
Today Yeev types about 120 wpm. He entered college still typing around 60-65 wpm, but he decided to practice up after IM’ing with a fellow student named Kelly who typed 120 wpm, using an old Unix program called “talk”. Yeev could feel her impatience as they IM’ed. He mentioned it, and she said: “You should see me on a Dvorak keyboard.”
Yowza. Yeev was just socially ept enough by then to bite his tongue really hard, and not type anything at all.
But enough about Yeev. The guy’s made-up anyway.
Do you need to learn to type?
Well, uh… yeah. You know you do. That’s the thing. Even as you make excuses, you know deep down that you need to learn. Typing is how we interact with the whole world today. It doesn’t make sense to handicap yourself.
Perhaps you’re one of those people who declares: “I’m not rate-limited! I spend all my time in design and almost none of it entering code!” I hear that all the time.
You’re wrong, though. Programmers type all day long, even when they’re designing. Especially when they’re designing, in fact, because they need to have conversations with remote participants.
Here’s the industry’s dirty secret:
Programmers who don’t touch-type fit a profile.
If you’re a touch-typist, you know the profile I’m talking about. It’s dirty. People don’t talk about dirty secrets in polite company. Illtyperacy is the bastard incest child hiding in the industry’s basement. I swear, people get really uncomfortable talking about it. We programmers act all enlightened on Reddit, but we can’t face our own biggest socio-cultural dirty secret.
Well, see, here’s how it is: I’m gonna air out the laundry, whether you like the smell or not.
What’s the profile? The profile is this: non-touch-typists have to make sacrifices in order to sustain their productivity.
It’s just simple arithmetic. If you spend more time hammering out code, then in order to keep up, you need to spend less time doing something else.
But when it comes to programming, there are only so many things you can sacrifice! You can cut down on your documentation. You can cut down on commenting your code. You can cut down on email conversations and participation in online discussions, preferring group discussions and hallway conversations.
And… well, that’s about it.
So guess what non-touch-typists sacrifice? All of it, man. They sacrifice all of it.
Touch typists can spot an illtyperate programmer from a mile away. They don’t even have to be in the same room.
For starters, non-typists are almost invisible. They don’t leave a footprint in our online community.
When you talk to them 1-on-1, sure, they seem smart. They usually are smart. But non-typists only ever contribute a sentence or two to any online design discussion, or style-guide thread, or outright flamewar, so their online presence is limited.
Heck, it almost seems like they’re standoffish, not interested in helping develop the engineering culture. Too good for everyone else!
That’s the first part of the profile. They’re distant. And that’s where their claim that “most of their time is spent in design” completely falls apart, because design involves communicating with other people, and design involves a persistent record of the decision tree. If you’re not typing as part of your design, then you’re not doing design right.
Next dead-giveaway: non-typist code is… minimalist. They don’t go the extra mile to comment things. If their typing skills are really bad, they may opt to comment the code in a second, optional pass. And the ones who essentially type with their elbows? They even sacrifice formatting, which is truly the most horrible sin a programmer can commit. Well, actually, no, scratch that. It’s the second worst. The worst is misspelling an identifier, and then not fixing it because it’s too much typing. But shotgun formatting is Right Up There.
You know. Shotgun formatting? Where you shove all your letters into a shotgun, point it at the screen, and BLAM! You’ve Got Code? I knew a dude who coded like that. It was horrible. It was even more horrifying to watch him, because he stared directly downward at his keyboard while he typed, and he’d type with exactly two fingers, whether he needed them both or not, and about once a minute he’d look up at the screen.
During these brief inspections of his output, one of two things would happen. The first possibility was that he’d reach for his mouse, because he had been typing into the wrong window for the past 60 seconds, often with comical results. If he didn’t reach for his mouse, he’d reach for the backspace key, which he would press, on average, the same number of times he had pressed other keys.
That dude just may have been CPU bound rather than I/O-bound, though, so I guess I’ll cut him some slack.
B-b-b-but REFACTORING *fap* *fap* *fap*
Yeah, yeah. Refaptoring tools make you feel studly. I hear ya. I’ve heard it plenty of times. The existence of refactoring tools makes typing practically obsolete! A thing of the past! You just press menu buttons all day and collect a paycheck!
I got it. Really. I hear ya.
Here’s the deal: everyone is laughing at you. Or if they’re your close friend, they’re just pitying you. Because you suck. If you really think refactoring tools are a substitute for typing, it’s like you’re telling us that it’s OK for you to saw your legs off because you have a car. We’re not fucking buying it.
If you are a programmer, or an IT professional working with computers in any capacity, you need to learn to type! I don’t know how to put it any more clearly than that. If you refuse to take the time, then you’re… you’re… an adjective interjection adjective noun, exclamation.
Yeah, I went ahead and redacted that last sentence a bit. It’s better this way. I want us to remain friends. You just go ahead and madlib that sucker.
The Good News
Here’s the good news, though. Seriously, there’s good news. Like, now that you’re finally gonna learn to type, I’ve got good news for you.
And I know you’re gonna learn. You know how I know? I’ll tell you: it’s because you’ve read this far!
Seriously. The fact that you can actually read sets you apart.
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 the industry’s other dirty little secret.
So! Given that you’ve read this far, you now realize that it’s high time you learned to type. You know you can do it. You even know it’s not going to be that hard. You know you’re just going to have to give up a couple dozen games of Wii Golf, and suddenly you’ll be, like, twice as productive without having had to learn so much as a new data structure.
You know. That’s why I know you’re going to learn.
So I’ll tell you the good news: it’s frigging easy! Fast, slow, medium! Get some typing software and just learn. We’re not talking about dieting here, or quitting smoking. It doesn’t matter how old you are, how set in your ways you are: it’s still easy. You just need to put in a few dozen hours.
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.
In fact, here’s a mini pep talk for ya: I didn’t know how to touch-type numbers until I’d been out of college for 3 or 4 years. I finally got fed up with the fact that every time I had to type a number, I had to sit up, look down at the keys, and fumble through with a couple of random fingers.
So I finally spent 15 minutes a day for, like, 2 weeks. That’s it. You don’t have to type numbers very often, as it happens, so after a week or so, every time I needed to type a number I just slowed down and typed it right. After about 2 weeks, I was typing numbers.
That was 15 years ago! 15! 15! 15! I love being able to type that without looking! It’s empowering, being able to type almost as fast as you can think. Why would you want it any other way?
C’mon. It’s time to bite the bullet and learn.
Where to start?
Well, if it were me, I’d go online and look for free typing software. I’d search for, oh, an hour or two at most, spread over a week or so. I’d try everything out there. If nothing free seemed to be doing it for me, I’d get Mavis Beacon. It’s, like, the brand name for typing software. I have no idea if it’s good, but I imagine it’s a hell of a lot better than a football coach teaching you on an electric typewriter.
I dunno, man. I just can’t… I can’t understand why professional programmers out there allow themselves to have a career without teaching themselves to type. It doesn’t make any sense. It’s like being, I dunno, an actor without knowing how to put your clothes on. It’s showing up to the game unprepared. It’s coming to a meeting without your slides. Going to class without your homework. Swimming in the Olympics wearing a pair of Eddie Bauer Adventurer Shorts.
Let’s face it: it’s lazy.
There’s just no excuse for it. There are no excuses. I have a friend, John, who can only use one of his hands. He types 70 wpm. He invented his own technique for it. He’s not making excuses; he’s typing circles around people who are making excuses.
Shame on them!
If you have two hands, then 70 wpm, error-free, is easily within your reach. Or faster. It ain’t as hard as you think. It’s a LOT more useful and liberating than you think.
And since you’re Rucky enough to be learning today, you might as well learn on a Dvorak layout. It’s a free speed boost. Might as well give yourself a head start!
That’s it. That’s my article. Please — learn to type. This should be a non-issue, NOT one of the industry’s dirty secrets that nobody talks about. Tell your boss you’re going to take the time. Get your employer to pay for the software. Have them send you off to a course, if necessary, so you can’t weasel out of it.
Do whatever it takes.
Then let me know how it goes. Believe it or not, I want to hear your success stories. Send me mail. It’ll make my day!