I have been learning touch typing for a while now. It is a valuable endeavor. The practice entails flexibility, and by reflecting on my behavior, I am witnessing patterns and extracting lessons. The lessons won’t apply everywhere. So, I am trying to identify their usefulness, as well as the context where each brings the most benefit.
A tool could be described as a continuum of its users when it is being used appropriately. The fluency of use facilitates the task and leaves room for creativity in the performance. Likewise, each problem the user faces with the tool hinders his ability to focus deeply on the outcome. He might spend most of his time struggling with the tool instead of solving the problem.
Activities, as rigid as typing, could benefit from this view of tooling. When shaped as a tool, typing moves expressions from the mind to the computer. Mastering its intricacies makes the translation process straightforward and eliminates wasted time and additional energy. This turns out to be quite useful to me. I was working toward internalizing habits such as writing and taking notes while reading. Typing them quickly has been helping me to keep focus and avoid breaking up my line of thought.
Another lesson I learned from touch typing is how ‘Less is more’ works in the real world. The less I focus on speed and put more effort into pressing the right keys, the faster I type. This translates very well to the world of programming. When I rush, I make decisions that turn out to be a bad fit in the system as a whole.
As a programmer, I type far less code as I acquire more experience and learn new approaches to dealing with problems. Optimizing for typing speed is not a reasonable idea, even when I am late in the schedule. However, typing fast is nice for running experiments and checking hypotheses. If the code is not simple, it is hard to put it all in my mind while changing it. I should validate the assumptions I am making about the behavior of the system soon. This is useful when I am exploring a new code base or when I work on a code base I never worked on before.
I find aspects of the actual code that I have missed only late. I can spot fallacies early when I make hypotheses about the existing code and test them before going on with a series of thoughts. Typing fast here helps me write automated checks, knowing that I will throw away some lines of code, if not most of them, in the pursuit of learning.
By the way, it is not unusual for me to rewrite or remove lines of code I wrote. There is a lot of value in that if we take away the evasive belief that effort is correlated with progress.