During my school life, I quit my karate lessons within a couple of years or learning and practice. Today if I got into an award confrontation requiring self defense here's how I would defend myself: I would run, as fast as I could. I would run so freaking fast that I wouldn't even look behind. That's how much karate I remember.
On the serious side of life, my reasons for my early interest in martial arts, besides being physical, were also philosophical. Martial Arts, in all it's forms has ideas and concepts which can be borrowed and used for life and software development. This post is about one such concept and if you are a programmer, this post is also about asking a very important question: are you a code samurai?
Martial Art gurus believe that a perfect weapon is one which becomes a seamless extension of the warrior's body and brings him greater reach, humility and grace. On the same line of thought, a perfect warrior is one who can blend himself with the perfect weapon. In other words, in the world of martial arts it is believed that to become a great at a warrior you must pick the great weapon and then reach a stage where the warrior and the weapon become one.
I've often announced that software developers need to turn themselves into warriors and one man armies. If you look at it, your machine is your only weapon against the countless enemies of software development. Yet, I rarely find programmers who are one with their machines. A huge number of programmers on the other hand, are hunting and pecking for keys on their keyboards as they type and fumbling with the mouse as they hunt for points on the screen to click.
I've always said that hitting the window key and typing iexplore is fast. It's faster than reaching out for the mouse and clicking that Internet explorer icon but Jeff Atwood provides a much more compelling example:
Let's assume that we're typing some text into a document of some kind, and we wish to save the document we're working on. (I could argue that the user should never have to explicitly save anything, but humor me.) If it seems ridiculous that the mouse method:
- Take your right hand off the keyboard
- Place your right hand on the mouse
- Mouse over to the File menu
- Click File
- Click Save
- Place your right hand back on the keyboard
Could be measurably faster than the keyboard method:
- Use your left hand to press Control+S
I assure you that you are not alone. Please defer all your righteous indignation for just a moment.
David Allen in his book Getting Things Done: The Art of Stress-Free Productivity, describes his frustration with even the veteran professionals hunting and pecking for keys as they work:
If you're in a large-volume e-mail environment, you'll greatly improve your productivity by increasing your typing speed and using the shortcut keyboard commands for your operating system and your common e-mail software. Too many sophisticated professionals are seriously hamstrung because they still hunt and peck and try to use their mouse too much.
Steve Yegge feels passionately about touch typing so much so that he believes that those who don't touch type might be scarifying a big number of things:
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.
While everyone seems to give a great amount of importance to the keyboard as a powerful way to interface with your machine, Bruce Tognazzini has a different take on the topic:
We’ve done a cool $50 million of R & D on the Apple Human Interface. We discovered, among other things, two pertinent facts:
- Test subjects consistently report that keyboarding is faster than mousing.
- The stopwatch consistently proves mousing is faster than keyboarding.
This contradiction between user-experience and reality apparently forms the basis for many user/developers’ belief that the keyboard is faster.
People new to the mouse find the process of acquiring it every time they want to do anything other than type to be incredibly time-wasting. And therein lies the very advantage of the mouse: it is boring to find it because the two-second search does not require high-level cognitive engagement.
It takes two seconds to decide upon which special-function key to press. Deciding among abstract symbols is a high-level cognitive function. Not only is this decision not boring, the user actually experiences amnesia! Real amnesia! The time-slice spent making the decision simply ceases to exist.
While the keyboard users in this case feels as though they have gained two seconds over the mouse users, the opposite is really the case. Because while the keyboard users have been engaged in a process so fascinating that they have experienced amnesia, the mouse users have been so disengaged that they have been able to continue thinking about the task they are trying to accomplish. They have not had to set their task aside to think about or remember abstract symbols.
Maybe it's not just about the rather controversial the mouse vs. the keyboard argument; or the search of which one is the perfect way to interface with your machine. Maybe it's about using the combined use of the keyboard and the mouse in a way that makes you one with your machine. Irrespective of the input device you are more comfortable with, if you are not completely comfortable with your machine and not moving blazing fast, it shows.
In the world of music and martial arts, they would hardly let you get on the stage before you develop a sense of comfort with the instrument or the weapon. Touch typing and your at speed defines your comfort level at the keyboard and eventually with the machine; if nothing else, it provides a perception of being a power-user to both yourself and the external world.
Nolan Larsen, comments on how powerful perception is in the world of computing:
I came across an interesting example of perception vs. reality while designing a small text editor: When scrolling the text horizontally in a window we would refresh the text by redisplaying each line starting at the top. This resulted in a wave of text rippling down the screen, and many complaints that the screen refresh was too slow. The remedy was to scroll the bits already on screen and then redisplay each line from the top. The second implementation was actually slower than the first because we incurred the overhead of scrolling the bits before we even started to display the new text on the screen. However, the perception was that there was an immense increase in speed. We stuck with the second implementation because it increased the overall satisfaction of the user even though it actually decreased the throughput of the product.
I didn't learn typing formally in a typing class or at school. Computers and software development was love at fist sight for me. Out of my deep passion and love for computers and software development, I spent countless hours at the keyboard which may have brought up my typing speed to a decently high words per minute count without me even having to work consciously for it.
As a matter of fact I had hardly ever measured my typing speed until a few days ago, but my comfort level with the keyboard is high enough to let me touch typing blazing fast with my eyes literally blind folded. If nothing else, it makes me feel good about being able to connect to my laptop and turning it into an extension of myself.
I never thought about any of this cautiously before. I never realized consciously how important being fully comfortable with the input devices was till I happened to work with a gentleman who was fumbling in a confused state of mind between the keyboard and the mouse when we needed to push the prototype-build out really fast with some of the bosses waiting for the build to be pushed out eagerly. To be fair to him his lack of speed didn't delay the build push by more than a few minutes; but having said that, as I watched him hunting, pecking and fumbling, it definitely lowered my confidence and perception of whether he knew what he was doing. That's how important perception is.
Whether you do it for increased productivity or for perception and feel good factor, if you are hunting for keys on the keyboard and fumbling with the mouse you need to do something about it. You might be sending out the perception of being a newbie when you are really a veteran. If you are not one with the weapon do you really expect the world to consider you a good warrior? If you're not one with your computer when you code and work do you expect the world to consider you a good programmer or a code samurai?
Go ahead, blindfold yourself and try typing a couple of pages about your life or your favorite topic in any editor of your choice. If the idea doesn't freak you out and you can actually do that successfully, at a decently acceptable speed that's very close to what you would have achieved with your eyes open, chances are that you're on the track of becoming one with your machine. If not, the sooner you start taking your first steps at becoming really comfortable and fast with your machine, the higher your chances of having a productive life will be. Looking for your mouse? Pecking for they ALT+F4 keys? Or are you one with your machine? I leave you dear reader, with a reality check and wish you best of luck at getting faster and better anyway.