How I learned :code, through: :music_teaching

Part 3: Learning a new instrument and finding your way!

As I’ve continued with my journey to learn code, it was no secret to me that I would need many tools in my tool-kit before I could consider myself a programmer. In fact, as I confidently made my way through Ruby and Rails, I was then confronted with an entirely new language; Javascript.

Coming from one language to another is a big stepping stone all programmers need to jump to in order to get a full mastery of how the internet/web apps work together. To me, this was just like learning a new instrument. Some things are quite similar, and others will make you want to rip your hair out, but it’s all part of the fun!

I’m a brass player and my main instrument is the trombone. The trombone works with a tuning slide/the over-tone series to produce different pitches. While it lacks valves/keys like the Euphonium or the Tuba, it can still produce the same pitches if you know where to put your slide. Just like how even though Ruby and Javascript are different languages, they can work off of and produce the same information.

Take that, woodwinds!

But how do you even approach coming from an instrument like the trombone and transitioning to another like the flute? My teaching background and a ton of other research suggests a common principle: find out how you learn and learn that way.

Howard Gardner’s theory of multiple intelligences states that we all learn differently. It’s unfortunate that there isn’t such a cut/copy way to learn something new, but figuring out the best way you learn will help you learn well…anything! Plus, the world would be way less creative if we were all the same type of learner.

Where do you fit in?

How do these translate to learning something new? It’s tough to find ways where kinesthetics could help you learn code, but don’t we use our fingers? Isn’t muscle memory a thing? If you’ve ever tried to play the guitar, you’ll know that the F chord is the hardest to master for beginners. When it comes to both learning the guitar and a new coding language you’ll find they have a common factor: practice, practice, practice!

Let’s break down the different types of intelligences and quickly relate them to how we can use them to learn a new coding language.

Naturalist: Naturalist thinking relates what we’re learning to the world around us. Doesn’t that sound a lot like Object Orientation and how we try to replicate real world objects? Coding always does its best to represent the real world. How can you relate the properties of the language you’re learning with the real world?

Musical: To me, music and coding go hand in hand. There’s so much in music that we can relate with coding. For an example, ‘call and response’ music is when a leader makes a call, and the ensemble makes a response. This happens a lot in jazz music. It also happens every time a user makes a request to a server. Check out some of the other ways I relate coding to music in my other blogs.

Bodily/Kinesthetic: I gave an example above about how learning the guitar and a new language are similar due to the muscle memory you’ll need to remember certain coding conventions/finger positions. You could also bring this into the world of track and field. A long jumper practices their steps before jumping so they don’t foul out. A coder practices their conventions so they don’t get errors.

Logical/Mathematical: Somewhat self explanatory, as logic runs a large part of coding. However, we can think of this as the scientific method approach. Testing hypothesis and retesting results is all part of coding. It’s a corner stone in our debugging process, too! Does this new language work the way as this other one? Let’s see what happens!

Interpersonal: Thinking interpersonally when learning new code will put you in the shoes of your users. This will help you determine what sorts of functionality you might want your projects to have. It will also allow you to compare the user experiences while writing in different languages.

Intrapersonal: Thinking inward. Understanding the types of conventions you like to use and seeing how the new language you’re working in handles them.

Linguistic: Compare the different syntaxes of a known and unknown language and figuring out the best way to express your code so it’s a good experience for the users and an easy to debug experience for other coders that might handle your code.

Spatial: This one is a bit more abstract. Because our code exists in a two dimensional plane, it’s tough to see how it would work in a 3D space. Spatial thinking could help your mind’s eye organize your code. Thinking along the lines of, “I know this language does this, and I want my result to be like this,” you can get an idea of what you want things to do beforehand. When designing a website, drawing out the formats of your pages and how you want the page to look is also spatial thinking. Getting an idea of where your new coding language fits into your workflow will help you create better functionality.

Remember, as humans, we all have different ranges of each one of these different types of intelligences. You might find yourself only looking at things through a natural lens, but have trouble when it comes to something musical. Just because you face a speed-bump doesn’t mean that you’re incapable of learning, it just means that maybe you need to step out of your comfort zone and try to learn things in a new way. For example, one of my favorite things to do when my band couldn’t follow a certain tempo was to have them stand up and march to my tempo while singing their parts. The combination of kinesthetic learning and musical learning helped tie the rhythm to the physical pace of the music.

Try combining the different types of learning while learning new code. Give yourself a hypothesis and visualize what you’d like the code to look like and how it will function. Having trouble with some linguistic syntax or an acronym? Make a little song about it to help you remember! Constantly challenge your brain to learn in new ways; it will help you develop a workflow that works with how you learn best.

REMEMBER: The greatest common factor with learning a new instrument and learning a new piece of code is to practice. You can’t achieve fluency without it!

Software Engineering Graduate from Flatiron School. Former expatriate and music teacher.