In Search of the Software Ursatz: Part 1 - Introduction

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?

Why care?

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.