In Search of the Software Ursatz: Part 1 - Introduction
by Sean Cribbs
This is the first in a series based on the talk I gave at Code PaLOUsa 2014 entitled “In Search of the Software Ursatz”.
It has been a long time since I wrote on this blog, but it has been an equally long time (or more) that I have been thinking about the topic of this series of posts.
What I want introduce to you, dear reader, is a set of musical theories that have been influential in my thought process as a musician and a programmer, in the hopes that they bring about deeper insights to all of us. This has been a difficult thing to begin writing and talking about. The concepts are very abstract, and connecting them concretely to the work we do requires both a strong gut feeling and occasional leaps of faith.
The ideas I will try to construct are also in their infancy; indeed, I proposed the talk to Code PaLOUsa with very ambitious goals, but I haven’t yet connected all of the dots. Luckily, the title of the talk and these posts are “In Search of…” not “I Found It!”. The musical theories I will discuss herein took the author over thirty years – essentially his entire career – to develop; I am just in the beginning stages of developing my theory.
That said, I apologize if it seemed through the title or the talk abstract that I have a Grand Unified Theory of Software Design. That is not the case. Instead, I will look at some important questions and point in some directions I think we could pursue in the future.
In Search of:
To begin this discussion, I’d like to outline what it is exactly that I am seeking.
First, there has been a trend in recent years to see code as craftsmanship. This seems to mean not just the creation of code to do a job, but a skilled work that also requires aesthetics beyond the measurable aspects of the product. What does it mean to be a software craftsperson? How does that quality reflect in the products of the crafters? I’d like to know the answers, or at least better understand the questions.
Second, I’d like an intuitive technique for analyzing the structure of software. By intuitive I mean that its interpretation is obvious to the experienced practitioner, and draws from a deep understanding of software construction by the analyst.
Third, I’d like a subjective means of critical comparison of software designs. That is, I’m not interested in performance comparisions, SLOC counts, but what makes the software what it is. For example, what are the defining aspects of the functional program versus the object-oriented program and why is one subjectively better in various circumstances. How do the surface features of a program convey or obscure its meaning?
Fourth, I’m looking for the why not the how. We have many Turing-complete languages and rich tools that can express essentially the same computation. We have a wealth of information on the Internet (e.g. stackoverflow) that can tell us how to accomplish things. Given so many choices, what are the designs that win out and what makes them better than others? What makes them tick?
Those are great goals to achieve, but why do I care about them?
If we accept the idea that we should strive to be software craftspersons, we need a framework for critical thought about our craft that goes beyond surface details. We can only improve our craft if we deeply understand the things we create and turn a critical eye to our own work.
As Rich Hickey has so eloquently put it, there is a strong distinction between simplicity and ease. Simple things require deep understanding to wield, easy things are often canned solutions that are quickly outgrown.
Finally, I believe that the software systems we build reflect – and in some cases “leak” – the foundations on which they are built. Understanding those foundations and the interaction between different layers is essential to building successful, well-crafted software.
A Tale of Two Pieces
Below are two works from the Tonal period (an umbrella term encompassing works from approximately 1600 to 1850). The first is Prelude no. 1 in C from The Well-Tempered Clavier, Book 1 by Johann Sebastian Bach. Many of you will know this piece, even if you are not a musician, as it has become very popular in weddings and television spots in recent years.
The second will be less familiar to most, except the pianists. It is Etude in F Major, Op. 10 no. 8 by Frederik Chopin.
Would you believe, aside from the fact that both of these pieces were intended for keyboard instruments, that they have the same fundamental structure? They sound very different on the surface, but use the same techniques, in different combinations, for expounding upon the deep structure of Tonal music.
That realization is the genius of the theories of Heinrich Schenker, who I will discuss in more depth in the next post.