There is an old joke, very popular in performing circles. A tourist shows up in New York City for the first time. He wants to see all the sites. The next one on his list is Carnegie Hall, and as is wont for a tourist in New York City, he gets lost. Finally, he stops someone on the street and says “Excuse me, can you tell me how to get to Carnegie Hall?” The New Yorker looks at him and says “Practice Baby, Practice!”
There is a lot of truth to this, and it applies just as much to software as it does to music. It may seem like the media are different, but I would say the are far more similar than one might have expected. The only way to create a highly flexible, well toned set of skills is to practice them. If you want to reach the very pinnacle of your craft, doing it at work is just not enough. You need to practice on your own. Now there are some basic truths about practicing, as well as some challenges or even myths, so lets explore the art of practicing further.
The first truth about practicing is that sometimes it just isn’t very fun. You need to work on things that are kinda boring some times. Wynton Marsalis once created an excellent
series on music education, and the chapter on practicing was titled “Tackling the Monster”. He goes into a lot of detail on not just why practicing is important, but how we can make it fun too. This is actually even easier to do with software. We can practice while still making something cool. Joining an open source project is a great way to get some practice in while still creating value. If you are a java or python programmer, you can try coding bat (www.codingbat.com). It is a site full of fun little programming problems. These aren’t massive problems, just quick exercises. Think of them as etudes. For instance, perhaps you want to solve the “No Triples” problem. Coding bat will give you a small description of the problem. In this case, given an array of ints, we’ll say that a triple is a value appearing 3 times in a row in the array. Return true if the array does not contain any triples. Then you get a series of tests, followed by a text box where you write the code to make the tests pass. This is simple, takes just a few minutes, and gives you the satisfaction of a green bar at the end.
Sometimes, the whole ensemble needs to practice together. While part of the challenge is to be at the best performance level individually, we also need to work together as a team. This takes practice, and can’t be left just for the performances. If we look on our production code as our performance, it is more than a little unprofessional to do our practicing in front of the audience.
So what can we do? I like to go to, or perhaps conduct, coding dojos. The coding dojo is the brainchild of Laurent Bossavit and Emmanuel Gaillot. The idea is to provide an environment where we can solve basic programming problems together. The problems are presented as katas. Each kata is meant to exercise a part of the programming function, in essence building muscle memory. My favorite approach is the RandoriKata style, where a pair will solve a problem together, with everyone else in the room offering suggestions and advice. Not only are we learning how to solve problems, perhaps practicing new techniques, but we are also getting more comfortable with the open workspace and common code ownership.
Now dojos get very very loud. When I run a dojo, I usually stop after a little while and ask everyone if they noticed how noisy it was, and so far I have not had a single response to the affirmative. I mention this because it is a great response to folks who say an open environment doesn’t allow for the quiet atmosphere that helps innovators think. The truth is, while you are engaged in a problem that interests you, the rest of the noise becomes inconsequential. We are learning, we are practicing, but we are having fun at the same time. And that is important.
Which leads me to my final point: professionalism. This transcends any metaphor of music or martial arts. It is time that we programmers own up to the fact that we are professionals. As such, we have a responsibility to act in the highest interests of not just our selves, but our customers and the community of programmers that make up our profession. Its no longer enough to say “I’m the best hacker around” or to blame any issues on the “Lusers”. The entire world economy depends on software, and many lives depend on us not being willing to just slap something together. While in a professional context that includes making sure our customer gets what they need as well as what they want, there is more. True professionals practice. They practice at home. They find new ways to practice and new ways to become better at their craft, without waiting for the employer to offer a course, and without requiring anyone else to pay for it. We take our profession seriously, and we care about the state of our craft. So, lets get practicing. Next stop, Carnegie Hall!