While cool and useful if you have to write a lot quickly, I don't think it is very helpful for programming - typing speed is just not the limiting factor except in some rare cases.
My feeling is that the "tax" of typing slows down the flow of new ideas in the same way round-trip latency places an upper limit on bandwidth. By this reasoning I switched to Colemak on a Kinesis keyboard about a year ago and have been happy with my choice despite the initial learning costs. Ergonomics and a stable home row position are worthwhile benefits. I would like to try Steno if it means I can spend less time typing or thinking about typing so I can spend more time building stuff.
@danbruc, to supplement and extend pgt's response:
I'm a touch-typist, and when on some rare occasions I have to hunt-and-peck while programming (e.g. a fingercut or something), I'm absolutely and totally frustrated on how horribly slooooooow it is; kinda like being handicapped; imagine e.g. being able to use only your one hand to type; or, even better - having to type with your nose! (yes, nose, really!). Now, knowing that, I imagine that being able to type with this amazing steno speed, one feels a similar level of improvement vs. touch-typing.
So, that wasn't a straight answer to your concern, but given that I do feel like described above, I believe it shows that it somehow proves important to me as a programmer. Ah, also, now I remembered, there's the "classical" article on this by Jeff Atwood, which is worth a read: http://blog.codinghorror.com/we-are-typists-first-programmer...
edit: Also, now that I thought of it somewhat more, there are two additional benefits: One is, that typing faster leaves me with more time to do the actual thinking. Second one is, that makes my code more "lightweight" for me, in that it's somewhat easier to delete/iterate/refactor stuff, knowing subconsciously that I can quite easily type something similar ("other variant") fairly quickly.
What does it typically look like? One hour thinking, five minutes typing? Yes, sometimes you have a sudden idea or insight and can't type it out as quickly as you want, but that is not the common case.
Yeah, people's strange fetish with programming really fast (e.g. "I use Vi because I can type faster in it, a mouse slows me down!") is completely out of touch with how I program professionally day to day.
For most code that I write there is a modicum of research (e.g. online docs, requirements, etc), some time spent thinking about how it should be laid out, and a whole lot of frameworking (e.g. putting the code into the agreed upon structures or interacting with the structures, which is often an internal research stage also).
The only thing I can imagine trying to write really really fast, is someone reproducing from memory various Computer Science 101 algorithms for funzies (you'd always use standard libraries in prod' anyway). Aside from that programming speed seems the opposite of how programming works.
Yet it is constantly talked out (e.g. "I purchased a $150 mechanical keyboard to type code better," "I use Vi/emacs because a mouse/IDE slows me down," "I code on the terminal because it has less distractions," etc).
>"I use Vi because I can type faster in it, a mouse slows me down!"
I use vim (or emacs) because the regex search/replace and macros mean that when I need to edit the same thing 5,000 times in a data file I don't need to fire someone in India for a week to hunt them down.
Typing speed has very little to do with it, but avoiding the mind numbing tedium of going from underscore variable names to CamelCase or vise versa is a godsend.
>I code on the terminal because it has less distractions,
I code on the terminal because when I use tmux I can have the equivalent of 30 IDE windows open each looking at a snippet of code I need. Until I have have a monitor wall I can carry around with me that can display a few dozen different windows there really is no comparison.
It's not about speed, it's about keeping in your head what you're doing. For example, there is a function call in a source file to fn_ive_never_seen(), in an IDE the best you can hope for is for it to dig up where it was defined, and maybe the header file if it's some C type language.
I can open a new window on the terminal, grep the whole source base for this function, see where it is used, where it is defined and with sed edit all those definition to take an extra variable I need by just stringing together a few commands in yet another window.
Again, it's not about speed, it's about getting a computer, which is very good at being pedantic, to make sure that every last mention of something is changed the way you want it to be changed.
I thought the same thing until I learned Vim. It's not about typing faster, it's about being able to make changes almost as fast as you think them up, and staying in flow instead of getting bored and frustrated.
Writing raw code makes up a TINY proportion of what I do professionally day to day. Writing long code in a single stretch (e.g. without researching, checking other parts of the codebase) almost never ever happens (because code isn't created in a vacuum).
Also I am well versed on Vi's functionality. I choose to use an IDE.
I thought people bought mechanical keyboards because they were easier on the fingers? The keys often require less activation and you can prevent the bottoming out you get with the cheap keyboards.
On the other hand you can say that coding is a complex task, so having any kind of barrier between you and your code is important.
It's like, say, editing in a window which is, say, 8 lines high. Sure, most of the time you are only looking at 8 lines at a time, and the time spent switching back and forth when you need more is not the limiting factor. Still, I think this would make you a lot less efficient.
The point of competent typing, and good text editors, is that they reduce the gap between your mind and the code. It's not just about speed. The latency analogy of pgt is a pretty good one.
In my experience, there's much more to 'programming' than typing out new code. Where typing speed becomes an issue is in communicating with people, not machines: trying to have an IM conversation with a non-touch-typist is painful, and when you have emails or documentation to write, it's much more reasonable for typing speed to be the limiting factor.
I don't want such things to be a big chunk of my day, and being able to type quickly helps keep the amount of time I spend doing that to a minimum and lets me get back to coding :).
> ...when you have emails or documentation to write...
I totally agree. Every editor or typing speed article is accompanied by posters claiming that it's not important for programming, and I just have to think that they haven't spent a lot of time working in a team.
Typing and thinking about code is never more than 2/3 of my job. Writing emails, commenting code, creating procedures (e.g., for releasing), documenting our infrastructure... These activities require a bit less thought and are always limited by my typing speed, even with vim and 100+ WPM.
Getting through them slower would mean spending less than half of my time programming, or worse: a pile of undocumented code and systems, and increasing irrelevance in team discussions.
yes, this is something I have been thinking about recently, coping with RSI. It's one thing I like about vim, is the semantic text entry concepts. "Change Word, Delete Inside 's. ", "Select inside this function", etc.
I was wondering about making a custom keyboard for vim actions, and programming it even more with extra macros a la surround.vim
Buttons / actions could also include switching windows, switching to the browser and refreshing, etc.
That's an arse backwards way of trying to counter RSI. It is a series of physical problems that you should address in the physical world (i.e. adjust your damn environment). Rebinding your keyboard is like moving the deck chairs on the Titanic.
What kind of doctor? I think if you read what people have written on the Internet, it's not as simple as just going to a doctor. My understanding is that it could be a problem with your shoulders or back, for example. Here some of the stuff I've been reading:
A friend of mine has significant wrist issues as a result and had to have surgery. They ignored the issues for a long time before it got to that point.
As for doctors, I would go see a specialist like a physiatrist. They can give you a treatment plan and help you adjust your environment and habits to combat the problems.
RSI isn't manifested as one specific problem, it can cause a whole host of issues. So the specific type of doctor you'll need somewhat depends on what it has manifested itself as.
> it's not as simple as just going to a doctor
What exactly is your point? That people should ignore it because it isn't "simple" or that rebinding your keyboard is better than going to a freaking specialist?
Honestly why did you make that post? What are you goals here, to discourage people from seeking treatment? I am really trying to figure it out.
edit: Above post was edited after I posted to add:
> My understanding is that it could be a problem with your shoulders or back, for example. Here some of the stuff I've been reading: <links>
My goal is to get more information than simply "go to a doctor". RSI is not well understood. Most doctors can't tell you more than "if it hurts then stop doing that". So, that tidbit doesn't go far. I've been to a doctor and didn't find it helpful. I've also been checked for carpel tunnel and I don't have it.
Btw, everyone agrees not to ignore the problem. I would think that there are enough people who read hacker news, we might be able to get a little more concrete information.
Yep, I think that's a testament to the fact no one has good answers. You'll see this sort of stuff appearing in other blogs, along with testimonials. The one guy is from Princeton.