My New Year's resolution for this year is simple: practice.
Tim recently posted an editors list conversation about practice that I started. It's time to push forward into the things I've been talking about.
The main things I plan to practice are skills that I had but have let decay: trumpet and programming. I'm not aiming for mastery in either one, just for competence.
I'm returning to the trumpet after 24 years, and it's totally obvious that the path forward involves playing over and over, first to redevelop muscles and then to relearn technique. As much fun as it is to read about trumpet playing, there simply isn't any substitute for playing early and often, preferably with guidance.
Programming is a very different world. There aren't exactly exercise books, and the value of repetition is different. Programmers strive to eliminate repetitive code, and it's hard to imagine sitting down to solve the same problem twenty-five times until the solution is memorized. Valuable repetition in programming comes from solving similar problems in different contexts, and from growing more and more familiar with the environments you use. Very few people set out to memorize an API, but it often happens along the way.
I never left programming the way I left trumpet. I simply stopped playing trumpet after eighth grade. I've gone back and forth with programming since sixth grade, getting totally into it for a year or two at a time and then departing out of frustration, distraction, or the need to do something else. At O'Reilly, I'm exposed to programming constantly - I edit and write computer books after all! - but editorial is a long ways from actually programming. Even writing books about programming is a seriously meta- activity, one that requires more attention on the communications than on the code. (The code has to be right, but - though this may depend on the audience - the explanations have to do a lot more than the code.) My work isn't programming practice.
When I first started at O'Reilly, I was writing Java-based XML code on a regular basis. Most of it was to demonstrate particular points or to address specific problems I had in dealing with DocBook, though it did get intricate at times. Eventually, though, the appeal of doing text-processing in Java (was I really that crazy?) faded, and I just plain had lots of other work to do, so I went about three years without programming - except for occasional dabbling in Ruby and some small bits of Microsoft Access.
I have a clear path forward for practicing trumpet - it's fairly clear what skills I need to learn, and how to acquire them. On the programming side, it's far less clear what "practice" will mean. My current expectation is that I'll continue to build what I call "Rails micro-applications", simple web applications that address a small set of needs. As they accumulate and maybe even integrate, I'll be getting the practice I need to settle deeper into Rails and move forward.
I don't expect to become a master at either of these things. Frankly, I think that "mastery" is usually the wrong goal, a strange habit in our culture of setting ourselves up to fail. Mastery happens, but we need to remember - and value - the intermediate steps. Most of us will never be the Outliers Malcolm Gladwell describes as "The Story of Success".
The opposite of the "success" he describes, though, isn't failure. It includes a wide range of competencies, of people getting things done, without necessarily hitting "the big-time". You don't have to become an outlier to be a success - and you shouldn't let that get in the way of practicing.