Sunday, January 14, 2007

Practice

A colleague at work posted a link to this post by Steven Yegge. It was describing that the best programmers would practice the art and skill of programming. In it he drew a parallel to classical musicians, who have been developing methods of practicing music over hundreds of years. The two disciplines appear related, when approaching programming or musicianship as a craft.

I'll probably write again about this post (it's almost two years old now - must be some kind of blog-record, referring to a two-year-old-post), but I really wanted to say something about one of the comments there. The commenter indicated that he was learning the piano and that he found debate over the usefulness of Hanon or Czerny. These are books that work on technique and I am familiar with the Hanon especially. Hanon describes a series of exercises around each of the scales. From the comment:

seems that practicing techniques are still fairly hotly debated even now; some people maintain that non-musical drills such as those by Hanon and Czerny are worthless; it's better to use, say, Bach Two Part Inventions or Chopin Etudes, because technique should never be divorced from music.
So what is my problem with this? It really gets me when people state that "technique should never be divorced from X" where X is sport, music, programming, etc. There are several parallels to this that I personally have encountered, but I'll stick with the piano references first.

The most galling thing about substituting Bach for Hanon is that it makes Bach into non-music. So many people that Bach is very regimented - that there is one true way and that way proceeds in an orderly fashion. They leave no room for interpretation - they are renouncing that it is music! You might be able to tell that I really liked the Bach that I learned to play, but that is only part of it. Music can be interpreted and presented differently - the musician is part of the process. Bach is very technically demanding, so playing Bach will pay dividends in other music. This is precisely the thing that is being suggested - playing something technically demanding will improve your overall ability. This contradicts the reason to dismiss Hanon. Hanon's exercises are technically demanding, but aren't music (can you say: "Wax on, wax off Daniel-san"?). If they are technically demanding, then using them will improve the part of your playing that doesn't involve the musical interpretation part. Also lets you treat Bach like a piece of music that needs to be worked on and interpreted instead of exercised.

This same argument is made of sports. Let's pick, oh I don't know hockey. The argument illustrated by the commenter translated to hockey would be: don't practice skating, just play scrimmages. Clearly anyone who has tried to play hockey or learn to skate will see the folly in that (or foley). Skating is not something that is done alone while playing hockey - in fact it falls into the background while playing as there are other demands on your attention. However practicing skating in isolation can provide a tremendous boost. The reports I have heard from the power-skating classes that some of my work peers have attended show that they are doing things not related to hockey. Things like jumping over 6 pylons or jumping over pylons while doing a 360 in the air. I rarely find pylons at hockey games, so I'm assuming that the practice of skating and the practice of a game are different.

In sports, this is known as "the fundamentals". There have been times, in hockey, were the fundamentals were not stressed and I believe the professional game suffered. The lack of attention at the lowest levels was a problem. Much the same as the guitar analogies in the referenced material - you can learn to play the guitar without the scales and chords, but there isn't room to grow.

Bringing this back to the original post, I believe that the post is advocating the exercise of technical aspects in isolation. Solving problems, critical thinking, abstract thought, improvisation, pattern recognition - these are all things that help develop programming or software development skills. And I heartily agree.

No comments: