Programming is like Songwriting
by Derek Sivers
From 1988 to 2000 I made my full-time living making music. I used to spend a huge amount of my time writing songs. Lyrics, melodies, grooves, tracks, arrangements, etc.
As I get more and more into programming, I'm constantly struck with how similar it feels to songwriting.
I'll name a few ways that come to mind so far, and then maybe some other musician/programmers can contribute some more to the list.
Please contribute more, below...
- It starts with a vague concept of something that could/should exist, then is slowly crafted towards that vision, like a sculpture.
- Both songwriting and user-interface design make you constantly put yourself in the audience's shoes - to make sure they understand what you're trying to express. Will they understand your turn of phrase? Will they know where to click to complete the form?
- Both songwriting and user-interface design need to hold the audience's attention all the way through, knowing that one wrong decision might lose them forever.
- One big problem really wraps around dozens of little problems. Finding the right chord, the right query, the right phrase, the right page-layout. These little problems are the addictive potato-chips that keep me going.
- Every person on earth would solve these problems (both little and big) a little bit differently.
- Even trying to imitate someone else's creation will make your own unique version of it. Imitation is a great way to learn. Humans are imperfect mirrors.
- I resist starting. I'll make 1000 distractions for myself. But once I start, and get into it, it's the best thing in the world and I don't want to stop.
- It makes me jump out of bed at 2 AM wanting to try the ideas in my head to see if they work.
- Too much repetition, and it's boring. Not enough repetition, and it's hard to understand. (in programming's case this means the code, not the final product)
- Once you're done you want to show off your creation to the world.
- Some people work best in collaboration like a day job. Others work best all alone, creating late into the night.
- Some like to draw charts on paper, analyze, discuss. Others like to just shut up and do it, letting the creation speak for itself.
- Both start with an initial flash of inspiration, then take a hell of a lot of work to make it into reality.
- Being the programmer in the company is like being the songwriter in the band. You're the one that creates the thing that the rest of the organization is there to promote and support.
- It's best to keep the "suits", the business-folks, away from the creative process, until you have something you're ready to show them.
- Your creation is often judged by how much money it could make, though that's another way of saying "how many people will like it enough to pay money to have it".
- ... though if even a few people's lives are made better by your creation, that's satisfaction enough.
- Most real songwriters and programmers would be doing this even if they never made a dime.
- The sly programmer or musician puts little things in the final product that the general public will never notice, but a few peers in-the-know will catch the subtle trick and laugh out loud in admiration. (Or even if nobody else notices, it's an immense sense of self-satisfaction.)
- Some of your worst songs or programs had a brilliant idea inside, that you can re-use many times.
A great essay on a similar subject is "Hackers and Painters
" from Paul Graham's O'Reilly book
by the same title.
YOUR TURN - what are some other ways programming is like songwriting?
Excellent... and inspiring! (as all things Derek)
I thought I was the only one that found 1,000 reasons not to start writing... :-)
Melodies are crafted from small motifs - sometimes they repeat, sometimes they cahnge a bit, sometimes they stand in contrast to other motifs. Programs are built from similar, small code units. And like my constantly growing library of code units (modules and components), I also keep a growing library of small melody-bits and chord progressions that I trove when needed.
Creativity and Commonality
My two favorite comments at this board:
"I'm guessing that Sivers is about 14 years old and will be sorry he wrote this someday"
"It sounds like Sivers is trying to elevate himself."
I love knowing that not everyone feels the same way as me.
Now imagine being forced to pair-songwrite all day...
Your post makes sense, and it also makes sense that many good programmers are also good musicians.
Aspect-Orientation and Music
Aspect-Orientation and Music
You are really right on the button with this topic, so you may be interested to learn of some research which a friend of mine - Robin Laney - has been undertaking at The Open University into the conceptual and practical similarities of Music Composition, Software Development and Aspect-Oriented Systems.
So far, he and his co-workers have produced 3 thought-provoking papers, but one can sense that this is only the scratchs the surface of a really new discipline to understand and support creative workers such as Musicians and Software folk.
Aspect-Orientation and Music: Opportunities
If anyone finds this topic of deep interest then it may be worth knowing that suggested, related PhD projects are included in the list at the following address.
Currently our dept. has a full time studentship open for competition. We are also able to consider students for part time PhD study, as the Open University specialises in distance education.
Please feel free to email me if any of this, or any related ideas are of interest to you.
Bits and Bobs about Bytes and Beats
I have done a lot a thinking along these lines, having been a musician/songwriter/educator for 14 years before having to accept the "defeat" of getting the so-called "real job". Despite being rather weak at maths, and having little corporate exprience, I ended up being quite comfortable in Information Technology.
Here are some musings about this dynamic:
System - Form
What I learned writing, playing and studying music that helped me most, was form. How parts relate to the whole. Another word for this : system.
Abstraction - Imagination
You cannot program if you cannot think abstractly. You won't produce compelling music if you don't use imagination.
This gets to the core of intelligence, its the ability to adapt a solution to a given set of circumstances, to respond to the nuances of a problem. Creatively speaking, each element of a composition needs to be appropriate to the overall message. During performance, ability to adapt to a particular audience / context is vital.
Variables - Irony
A variable is a space in memory which can hold a variety of literal meanings.
Irony is a key to compelling songform, and is the ability to mean more than a single thing.
Logic - Beauty
All artists come up against the hard reality of money and business. Where profit is the ulitmate motive, efficiancy (logic) is vital to maximising this. Where the motive is Beauty, elegance of expression is key. Things like simplicity, understatement.
Joy in repetition
Said the artist formerly known as the artist formerly known as Prince. My worst music = 50's serialism where the rule is "dont repeat any note / element of music" until all notes / elements in the array have been played. From a pitch POV you can only play C when your played all 11 other semitones. Now how much more lovely is Whole Lotta Love or most of Underworld's trance?
Code reuse - Remix
Object orientation and indeed most programming disciplines require minimal redundancy. Use a function or method call, dont repeat code. In remixing the ideas to use relatively complete blocks of music, and re-organise them to a novel effect.
System Tiering - Musical Production
In the business sphere we talk of application tiers (data, business, and presentation). The real value is in the data, but to make this into "information" we need solution-particular alogorithms, and to make this information useful to an organisations people, we need user interfaces.
In musical production we take a deeply human idea, help it find appropriate language (human and musical; the lyric and melody/harmony/rhythm/sonority) then present this so that other humans can interact with it.
And so on and so on ...
I never really thought about the connection, but you're totally dead on! I am a singer/songwriter currently trying to shatre my art with the world, and am using computer programming to pay the way there.
As much as I do hope to support myself on my art alone, music & programming DO complement one another well, and the kinds of things I'm able to do to support my music as a programmer makes a BIG difference to me.
A slight variation on a theme that I *have* contemplated for a while: computer programming is a sort of microcosm of life in general.
- There are a million ways to get from Point A to Point B; you just have to go your own way.
- There are unchangeable rules & requirements which you must abide by.
I could list a lot more cheesy reasons, but I do believe that learning programming actually made me learn how to live a little better. The hardest part of learning any new language is the mere acceptance that you just HAVE to do things a certain way, even when you don't understand them. When you finally get the "a ha!" moment sometime later, it all sort of makes sense -- but you can't get there until you just accept that you have to work within the specific constraints of a language.
Thanks for the thought, Derek! You may have just sparked a new song...
(p.s. yes, my site WILL be overhauled in the VERY near future -- already in the works)
In your own case, I see the parallel. It's like when I've written utilities/classes for my own needs, or my personal website, I find myself working in something like a spiral effect - working from the outside in.
However, when I either run multi-man projects or where there are strict client requirements, I have to follow much more of a structure. There is still some iteration, but I don't play around as I'm coding - it get defined pre-coding, and then it's all done. You just can't work in the same way - the projects I know that try to just end up being a disaster.