Jazz Programmer

I've recently been drafted into BigDesignUpFront group. They pride themselves on solving all their problems in UML before ever getting to code. Being heavily influenced by XP, I test and write my code before design review. At least when someone tells me that something may not work, I can say that it does.

For the bits that I do not get around to coding before review, I'm certain that whatever I commit to UML will change when I get around to coding. Funny though, in this group that is probably considered a sign of weakness. But, it reminds me of some things. I've always been a musician at heart. I started thinking about the jazz/rock guitarist Allan Holdsworth and how he was practically kicked out of a rock band because the keyboardist couldn't deal with the fact that Allan played it all differently every night. But, jazz is like that. Either you are learning, or you are not being true to your calling. How do you learn? You play with great musicians. Every gig is a way to commune with the craft.. a lifelong journey. The best of them can adopt any style at the drop of a hat. There is something to learn everywhere.

I think that some musicians have a different sense of life than many people. The drummer BillBruford? once left a band, saying that he couldn't learn any more there so it was time to move on. At times I see the same thing in people in our industry, though not as much as in music. A commitment to the craft.. a mission.. it is a wonderful thing.

Anyway, here's to them.. the JazzProgrammers among us.


It is a wonderful thing.

But surely no more or less wonderful than the formally trained band members in the orchestra playing the dots laid down in great detail decades ago as faithfully as they can under the direction of the lone autocrat at the front?


These people, are they successful using BigDesignUpFront?


They are not. They are using an implementation which they have to install on their hardware first. But then, there are fundamental differences between music and software: The requirements for Mozart's Requiem didn't change over time. -- HaskoHeinecke

Yes, but the approach to the work remains the same for some people.. commitment and learning.


I've been a musician for quite some time(15 years or so), playing mostly jazz and gospel piano. I can really relate to what is being said here. For a pianist, the skill is essential and it is often best achieved by playing classical music. (Bach stands out here.) However, when improvising with jazz and similar music it is only when I lose myself in the music that I really am satisfied with the piece. The point is to avoid listening to the music and instead try to be in the music. The artist has to let go of any control. I think this works in the same way in many other art forms but am somewhat suspicious to the analogy with software. Software is often used more as tools than as entertainment. Perhaps the analogy is more true for development of ComputerGames? -- FredrikRubensson


Couldn't you get into the MentalStateCalledFlow either way?

Sure, at least I want it to be that way. Came across a quote in the TheTimelessWayOfBuilding that kind of related to this: This innocence will only come about when people honestly forget themselves. p.536 I feel that this way of creating kinds of relates to the QualityWithoutaName.


I find that in jamming with my musician friends I tend to lose myself in the music in a way I have never been able to achieve in sitting meditation. I can't do it if I try - it just has to happen. Even though I'm not a great musician, I keep playing because I want to recreate the experience. -- EdBuffaloe


I'm not sure if this is relevant to the discussion here but I'm sure someone will fix it if not. Wynton Marsalis's '12 Ways To Practice' (from a lecture series he gave on WNET) are:

-- LanceWalton

Was this part of the same series where he compares SonataForm? with TwelveBarBlues?? -- KeithBraithwaite


AnalogiesFromMusic work on many different levels (and have limitations on many levels in line with all NewAnalogiesForSoftware). Writing, performing or improvising music requires a sense of rhythm at multiple levels: playing a note in tune, being in time/syncopating correctly within a single bar, playing a theme in time, repetition of the theme. I find this helpfully analogous to the many levels of iteration in any truly productive approach to software: Xp's AskTheCode iterating at the Smalltalk debugger level, ContinuousIntegration, DoTheSimplestThingThatCouldPossiblyWork, three week delivery cycles. To spell out the real obvious, the timescales in software development are longer, except perhaps for some classical composition. But teaching software developers to develop a proper sense of rhythm is key. A key skill is picking up the rhythm that's already there in a project you join. For instance apply the JoinJazzJamSession? analogy and play so that everyone, yourself, the other players and the audience/users, enjoy the result. Even in attacking a large body of source code where the previous developers have mysteriously disappeared, try at least the ConductorStudiesLostManuscript? analogy. Attempt to make the best of perhaps the few rhythms and harmonies you can find in the whole wretched composition - because breaking them will produce only worse chaotic noise. LearningByRefactoring? is an analogous piece of XP I feel sure although I can't now find the page for it ...

Yeah, I'm afraid I am real serious about this stuff. Sure, it will probably never be as much fun developing good software as playing good jazz but it will be more like playing good jazz and more fun than writing bad software.

-- RichardDrake

AnalogiesFromMusic have a lot to teach the software professional, but why this emphasis on jazz? Was CharlieParker in more direct contact with his medium that Beethoven? And what exactly is the medium? Notice that, to a first approximation, Beethoven got better as he got deafer. See TheMediumAndItsProperties.

And why improvisation? Isn't writing code similar to writing a score, and execution similar to performance? Apart from the few areas where NonDeterministicProgramming? is useful, we do not generally want the executable improvising!

-- KeithBraithwaite

Good questions and mighty difficult ones. Like any analogy there are bad ways to apply JazzProgrammer. Saying that code at run-time should "improvise" is probably an example of that! Beethoven's deafness raises some really interesting issues about the medium as you say. I'll let others more qualified speak about that.

