All That Jazz…
The last good thing written in C was Franz Schubert’s Symphony Number 9. — Erwin Dieterich, programmer
As an IT recruiter I see many software engineering profiles. And although I do not code myself (yet…), there is often something I have in common with developers: a passion for music and, more specifically, jazz.
Is it just coincidence that so many developers are also jazz musicians – or are there some profound similarities between the two?
A bit of research and philosophising later, here are some thoughts.
To begin with a general statement: the history of coding is similar to that of jazz.
Nick Sieger makes an argument for the similarities between the history of jazz and programming in a blog article from 2008. In his own words:
‘You could break it down like this: C is akin to New Orleans “hot” jazz: foundation for much that followed, and still relevant in a lot of ways, but definitely showing its age. Java is like swing (literally! c.f javax.swing.*): appeals to the masses, anyone gets it without a lot of cognitive load. Ruby is like bebop: favors minimalism, more powerful, more intellectual, and less understood.
So what does that mean for the future of programming? We’re already seeing an increase in DSLs, polyglotism, and languages and tools used for specialized purposes. I would expect that trend to continue, and using the development of the many styles of jazz as a ruler, would say that there will not be a Next Big Language (NBL). Specialization and niche skills will be increasingly important as differentiators in our careers, but that means there will also be plenty of opportunity to stake out that new ground for ourselves and become leaders in these new specializations.’
Taking this argument further, we might view the JVM based functional programming languages as a kind of improvisation on the 12 bar blues – both database and 12 bar blues are pretty low risk forms, able to support indefinite and complex patterns on top.
But coincidences and nice analogies aside, do the practises of coding and jazz have anything more in common?
Music theory has the same elegance and functionality shared by coding
In a crude nutshell, programs need the building blocks of algorithms, patterns, frameworks and libraries – and they need these building blocks to be clear and unambiguous.
Jazz also has certain fundamentals that are key – pun intended – to any piece. A band that hasn’t coordinated aspects like rhythm and chord progression is not going to get very far. Think of a saxophonist playing Take Five in 4/4, or Chick Corea’s Spain with the wrong harmonic progression. It just wouldn’t work.
Some inventive developers have actually tried to mix coding and jazz with the programming language Velatio, using MIDI files as source code. The programs are defined by pitch and order of notes and this, interestingly, leads to jazz-like harmonies. Here is a sheet music representation of a “Hello, World” program:
Beyond the structure, coding and jazz are also open-ended and allow minds to be creative.
In a talk on Big Data, Stephen Cohen makes it clear that the quantitative aspects of Data – the building blocks – are necessary but they can’t do everything (http://www.youtube.com/watch?v=VVw2RMun-ss). Algorithms can’t process qualitative data or capture subtle context. That’s why, according to Cohen, humans will always be necessary in dealing with computers. Human qualities cannot be quantified.
The balance of analytics and emotions is also vital in jazz. No matter how complex the rhythm and chord patterns, it’s the human element of improvisation and tone that distinguish the best jazz. And often, the simpler the better: have a listen to Miles Davis’ long notes and pauses in ‘Round Midnight, http://www.youtube.com/watch?v=td3SE3zEVP0.
So the listener takes the building blocks as a given, allowing them to focus on the human touch, emotion and application. Just so in programming.
Programming = Performance?
Programming blogger Chad Fowler recently compared programming to performance. He argues that programming is often, mistakenly, focused on the end product, where as in actual fact development ‘is itself a process’:
The best development happens not when programmers are keying in the code to implement a design but when great programmers are improvising within constraints and iterating toward a goal.
So the programmer, like the solo improviser, works on intricacies of pattern against more human qualities of tone and emotion.
If you’re interested in delving into the deeper similarities, Rich Hickey explores the nature of design and composition in software and music in this talk (http://www.infoq.com/presentations/Design-Composition-Performance), mentioning that the act of improvisation is not something spontaneous but something that takes extensive study and practise.
Hickey then combines the similarities of programming and performance in a neat summary:
Design like Bartok
Code like Coltrane
If you have any thoughts or experiences on combining jazz and coding, I’d been keen to chat to you.
Oxford Knight is a technical recruitment agency. None of our consultants have written a line of code... yet. We apologise if this article doesn’t keep some purist happy, but we’re trying to build a new generation of technical recruitment agencies…. We listen, participate, and deliver.