Getty Images/iStockphoto
One of the great myths in the technosphere is that musicians make good programmers because music is like math.
I disagree. Music is not enough like math for any relevant or significant skill transfer. A programmer may know how the rules of counterpoint apply to Bach’s Two Part Inventions, but that knowledge won’t help to create an efficient hashing algorithm or an elegant caching algorithm.
However, there is convincing empirical evidence to support the assertion that musicians do, indeed, make good programmers.
There is a correlation between musical ability and the capability to program. Famed musician Thomas Dolby created the rich music format file type. Radiohead guitarist Jonny Greenwood programmed in BASIC as a child. Roger Powell, keyboard player for Todd Rundgren’s band Utopia, was a senior programmer at Apple from 1997 to 2009.
I personally know many musicians who have made a living slinging code. I’ve gone to a few tech conferences that hosted evening festivities in which attendees gathered to jam, using instruments provided by conference sponsors. In fact, I once aspired to be a working musician, only to meander into programming later in life.
Indeed, there seems to be a significant correlation between music and programming, but it has nothing to do with math. It’s about the ability to identify and work with abstract patterns.
Before we get into abstract patterns in software, let’s explore the musical nature of abstract patterns.
Imagine you walk down the street and hear sounds coming out of a window. You identify the sound as the song “Stairway to Heaven” by Led Zeppelin. It’s a popular tune that you’ve heard dozens of times before, so identification is easy.
You continue down the street and pass another window. You hear another sound, only this time it’s the opening from Beethoven’s Fifth Symphony. You’ve heard that opening a dozen times as well, probably since you were in elementary school. The dah-dah-dah-dah is easily identifiable.
This scenario raises two important questions. First, how did you know the sounds were musical and not just noise? It’s because each sound represents an identifiable abstract pattern. Secondly, how did you know that one piece was by Led Zeppelin and the other by Beethoven? These patterns have a consistency that makes them distinguishable from each other.
There is something Led Zeppelin-ish about “Stairway to Heaven” (Editor’s note: One might call it Spirit-ual …), just as there is something Beethoven-ish in the Fifth Symphony. There are patterns in play that enable listeners to attribute the music to the composer. They’re probably very abstract, but you can sense them intuitively. It takes time and experience to pinpoint them.
Unlike other art forms, music is temporal — it unfolds over time. A sculpture will always exist, regardless of who observes it and for how long. Music, on the other hand, is an abstraction confined to the span of time in which it happens. A melody exists only in your head. You need time to process music and appreciate it. When the music stops, it no longer exists.
The notion of abstract patterns is intrinsic to software as well. Once you turn your computer off, the software no longer exists. There is code that describes how the software behaves over time, but that code merely represents the software; it is not the actual software itself.
The analogy is that of a musical score. Beethoven wrote down the bars and stanzas of the Fifth Symphony, but the music isn’t realized — it doesn’t become “music” at all — until the musicians in the orchestra play that score.
It’s the same way with software. Think of your code as the score that the computer executes to realize the software.
Both music and software are abstractions that are realized over time. Musicians, particularly musicians who improvise a lot, are very good at identifying abstract patterns. Jazz musicians, for example, can hear a tune, figure out the underlying chords and then solo against those chords using the tune’s main melody as a foundational constraint. Abstract pattern recognition is key to the endeavor.
Similarly, good programmers have strong pattern recognition skills. They can identify redundant code and invoke the DRY (“don’t repeat yourself”) principle, and they can encapsulate the redundancy into a single reusable function or component. That encapsulation is a description of the abstract pattern.
Architects do the same thing with design patterns. Experienced architects look at an application and identify underlying abstract patterns to reuse. They see redundancies and, hence, can identify the patterns within.
A pattern recognition ability is essential to create software that is efficient and reusable. However, one is not born with the ability to work with abstract patterns; this skill is developed over time. Start with simple patterns, such as code redundancy, and then work your way to more advanced patterns found in system architectures.
The trick to develop the ability to discern abstract patterns is to build up software development experience. For example, the command query responsibility segregation (CQRS) pattern was not a stroke of inspiration from a single architect. Rather, a number of architects created a lot of enterprise software that separated data write behavior from read behavior before the pattern emerged. Eventually, the architects saw the pattern and described it as an abstraction that’s useful to others.
Abstract patterns are a key element to create efficient and reusable software. It takes time and repetition for abstract patterns to appear. Few people understand the concept right off the bat, but once you’ve mastered the skill, you’ll dramatically increase your ability to imagine and execute complex ideas — whether in software or in music.
Application modernization should be at the top of an enterprise’s to-do list for five reasons, including security concerns, …
While CQRS can provide a lot of value when it comes to structuring an event-driven architecture, improper practices can cause …
Naming APIs can be a daunting process, since it requires a balance between simplicity and clarity. JJ Geewax, author of ‘API …
Trends come and go, but AIOps and MLOps, spatial computing, and a low-code and high-code toolkit are the future of software …
OrgScan extends CodeScan’s security scanning ability in Salesforce. CodeScan Shield aims to simplify security for devs as the …
A software team needs quality to ensure a strong product. Here are some ways to implement quality in all facets of development …
With alerts, cost analysis dashboards and other features, Azure cost management tools can help admins more clearly see their …
Discover the differences between Azure Data Factory and SSIS, two ETL tools. These contrasts include key data management features…
An extension of the Azure DevOps service, Azure Artifacts can help developers manage and share packages to streamline the overall…
Taking the lead from ISSA’s framework, here’s a guide to how you can map out a long and profitable career in cybersecurity.
A cybersecurity strategy isn’t meant to be perfect, but it must be proactive, effective, actively supported and evolving. Here …
Uber said a hacker from the Lapsus$ group used stolen credentials from a contractor to gain access to several important silos …
Many organizations struggle to manage their vast collection of AWS accounts, but Control Tower can help. The service automates …
There are several important variables within the Amazon EKS pricing model. Dig into the numbers to ensure you deploy the service …
AWS users face a choice when deploying Kubernetes: run it themselves on EC2 or let Amazon do the heavy lifting with EKS. See …
All Rights Reserved, Copyright 2000 – 2022, TechTarget
Privacy Policy
Cookie Preferences
Do Not Sell My Personal Info