Improving / Improvising

I’m nearly three months in to learning guitar and it’s going awesome. I’m still teaching myself through Yousician but I’m thinking of getting a teacher to help. I’ve also been supplementing their curriculum more and more with something even more important than a teacher: experimentation.

After watching a tonne of videos and reading a tonne of material online, a core message started to emerge: experimenting makes you a better guitar player.

Hmm.

I studied music in school and played the alto saxophone and piano for seven years, and at the same time I was also learning the basics of coding. The parallels between music and programming weren’t always obvious to me, but they definitely exist. For example, I’ve noticed after writing a tonne of blog posts and delivering a bunch of conference talks that a core message of mine has started to emerge: experimenting makes you a better programmer.

Like a lot of sax players, I was really into jazz. I had great teachers and they encouraged me to learn theory and to practice. One of the best skills I learned was how to improvise. To improvise, or improv, is to create music spontaneously, without preparation. But that doesn’t mean just playing random notes willy-nilly, it’s about applying theory to help you manifest an idea in your head into tangible music.

Which sounds a lot like coding. You may have an idea of what you’re going to do, but you’re never sure until you’re done. Circumstances change, your mood changes, the code you write never works the first time, et cetera.

Since picking up the guitar, I’ve been practicing my blues scales. Combined with a twelve-bar blues progression, that’s all the theory you need. But it wasn’t until I found a bunch of backing tracks on YouTube yesterday that I really got into it. They give you a beat and the chord progression to express yourself musically, either through improv or not. Rediscovering how fun it is to spontaneously play has been amazing.

So I wonder: what does a backing track look like in code? Well in music, a backing track provides a rhythm and progression around which you play your melody. I think there’s a strong argument to be made that a backing track in coding is like a framework or library. Take RxSwift or UIKit, frameworks around which you write your code. Without frameworks, building apps would be really hard, just like improv in isolation would be. Not impossible, but difficult.

Some backing tracks are simple, some are complicated. Some repeat themselves a lot, others change constantly. And different backing tracks lend themselves differently to different styles of music.

I’m excited. To learn more guitar, to write more code, and to continue to explore the parallels between two of my favourite forms of expression.


Please submit typo corrections on GitHub