I’ve returned to piano lessons after a 30-year gap, and I’m struck by the challenges of learning, whether for fun or work.

Piano - public domain - https://commons.wikimedia.org/wiki/File:Keyboard_of_grand_piano_-_Steinway_%26_Sons_(Hamburg_factory).jpg

  1. Foundations help. I was never headed for piano stardom, but I was lucky to have teachers who knew that foundations and fundamentals are important for everybody. Similarly in software: I've found it important to focus early on the core of a topic, then branch out to follow my interests and needs. I once visited a team of about 15 programmers who were a year or two into using C++, but had all missed the chapter about freeing memory. They only learned that this mattered when they started "final" testing with production-sized data, and found the system kept crashing. It took them months to fix.

    When it comes to learning, a weak foundation
    can cost you dearly. [Tweet this]

  2. Related experience counts.While I hadn't had piano lessons in a long while, I have attended occasional dulcimer workshops in the last five years. Returning to piano, I have a much steadier rhythm than I did as a younger player.

    In software, much that you know about languages, architecture, teamwork, patterns, and so on transfers fairly well. Knowing Java doesn't instantly make you a C# programmer, but it gives you a big head start.

  3. Woodshedding works. Woodshedding is practicing intently, not practicing by dabbling. You can't just slop through a tricky passage and hope for the best. Instead, you slow down or leave out notes until you can play it perfectly, then add notes or speed until it's up to full glory.

    With programming exercises, I'm always amazed when someone says "That kata? I already did it." I find I'm still learning new things even doing the same exercise a dozen times or more.

    It's fun to learn new things, but even simple problems warrant repeated study. [Tweet this]

  4. Mix short- and long-term goals. I practice scales, and I learn from them, but I wouldn't take lessons just for that. I want to learn songs, and how to improvise jazz. The short term supports the long term.

    In development, we often struggle with the yak-shaving needed to get things started. There's a reason "Hello, World" is one of the most important programs: it's a basic step on the way to the real work. It's not the long-term goal, but it's a good start.

  5. Schedule regular practice. I practice piano daily when I'm home. A few minutes each day beats by far a couple hours once in a week.

    For practicing software development, I sometimes read or program in the evening, but I also schedule a weekly meeting - just for myself - for practice. Study is important but not usually urgent; if I don't schedule an explicit time, the day-to-day work can drown it out.

    Study is important but not usually urgent. Without regular practice, learning is only half as valuable. [Tweet this]

Mike Hill (@GeePawHill) pointed me to this great quote from Pablo Casals: “When Casals (then age 93) was asked why he continued to practice the cello three hours a day, he replied, ‘I’m beginning to notice some improvement.’”

With both music and software development, there’s always something to learn. You can never master everything. It’s normal to feel uncentered while you learn something new, but regular study and practice keep you learning well.

Thanks to Alex Freire, Chris Freeman, Joshua Kerievsky, Mike Hill, and Woody Zuill for suggestions and encouragement.