Programming requires focus. For the developer, distractions come in many forms. While you can mute notifications, shut down Twitter, and close your email client, it's often hard to escape the auditory bombardment of your environment.
As a remote worker, I split my time between a home office and my favorite coffee shops. Each has an audio profile that can impede focus during thought intensive work. Music can be an effective firewall between the ears and the brain, enabling you to hear your own thoughts.
I listen to a wide range of music, most often on Rdio. I enjoy singer-songwriters with lyrical depth, most anything from the 60s, and the nostalgic 80s tracks of my youth. But when I need to dig deep and focus on some work, I often spin a short playlist of songs that mirror the work at hand.
Most creative work is iterative. The artist passes over the same part of the creation over and over again, refining the work to look more like the vision. Designers will often start with a low fidelity sketch before building a user interface in pixels. Illustrators will fill notebook pages with multiple poses, angles, and expressions to capture a character in a single moment.
When writing articles or creating slide decks, I find it helpful to start with an outline of Markdown headings and flesh out my thoughts before investing in too many words. For slides especially, I struggle to stay in Markdown as long as I can, knowing that as soon as I jump into Keynote, I'll be battling the distraction of pixel perfection.
Whether building new features or refactoring exisiting code, developers work iteratively, too. We write new tests or change some code, run the test suite, and move bit-by-bit effecting change in the project.
I've long had a "Coding" playlist in iTunes and now Rdio. As I've refined it over the years, I've discovered some attributes that make a great personal coding soundtrack.
Familiarity. Humans are obsessed with new, and music is no exception. We love discovering and sharing songs with our friends. Social music sites like Last.fm, Rdio, and Spotify have made that easier than ever. When I'm trying to focus, new can be a distraction. My mind wanders off after a lyric or a riff and away from the task at hand.
Repetition. Have you ever listened to an album so many times that when you hear a song by itself, you start humming the next track on the album when it ends? I like to loop albums or playlists when I'm developing because that anticipation of the next track seems to pull me into the next task.
Iteration. Some of my favorite coding tracks unfold iteratively. Like Pachelbel's Canon, a simple melody, chord progression, or riff is repeated throughout the whole song with additional voices or variations that build on top of that foundation. Hans Zimmer's Time from the Inception Soundtrack is perhaps my favorite coding track. Starting softly on four piano chords, it builds to a crescendo of strings and other voices before returning to where it began. When I'm most deep in thought, I loop this single track.
(Mostly) instrumental. Though there are exceptions, I favor instrumental tracks when I'm working. It's not human voice that I find distracting. Zimmer's Gladiator Soundtrack has some great tracks that are full of ambient vocals. It's often the lyrics that distract me.
How about you? What's your coding jam? Let me know on Twitter.