TITLE: Getting Worse in Order to Get Better AUTHOR: Eugene Wallingford DATE: January 15, 2007 11:45 AM DESC: ----- BODY: Tiger Woods drives a ball Tiger Woods recently won the PGA's Player of the Year for the eighth time in his ten-year professional career. Since 1990, no other player has won the award more than twice. He is widely considered the most dominant athlete in any sport in the world -- which is saying a lot when you consider the amazing runs that tennis's Roger Federer and cycling's Lance Armstrong have had during Tiger's own run. Woods is great, but he also stands out for something else: his remarkable efforts to get better. Now, most pros are continually working on the games, trying to improve their skills. Woods has taken this effort to a new level, by completely rebuilding his swing twice during his professional career. Sportswriter Leonard Shapiro describes Woods's most recent reconstruction, back in 2004 and early 2005. In 2004, a lot of commentators thought that Tiger had perhaps peaked, as other players on the Tour had been winning the majors and left him as just another competition. Tiger wasn't striking the ball as well, and his tee shots were errant. He seemed to have gotten worse. But suddenly in 2005, he returned to the top of the leaderboard with a vengeance and had one of the all-time great years in PGA history. You see, while Tiger was seemingly getting worse, he was actually getting better. A golf swing is complex mechanical act. There is very little margin of error between a great shot and a merely good shot. At the top level of golf, the standard deviation is even smaller. When Tiger decided that he had reached a plateau in his game with his current swing, he knew that he had to develop an entirely new swing. And while he was building that new swing, using it on every shot for nearly eighteen months, he performed worse than he had with the old swing. Only after all that repetition, feedback, and adjustment did he have the swing he needed to regain his peak. And his new peak was even higher than the old one. This progression from plateau to valley to new peak is not unique to Tiger or to golf swings. Any complex skill that depends on muscle memory requires the sort of repetition and feedback that usually results in degraded performance during the learning phase. The key to improvement in this phase is patience. Learning a new skill takes time, while we train our brains and bodies to execute their tasks in an accurate, repeatable way. Mental skills, even ones that we carry out with more conscious attention, have this feature. Sometimes, we can make only small incremental improvements from our current skill base, but an effort to learn something radically different can alter our skill base in a qualitative way -- and result in radical improvements in our performance. Many programmers know this. The last couple of years, a common new year meme among bloggers has been to learn a new language. Often the language is something very different from their daily tools of Java and XML and C. Haskell, Ruby, Scheme, and Smalltalk seem to show up on peoples' lists frequently precisely because they are so different. They offer the promise of a radical improvement in skill because to master them requires looking at problems and solutions in a radically different. You can't speak fluid Haskell or Scheme without coming to grips with a functional mindset. Even if list comprehensions, continuations, and tail recursion are not part of the programming language you use in your day job, understanding them can help you use that language in a new way. And who knows, those features may ultimately make their way into your day job's language -- either this one, or the next one. Martin Fowler writes about his own experience crossing the improvement ravine on the way to new mastery. He even quotes Gerald Weinberg, whom I've mentioned occasionally since I first began blogging. Martin points out a couple of key insights. One is that sometimes the new thing doesn't work, at least for you. Worse, there is a Halting Problem complicating matters: you can't be sure if the technique has failed for you or if you just need to stick with it a little longer. The best hope for circumventing this problem is to have a good teacher working with you, whether in a classroom or one one one. Tiger had his coach, Hank Haney, to help him assess the state of his swing and decide to keep going, even during the darkest days of 2004. Working with colleagues or a trusted friend can also serve this purpose. I think another key to this process is a sort of courage. It's hard to be patient while you're failing, or while you're struggling with a new idea. In this context, your teacher coach, or friend plays the important role of support system, encouraging you to stick with the process. As with almost anything, doing it over and over helps us to have the courage we need. Tiger's 2004 rebuild was the second such publicized episode of his career, and I'm guessing that having succeeded in the first helped him to remain steadfast during the second. One requires less courage as one feels less fear. But I think that I will always feel a real fear anytime I step way outside my expertise in an effort to get better. Maybe even a great one such as Tiger does, too. Courage will always play a role. This notion of getting worse for a while in order to get better is on my mind right now because I have just begun a new semester in which I will try to teach Scheme and functional programming to a bunch of students who probably feel pretty comfortable in their imperative programming skills with Java, C++, and Ada. I have to help them see that mastering such a different new language, and especially style of programming, will require that they feel awkward for a while. The tried-and-true syntax, operators, idioms, and patterns no longer seem to work. That is scary. But it's worth going through this scary phase, practicing "the real thing" as much as they can. With practice and time, they will soon learn the new syntax, master the new operators, appreciate the new idioms and develop some of their own, and finally discover the new patterns that will make them better programmers than they were before. My memory is always drawn back to two former students in particular who approached this in a Tiger-like fashion. They went home every night for three weeks or so and just tried to write good functional programs in Scheme. They read my examples and those from the textbook; they experimented with small modifications and then large ones, eventually trying to write whole programs. For a while this was painful, because their programs broke and my evaluation of their homework didn't result in the easy As to which they had become accustomed. But suddenly -- or so it seemed -- they got it. They were excellent functional programmers. The rest of their Programming Languages course went smoothly, as they could focus on the language concepts without having to worry about whether they could make Scheme work for them. If the greatest golfer in the world, the most dominant athlete of a generation, can take the time to get worse for a while in order to get better, I think we all can. But do we have the patience and courage to take the chance and stay the course? And do we have the teachers and coaches who can help us along the way? -----