By David Zinman
Software programming can be a solitary or collaborative effort. Similarly, so is creating music. The idea for both can be a singular endeavor, but it most often takes a combined effort to reach the finish. This similarity is described in the book by Andrew Johnston and Chris S. Johnson “Extreme Programming: A More Musical Approach to Software Development?“ where they hypothesize on the resemblance between musical and software development environments:
The characterization of software development as a craft rather than an engineering discipline has been proposed recently and it is felt that by considering the similarities and differences between the working and learning environments of musicians and developers that some further weight can be given to calls for a more collaborative approach to software development.
The debate that writing software code is an art has been around almost since coders have existed. I would not go so far as to say anything I have coded is “artistic” but some of the novel ideas that come from very focused coding fit with the idea of creating a piece of music.
Music is the organization of sounds with some degree of rhythm, melody, and harmony. I would argue that harmony should not be included in this definition since even a single voice is considered music where no harmony is present.
But the important idea in this definition is organization: it is the idea of organization and patterns that is common to both music and software. Design patterns are now an integral part of software development. A design pattern is a general reusable solution to a commonly occurring problem in software design. The most famous pattern in music is probably the opening sequence of Beethoven’s Fifth Symphony (G G G E-flat). Beethoven repeats this pattern several times in the movement in several variations. Once we understand the pattern of a particular piece, be it coded or musical, we are well on our way to a solution.
Jonathon Kohl explains the tension/resolution that makes up music is applicable in software testing. I would go further and say that it also applies to software coding. There is the intangible feeling of tension when an algorithm is in development, and the feeling of relief upon its successful resolution. For a great example of tension/resolution in music listen to Lenny Kravitz’ Mr. Cabdriver.
I would like to think that we should not be so pragmatic as to look at software development as being”solving a problem in order to start creating.”
It doesn’t really matter though because when I am done I put on the headphones and crank some Zeppelin. Anybody want to jam?
Wow loved reading your blogpost. I added your rss to my blogreader!!
If there are people who depend on my work (which I trust there are), then there should be some “scary” in wanting to guarantee that I’ve done outstanding work for them. If there are people who will be interrupted if my work does not come soon enough, or right enough, or respond fast enough, then I believe it is appropriate to be worried, actively seeking to verify their needs are met. Maybe the phrases “scary” and “nervous” don’t express enough of the “business dignity” linked up with computer programming and testing, but they certainly do resonate with the feelings I’ve had in the trenches of programming and testing.