Coding Horror: The Keyboard Cult
codinghorror.com
codinghorror.com
But I'm a composer, not a pianist, and technology has been liberating composers from the need to be expert performers at least as far back as since Apple funded a MediaLab project to give grade school children computers to perform music so that they could compose music a long before they could learn to play their own compositions.
Then again, he may have a point, I do a lot of whimsical programming. Maybe if I took programming more seriously I'd learn to type. And learn to use an IDE. And learn to push dirt:
http://steve-yegge.blogspot.com/2007/12/codes-worst-enemy.ht...
:-)
Thankfully this is hardly a slamming indictment.
If I typed more quickly, maybe I would have more time for thinking. That might be very important.
Perhaps knowing the eventual time you must spend to type causes you to think more before you begin typing...
Who's to say?
That said, I can't imagine those blog posts come out quickly :)
In ......... my opinion it's impo..r..t..ant to make ... these pauses.. when programming .... otherwise you might ... miss ................ something important.
Maybe, but I don't personally buy it (as a fast typer myself). I think programming shares a lot with writing where the editing is more important than the first draft. In my experience, typing speed doesn't significantly affect the quality of a writer's work, though perhaps it does the quantity.
You are proof of this. From what I've seen, your writing is good and goes down well on HN, yet you've identified as a "slow" typist. I don't see why your code should be any different.
- You don't get constantly interrupted looking for a key. Seriously, remember what this was like before you could type. Being able to type without thinking about it must free up a lot of mental energy and allow you to concentrate.
- If typing is easy, you tend to write more. You don't care if you have to rewrite a function. You don't mind using longer, more self-documenting variable names that make your code clearer.
I tend to agree - when a developer is on a tear, and creating great code, the _last_ thing you want to have standing between them and their masterpiece is a 20 WPM habit.
* Hey, I taught myself to type as a kid, playing text adventure games and typing in BASIC programs from library books.
I never learned how to type, I just got good at it without trying since I've been using computers for >20 years.
Surely most if not all good programmers have at very least been using computers for a long while before becoming good programmers?
It was when I started college my freshman year and started to spend a lot of time on AIM talking to old high school friends that I really learned to touch type. There's nothing like having to keep up in a conversation to make you type more quickly.
Seriously, just putting your hands on the keyboard correctly and then continuing with a hunt and peck method, if you're typing a lot for your job, will certainly lead to being a good typist within a few months. It doesn't even take conscious effort.
I'd been dicking around with computers for about four years at this point, so I asked them if I could come in and take a typing test to be exempt. They sat and watched me type, and didn't even bother looking at my WPM before they let me skip the class.
I don't really know how you can use a computer on a daily basis, and not learn to type quickly. It's like driving a stick shift for years, and still glancing down at the knob to see where 2nd gear is.
I learned to type with all 8 fingers in about 30 minutes a day for about 2 weeks. I think I just used GNU Typist. Most efficient time investment of my entire life. Is my experience different from others?
Fundamentally, I assert it's really pretty unlikely that your throughput at the keyboard is a limiting factor to your productivity when writing code. It certainly is limiting if you're transcribing speech to text. To code: it's doubtfully reliable as a measure unless you're Rainman or worst case "headbanger" coders who substitute knowledge of what they write for knowledge of the result of what they execute.
Remember, you could always see someone post about how lines of code produced does not equal productivity. There's a recurring post about the guy who considered productive being reducing the size of his code.
Don't get me wrong, typing is a useful skill and good on those who master it at a high level. However it's no substitute for 'working smart' for e.g. :
Writing scripts when you need to.
Knowing your editor inside out.
Knowing your SCM (of choice) well.
etc.
At best I suspect the 'don't type fast' thing just seems to be indicative of the duffers in the industry who are just sucking a paycheck out of your company. Don't let it fool you that it's a definitive metric of software competency though.
My first ideas are usually not quite distilled, and after the initial burst (or brain fart) of code, I spend a lot of time reducing/refactoring the code.
Under 30 WPM, learning touch-typing should be a top priority. (Use Dvorak if you type mainly in English, it's 4 times as fast to learn than Qwerty.) Not having to lower your eyes and your head any more is so much more comfortable that it quickly becomes addictive. Of course, you will be slow at first, but you can get your speed back in two weeks (maybe even faster if you choose a Dvorak layout).
50 WPM (my speed, getting better over time) feels pretty comfortable, though Id' like to type a bit faster. If you hunt-and peck at that speed, touch typing will only buy you the comfort, but even that may be worth it.
90WPM is the speed of speech. Any faster is for contests.
Speech speeds for speeches and books on tape, where the listener can't interrupt and ask you to repeat, are typically around 150WPM http://www.humanfactors.com/downloads/aug00.asp but normal conversation is up around 170-280WPM http://itre.cis.upenn.edu/~myl/languagelog/archives/003423.h... and court reporters need to be able to transcribe speech at over 180wpm and typically 200wpm http://www.thehighschoolgraduate.com/editorial/DF/courtrepor... .
Try reading aloud something you're typing as you're typing it. You'll find that 90wpm is very slow speech. The only reason speeds like 50wpm and 90wpm can feel comfortable is that the actual process of typing is distracting enough that we don't have time to get bored.q
So it makes sense to make the button-mashing as optimal as possible, so that there is no friction involved in programming. A few minutes of practicing new entry methods (using the right fingers for the right keys, etc.) eventually results in a less annoying interface between your brain and your computer. And that makes programming more productive and enjoyable.
(Interestingly, this post would have been much better if I had bothered to connect my HHKB to my netbook. Using the shitty netbook keyboard made me want to get commenting over with as quickly as possible. Make this a habit, and your shit keyboard results in shit work. For me, anyway.)
This at first sounds true but really isn't; programming is not pure thought: it's thinking and implementing and seeing how the implementation goes and trying a different way, having new ideas, etc.
You can't "think" in a pure vacuum; you need to bounce ideas off something real.
I do some woodworking and let me assure you the "ideas" that I have before starting a project get changed a lot when confronted to the reality of wood and tools.
After a while you discover that, to some extent, you end up making your own tools, that fit you and the projects you like to do.
Programming-wise, that's also why I dislike IDEs: they add an additional layer between you and the object you're working on; it's like woodworking with gloves (impossible). And they don't contribute much; they advertise "speed", but the slow part is thinking, not typing!
- - -
(I'm typing this on a daskeyboard with blank keys, I've used it for two years, it's fantastic.)
This, for me, is totally untrue. The IDE I use, IntelliJ, is the best programming tool I've ever used, bar none. And yes, I used Emacs for 5 years. It's amazing precisely because it adds an additional layer (the AST). That layer (the AST) is what I work on, with amazingly complex semantic instructions. I haven't programmed in text for years.
Note I'm not saying this because it's just that much more awesome or whatever, this is a real concrete change I experienced. I wasn't "hunt and peck" but I was all over the board and thought stodgy typing rules were silly. Right opinion, wrong reason; the rules are nonsense on a QWERTY board, but make sense with sane layouts.
Whether proficient QWERTY touch typists should switch, I don't know, but the value proposition for someone who isn't really proficient is a lot more compelling. Hunt and peck typist's brains are simply correctly reacting to the lack of utility of using the home row correctly, and if you fix that problem the rest will just flow.
It's not worth it to me to become proficient with Dvorak, even if I can see wins in typing speed and accuracy, because I'll incur ten times the frustration when forced to perform routine operations on a friend or coworker's computer.
And if I was driven insane by the impediment of a keyboard, do you think I would suffer it gladly?
Which is my way of saying, I haven't been driven insane by it and I don't perceive that my ideas are suffering in a traffic jam trying to get out of my brain and into the computer.
Perhaps Atwood's analogy isn't the best. Programmers are the composers and the computer itself is the pianist, running the composition. However, you need a keyboard to compose!
I don't think my typing really got fast until I started using instant messaging. When it comes to programming, I could always type a lot faster than I could think. I'm probably typing this message significantly faster than I'd type any code.
However... Having said all of this, I do my best programming in the the 20 minute walks I take after getting up and walking away from the code for a while, not while I'm actively sitting at the keyboard typing stuff in. At the point in which I'm typing, I'm basically just dictating my own previous thoughts into a text editor and while it might make me marginally overall more efficient to do this faster, it is not at all the bottleneck of my entire process, it isn't even one of the top 25 hotspots.
Given my own process, I've never understood why anyone could possibly attempt to make a connection between input speed and quality. I could type one line of code a minute and typing still wouldn't be the botttleneck to me creating great code and I find it hard to believe that is true of anyone else if they are really being honest about their overall development process.
You're likely correct, and I've found myself doing this with some of my coworkers, however, over time I've come to understand it for what it is: There are many occasions in coding where I do not find it necessary to type quickly. I can type at the speed a typical person speaks -- and accurately -- and without effort (including symbols, numbers and other elements that are uncommon in spoken language but common in programming languages). I have never met an effective developer who is a "hunt and peck" typist, but I've met plenty that land in around 30 wpm.
The distinction, I think, lies in how much effort it takes our 30 wpm individual to produce 30 wpm. Touch-typing (which I define as being able to type without looking at or for the key you're looking to hit) means not having to actively "think" when I type. I know where the keys are by instinct/muscle memory. I can keep my eyes on the screen, or on my hand-written "napkin note", or on my white-board (and often a mix of the three) and transfer that information to implementation without perceivable interruption.
Like it or not, the keyboard is a bit of a tool of the trade. That doesn't mean you have to be a perfect typist (I don't use my pinkies to hit the letter "p", and until I purchased a split keyboard, I always reached with my left for the "y"), but a reasonable analogy would be one of a chef who can't properly handle a knife. Successful chefs don't always cut the way you're taught at the CIA (or wherever), but they handle the knife with precision and accuracy (and without effort or injury). They don't have to think about it, they just know what the finished ingredient is going to look like when their hands are done with the motions.
For example someone with a slow southern draw to their speech, relative to the listener, is often assumed less intelligent.
I couldn't resist responding to this one: I remember having a calculus teacher with a serious Southern drawl and I recall thinking he was very unintelligent. It was an error in judgment because I could barely understand him in a lecture setting and struggled in his class as a result (this was remedied by taking advantage of office hours and tutors). After a while I got used to it and it had a sort of accidental side-effect. I had to actively listen to understand him which resulted in my actively paying attention. He was a brilliant individual, and a gifted instructor (as well as a patient one ... willing to explain things one-on-one with a student (me) who was struggling at the time). Maybe teaching with a serious southern drawl in a northern state made him less effective, or maybe not. I'm not sure. Food for thought.
This is yet another "different strokes for different folks" scenario, though I love the irony of Atwood not taking other programmers seriously considering how often he gets reeducated by Spolsky on their podcast.
Mac keyboards are not designed for touch typists like me. There is no contour to the keys, they are flat and too large and make your hand move too far. They are also not sufficiently actuated, as Atwood points out in this post. They're made for people who hunt and peck and mash the keys using their biceps instead of their fingers. Since that's not me, I hate them. They have an "iffy" actuation instead of a decisive one.
They'll take my IBM Model M and Unicomp when they pry them from my cold, dead, fingers.
I used to be in your camp (started with the original Microswitch MIT-AI Lab keyboards decades ago, which are the best mechanical keyboards ever made, bar none), but I've become very fond of the thin Apple keyboards (and Apple laptop keyboard), which I find quite comfortable for fast typing.
The main thing is the short throw and light touch needed to produce letters with less finger movement and strain. (Just the opposite of what you posit with your biceps comment.)
When I'm peaking, I can hit around 80wpm (but not prolonged, at which point pain sets in), and I've got nothing but good things to say about the Mac chiclet keyboards.
I think the thing that makes me -not- hate them is that there's a solid banging sensation at the bottom of the pressing motion, as opposed to the mushy feel I've gotten from my Windows laptops in the past.
---
+1 to jfb's recommendation for Kinesis Advantage. Their ergonomic designs are well-made and durable. (My first lasted seven years; still on my second.)
Doesn't hurt that it gets a lot of attention. Sort of like a sports car for your fingers. :)
I have one of these at work. I switched from the Ergo 4000 to this, and I like it quite a bit. (There's a Mac version, too.) No idea whether it's a crappy keyboard by Atwood's standards.
Beware: there are trade-offs. For the Mac keyboard, you'll want to map Caps Lock -> Ctrl. I don't know what's optimal for the PC keyboard; I run Linux and don't use the Windows key.
Also, neither has a numeric keypad. There's a Numlock key, a la laptop keyboards. I don't miss it but some people do swear by them.
I'm assuming you've also ruled out Kinesis. :) I'm too scared to splurge on one but I've heard they're fantastic.
Anyone know why we see so few mechanical ergos? I would think keyboard snobs would be wary of RSI...
No idea why there aren't many mechanical ergonomic boards, though. I'm actually surprised by the extent to which people type on regular keyboards.
That mapping alone makes learning Emacs bindings worth it. Most editors can be configured to honor them.
I wrote a post about it recently: http://semmyfun.blogspot.com/2010/10/my-config-secrets.html
Why would anyone want to type on a touchscreen the same way he used to do on a keyboard?
I am actually thinking to make an ide for the ipad that eliminates typing of letters one by one. Getting your code into the machine should have much more freedom, than stooping in front of a keyboard and typing each word and symbol after another. There must be some next level ui to autocomplete/typing in the world of multitouch.
My problem with touchscreen typing isn't so much related to how many WORDS I can type in a given time, but rather the annoyingness of the modality of the virtual keyboards combined with unintuitive chording for things like standard keyboard shift, ctrl, etc. (I realize the better virtual keyboards do have 'solutions' for the chording issues but I've tried them and found them all severely lacking).
Having to switch modes to do symbols, numbers, etc, is a real flow-breaker and ultimately means that while I can type informal texts and emails fine on a touchscreen, I find it excruciating to type mostly-grammatically correct English on them. I wouldn't even attempt to code on one for similar reasons.
(quick iPad tips that are a huge help: swipe from right hand number key upwards to the exclamation/comma key to type " ; swipe from the right hand shift key to the question mark/period key to type a period)
but what interested me most was the thoughts on how using touchscreen devices really affects input patterns. I have an iPod Touch that I often use to surf the web... usually Hacker News in Opera Mini in fact. I can type fairly fast on the device as well... I have timed myself at 80wpm vs 120wpm on my normal keyboard. From time to time I have even used it to type serious things, such as a few page long history paper. It is never pleasent though. It feels like an absolute chore of utter concentration to type fast on the touchscreen keyboard. It's convinient enough to type a few short sentences here and there, but whenever I go type anything lengthy I cringe at the fact that I have to type there. I cannot imagine having something like the iPhone as my primary phone because of how much texting that I do (I chose my non-smartphone simply for having the best possible keyboard). I really do wonder how that will affect how people think of data.. if we move more and more to devices where text input just isn't as nice as on a keyboard, such as iPads and phones like the Droid X and iPhone, for our computing needs, are we going to be less likely to do serious interaction?
I do think it might be interesting to allow the word prediction to be system wide on desktops / portables.
How fast do you mean?
He produced code of quality on par with the rest of the team, and I never thought of him as having a final-product throughput less than the rest of us [who could type faster].
It's true that you can't hunt and peck and be even just a mediocre pianist, but performing music necessitates keeping tempo -- you must actuate your instrument at the right time, and poor mechanical skill on your part has direct and significant impact on the quality of the music. There is no such analogous requirement in coding, other than perhaps deadlines -- but that is obviously on an entirely different scale (no pun intended).
Anyway, Topre = love, no matter which one you get.
(Oh, and one thing... modern mechanical keyboards, Topre or otherwise, are nothing like those Model Ms from 80s. The Topres have finger-saving 35/45/55g variable weighting. The Model M actuation pressure is over 80g!)
Still, it's worth the trade-off for me, because I find it so comfortable to type on. I bought a Mead 5 subject notebook for meetings.
I work from home, too, though. I'm sure if I worked in a shared office space, my co-workers would be ready to kill me... but then again, on the plus side, due to its mass and solid construction, the Model M is probably a viable weapon for self-defense, and would likely still work just fine afterward.
After about a month of using the Das Keyboard I started getting some RSI issue which led to me starting the process of switching over to a Kinesis Advantage (the initial learning curve for this keyboard sucks). I really really wish that the Kinesis had level of tactile feedback closer to that of a Model M or Das Keyboard.
Before switching to those, I experienced several problems to my hands and wrists, pain etc.; now the Unicomp is my main keyboard and they vanished. It is really a great piece of equipment.
I used to have a Logitech G15 but that was really more for the cool factor rather than actually having a use for the LCD display (although I really do miss having a button I can press to change between speaker/headphone mode for my sound card without having to dig into Window's audio settings menu every time I plug in or unplug my headphones).
So either you are simply genetically not good typing, so even if you typed a lot, and you are a good programmer, you are still a bad typist, or you did not typed enough and perhaps did not programmed enough to be a good programmer.
Exceptions exist but I think the final possibility of being very good at programming with little programming activity is very unusual and strange.
I don't feel like I will be way more productive even if I reach 100 or more WPM as thinking usually takes more time than typing (this goes for both programming activities and writing documentation, emails etc).
Moreover, as I'm not addicted to some specific keyboard I feel quite comfortable at any desk with any keyboard or laptop and I don't have to carry my keyboard everywhere I go (which seems quite cumbersome).
They have Control where God Intended It To Be (with the "Unix layout" option), a nice stack of keys to the left and the overall RT-PC layout we use today. X3701A-UNIX is the part#
I also find the 122-key IBM layout intriguing. Unicomp makes one http://pckeyboards.stores.yahoo.net/122keyterkey.html
Those, I think, are the only ones I would consider to replace my obsolete beige Microsoft Natural keyboard.
Those and a more modern take on the Space Cadet, but nobody seems to be doing that.
Don't say that. Those keyboards are great. I am thinking of buying a couple in case Larry decides to ax the whole line just because its sheer coolness makes their RDBMS look so meh...
Now, seriously, the added keys are useful (if you can make them do something), like the 122-key I also mentioned. And there is also an element of nostalgia for the golden age of the Sun workstation.
Well, how was it during all those decades when TVs were ubiquitous but PCs were not?
Pretty bad. Cf. http://en.wikipedia.org/wiki/Four_Arguments_for_the_Eliminat...
Finally, the ps/2 port gave in to excessive wear, and I switched it to a deck. Still have it in my old room, owning a piece from ancient history :)
If it was the ps/2 port on your computer, you can get a ps/2->usb adapter for around $10.
I use a Model M Spacesaver (basically identical to the one in your link, minus the number pad) built in 1992 as my go-to keyboard.
You'll save time when programming, but also when you create the design/requirement/test documents, the help file, the web pages, your blog, all your e-mails, your twitter messages, your IM and Facebook messages, and of course your comments on Hacker News :-)
If you don't touch type, give yourself a good kick in the butt and start now !!!!
An hour a day for a few weeks and you'll save time every time you write something for the rest of your life ...
Really an amazing one, not sure what type of keyboards it is, but happy with the experience.
I've also never really liked the apple keyboards. It's nice to have some contour to your keys instead of just flat.
Key layout is the thing that kills a keyboard for me more than anything. I've brought home a few keyboards just to find out when I was unwrapping it that the Insert and Delete key rows are goofy, or the arrow keys are all messed up.
I want as little key travel as possible. Typing on a desktop keyboard is slow and tiring.