Coding for kids is all the rage these days, but sometimes there's an expectation that learning to code is scientific, rigorous, and static, but that's far from the truth. Coding isn't about memorizing commands, or repetitive muscle memory, it's about a way of thinking, a way to build something creatively using elements in your tool belt. In that way, learning to code is more like learning music than learning math or science.
Coding is Creative
If you listen to rock songs closely these days, you might be surprised to learn that a large number of them are made up of the same basic 4 chords. Yet to the untrained ear, those songs sound vastly different, because of the how the chords are played, the lyrics, the rhythm, and all the other creative elements that make up a song. Coding is no different. While you'll have similar foundational elements like variables, loops, and even design patterns, how the rest of the app is pieced together requires plenty of creativity to bring out its identity. Just like Journey's Don't Stop Believin is based on the same chords as the Beatle's Let It Be, apps like Candy Crush use the same basic coding elements as a completely different application like Facebook. But just like their musical counterparts, applications rely on the creativity of the developer and how the pieces are put together, more than the formulaic elements that form the core.
Coding Has No Pre-Determined Path
Quick, who's a better musician, Yo Yo Ma or Jimi Hendrix? Miles Davis or Jay Z? There's no right answer (just awesome debates!), because they all play different kinds of music. Coding is the same way - there's basics for everyone to learn, but after that, should a student learn Websites? Mobile apps? Data Analytics? Like musicians, coders often are exposed to a number of different styles (i.e., technologies) as they advance, in no particular order. And when they're advanced enough, they may dig deeper into one or another "style". At theCoderSchool we often use a tree as analogy to learning to code - every tree grows differently, but they're all rooted in the same foundation.
"Practice" Is Different - but Just as Important
When students practice music (or sports, or some forms of math and science), it's really about repetition. HOW to do something ("put your fingers here", or "keep your elbow in when you shoot", or "9 x 9 = 81") is usually the easy part. How to do it quickly and smoothly ("play A then G", "keep your shooting form in the game") is often what takes practice. It's the repetition that makes up the practice, which turns into muscle memory.
Coding is vastly different - it's not muscle memory, it's a way of thinking. Unlike music or sports, figuring out HOW to do something (what code to write) is actually the hard part. Once the code is written, repeating it for "practice" doesn't make sense because it already works! Typing it in again won't make it work any better. And the next app may be completely different. Instead, practice is about identifying and reusing patterns of logic, ways of solving a problem (sometimes known as "Design Patterns" in software-speak). Each app built by a student is a new and different problem to solve, with potentially multiple solutions, so the more apps a student builds, the more practice they get thinking in a certain way.
For many students, this can be harder than you might think. With music, tell a student where to put their fingers and they can go home and repeatedly play that chord until they know it by heart. With coding, once a student solves one problem, they're faced with the next, and often have trouble solving it without help until they've practiced solving the problems enough to be able to solve the next problem on their own.
Coding's like Music
While there's a few differences, by and large I would argue that learning to code is much more like learning music or sports than it is like learning science or math. The other big difference is that there's a much bigger shortage of coders than there are of musicians or athletes. So whatcha waiting for? Let's get coding.