I recently decided I want to get better at playing the piano. 30+ years ago, I had some lessons playing the electronic organ, but though I’ve played a few things since on a piano I’ve never taken it seriously enough to do some deliberate practice. That means I’ve played a few songs from sheet music, but haltingly and never practiced enough to get the difficult parts right and the whole song memorised.
So I picked a song (Miami 2017, by Billy Joel, in case you’re interested there’s a great youtube tutorial too) that I’ve always thought sounded great on a piano, and started practicing. Learning the first 8 bars took me two weeks (the intro is faster than I had expected!). The first verse another two. I repeated the same parts again and again, slow and fast, paying particular attention to the things that I found difficult. The second verse is a lot faster, and the challenge there is in the difference in rhythm between the left and right hand.
I’m now far enough along that I can practice the whole song, even if I do practice separate parts of it too, to improve specific harder areas. I’m not fluent yet. That would be if I could do something else at the same time, such as actually sing the song. But I’ll get there. I did have a small handicap while starting this, in that two of my fingers were stuck, a condition called ‘trigger finger’. One was operated (between the intro and the first verse, as it were), the other will be in a few weeks. I tell myself that will really help my playing:-) I certainly didn’t let it stop me from practicing.
In software, practice is rarely as deliberate as in music. Even in school, we rarely practice the same problem twice. Our saving grace is perhaps the sorry fact that many, if not most, projects are rebuilds of older systems, so we at least get some practice attacking a problem from a new perspective. That’s a shame, because practice does work. And there are many interesting things to work on. And it’s never been easier to start: go to http://cyber-dojo.org now, and pick a programming language and problem!
Last week, at the OOP conference in Munich, Kevlin Henney gave a wonderful talk on this subject ‘Get Kata’. And made an important point: it’s not about just going through the motions and creating the same solution twice (though that is a good way to start!). It’s about trying different approaches, and learning to see different aspects of a problem, and different ways of thinking about them. You can do that by trying different languages, or by using different rules (“OK, now a version without any loops!”).
My piano playing is not at that level yet. Once I can give you a honky-tonk version of that song, or an improvised solo for that instrumental section, I’ll be there. For now, I’m building up my skills step-by-step. How about you?