I was at the symphony recently, the Baltimore Symphony Orchestra. I saw a new piece of music composed by recent Pullitzer prize winner Kevin Puts. I was very impressed by the piece. I’m no music aficionado, that title belongs to my wife; but I couldn’t help but be struck by the intricate complexity of orchestral composition. Each instrument working together in concert toward one sound, composed of parts that in turn are composed of smaller parts. I was baffled by the complexity of it all.
I deal with large-system design all the time with the software projects I work on. I found an odd similarity to the way system components and abstraction layers work together and build off of each other to create a larger system. It is of course composed of subsystems (that’s the only way to understand it: abstraction), which are composed of smaller subsystems.
It takes a system-level thinker to architect large software systems, and it takes a special kind of artist to compose large orchestral works. By thinking about composition as a kind of system design, I saw that the mathematical intricacies of orchestral symphonies are similar to the logical intricacies of software systems. Not all artists are composers, in fact a strikingly small fraction of them are composers. This also resonates as a fraction of software programmers have the system level thinking skills to be architects. All in all, I think the skills necessary to go from artist to composer are the same as going from developer to architect.