Let me restrict attention for the moment to small group jazz, which has been an inspiration of sorts to me in software development for over ten years. Depending on the type of group (and I need a lot of help here) there's practice, preparation and performance, including improvisation. I still think that truly evolutionary or extreme programming in a small team should feel like the performance of such jazz in a number of ways - not in all - with the time axis scaled appropriately of course.

We are always working under time pressure. In our pairs and as a team we have a bias to action - testing and coding and delivering to users together - leading to maximum feedback rather than mere abstract thought. We have to work both with what's gone before and what others are doing right now with the code. There are many "rules" we mustn't break (cf harmony or rhythm) but we need a sense of style and proportion and sensitivity to others that goes way beyond what could ever be codified or written down. Most especially there are many key decisions that must be made at the time, in direct contact with the medium, and could never be specified in advance, because they depend on the performance so far, what our fellow performers are now doing and whether the audience is loving it or walking out. All of this maps well to small group jazz in my view.

AnalogiesFromMusic have always struck me as more effective inspiration for software developers than most other analogies, for a variety of reasons. Note that there are many "rules" that you should not break as you compose or improvise. You can't change speed or key every beat of every bar. But just as you can't make great music merely by following rules sometimes you have to break a rule to create the most beautiful or appropriate code.

I unashamedly talk about inspiration because I find that I badly need it, especially when dealing with code that is far from beautiful (situation normal). Coding may never be quite as rewarding as music for performer or audience. I say that the inspiration is all the more needed for that very reason. There again KeithBraithwaite says I'm a stupid romantic.

-- RichardDrake

What?! I said that I didn't think the jazz "improvisation" model had much relevance to software. A lot of very, very good jazz was carefully worked out before performance, let's not forget.

You know I had to misrepresent somebody Keith or I just wouldn't believe that I'm back here, directly interacting with this unique Wiki medium. It couldn't have happened to a nicer person though. I hope the above goes some way to explaining my interest in the jazz/improvisation aspects of AnalogiesFromMusic, compared to more traditional composition, which I agree is fertile in other ways.


Well, as a young programmer and old music-head, I think I can point up some aspects of jazz that seem to have been neglected here. First of all, in Jazz, as in any other musical form, rhythm is a hierarchy. At some levels, this hierarchy is fixed, and in others it is improvised. If you play a 13-bar solo over the 12-bar blues, we say you are LOST. You cannot improvise how many beats are in each measure, or how many measures are in each chorus. You can make subtle changes in the harmony within a chorus, depending on how alert your fellow musicians are, and you have a good bit of freedom about how many choruses you play altogether, depending on how compelling a soloist you are, and how good you are at ignoring your bandmates' exhortations to finish up already.

Every jazz standard has a form, which must be followed, even if it is so reworked that it is unrecognizable to anybody outside the band (i.e. "stella by starlight" from the album "my funny valentine" Miles Davis, 1962). The hierarchy for the default jazz standard is more-or-less:

The "head" refers to the playing of the melody.

Of course, with the advent of jazz-rock, that playing-field was vastly reworked. Suddenly, we have a 2 or 4-bar harmonic form which is endlessly repeated, and all the improvisation is involved with the interaction of strong and weak beats within the resulting 32 or 64 16th-note matrix, and their realignment every 8 or 16 bars. But that belongs in FunkProgrammer?, I suppose.

What's interesting about all this to me, is that the music provides built-in mechanisms for telling the musician exactly where he is at all times to a high degree of precision. See SyntaxOfMusic

-- EricMoon

If you play a 13-bar solo over the 12-bar blues, we say you are LOST. You cannot improvise how many beats are in each measure, or how many measures are in each chorus.

This ignores Ornette Coleman and various versions of "free jazz". And if you listen to blues autocrats like Muddy Waters (more common in live performance than studio recording, unfortunately), they would often extend the number of bars/line or beats/measure, and their bands were attentive (and/or intimidated) enough to follow. -- TomRossen


Also, to Wynton's list, I would add: "don't practice your mistakes". -- EricMoon


I would have to say (as a Jazz musician, "Classical" (for lack of a better term) composer and programmer that the software development process has a lot more in common with classical composition. There is a seed of creativity followed by a period of concrete implementation. I've been thinking of how classical composition could benefit from the lessons learned in object modeling. This is sort of the reverse of AnalogiesFromMusic.


I've been thinking about "Patterns" and "Jazz" for some time. There are now many books available that address "patterns for improvisation" but these address the microscopic view of what notes to play during an improvised phrase. At a macroscopic level (i.e. the "form" of a jazz song), I'd like to point out a few variations on the form set forth by Mr. Moon:

Also, some caveats for solos: Any other patterns? (I'm sure there are!)

-- KevinBowman?


I would hope the canonical definition of JazzProgrammer would somehow include collaboration, group communication, and challenging oneself by frequently exercising beginners mind within the constraints of an agreed upon framework.

I often find BigDesignUpFront is a necessary means to this end.

-- MichaelLeach


I just could not resist comparing network engineers with classical philharmonic musicians and jazz artists with software developers. -- StojanTarapuza?


See TheMediumAndItsProperties, WikiMusicLinks?, JazzProgrammerAndDataMusicVoxelAppletDiscussion


EditText of this page (last edited December 25, 2014) or FindPage with title or text search