Improvised Software - Iteration I
I was a musician in a previous iteration of my career. My main interest was in jazz, but I played a lot of different kinds of music both out of passion for it and the utility of it. Different styles offer different perspectives and opportunities to learn, just like different programming languages offer different perspectives like static vs dynamic typing. But whatever style I was playing I always approached it with the mindset of an improvisor, and I think that this sensibility has found its way into my choices in regards to software.
When I began writing software for a living people were constantly telling me that they had read somewhere that musicians make good programmers. I've often pondered this phenomenon, and the number of analogies that can be drawn are seemingly endless. My background in improvisation has led me to focus on the parallels that exist specifically between improvised music and software.
The first one that occured to me was that music and software are both built on systems of structure, syntax and patterns that are themselves very linear, yet they are applied in very abstract ways. Being able to play scales and arpeggios do not make a great improvisor, but they provide the context for melody. When you hear a melody, it makes sense to you because you've heard melodies before. Similarly, understanding syntax and common idioms do not make a great programmer, but they provide the context when you or your colleagues go back to make changes.
Patterns fall nearby the structure vs abstraction discussion. There are myriad books on patterns for improvisors. This seems sort of like an oxymoron - that you can learn to create things by learning patterns. But think about the last conversation you had with someone in which you were hotly debating a topic about which you feel passionate. Did you ever think "gee, maybe I'll follow a verb with an adjective and then follow that with a noun"? If you did, you probably weren't that passionate about the topic after all. What about all the words you chose? Did you have a dictionary close by? Probably not. They were just part of your vocabulary. The structures were part of your innate sense of grammar.
The same thing is true of improvised music. You study patterns, at first learning what notes they comprise, what those notes mean in context of a key, etc. You practice them until they're under your fingers and in your ears. Then you forget about them until you're on a gig and something happens that triggers that pattern in your ear and your hands miraculously play it - just as you had practiced. Seems like magic, but it's no different from the languages we speak. Through repitition, they become part of our vocabulary and our minds access them at the right time... and sometimes at the wrong time!
Patterns can be found all over the place in software as well. There are common idioms, like for loops. There are approaches to developing object hierarchies. There are design patterns, many documented but many not yet even recognized.
Patterns in language (human and programming) and in music all seem to have a similar life cycle. First they appear in a specific context. Then they appear in more places and are eventually recognized and documented as patterns. They become part of the literature (books on poetry, design patterns and scale patterns) and young practitioners begin to adopt them feverishly, overusing them to the point of losing the message that needs to be conveyed. As the pratitioner matures, she uses these structures in more and more subtle ways, turning the master-slave relationship around so that the patterns become a tool of the speaker, writer, programmer, improvisor.
Ever been in a design session for a new project that starts off with the tech lead saying "here are the design patterns we're going to use in this project." I hope you had the good sense and the financial freedom to quit immediately.
But where would we be without patterns and structures. Ever click on text only to find out that unlike all the other underlined text on the page, this text was underlined for emphasis? A lot of musicians and artists like to come up with clever ways to provide navigation on their websites. Then one day they do a redesign, changing a bunch of very clever icons into text links down the left side of the page and all of a sudden their traffic quadruples.
So patterns are useful because they provide context and common understanding. While passing your language certification may mean that you'll get to the correct method name a split-second earlier than the guy who relies on code completion tools, it doesn't guarantee that you'll come up with a robust, maintainable solution that satisfies the needs of your client. That takes experience, patience, trust and maturity. But it's a good bet that the mature, experienced, patient and trustworthy craftsman (language, music and software) has a pocketful of vocabulary, syntax and patterns at her disposal.
Hey David. Not sure if you're the same guy I used to know. I have a different name now. It's Lesley. Used to be "Declan" but I don't use that name anymore.
I've done some interesting stuff with my life, how 'bout you? Anyway, if that IS you, David, sounds like you grew up into a fascinating young man. Well, I guess we're all not quite young, but young at heart is good enough as far as I'm concerned. I made a bunch of music with talented entities from somewhere else.
Used to be from here, but... <http://www.ampcast.com/BEATLESEX>
Yeah, if this is you David, you turned out as quite an interesting Dude, Dude.
Oh, okay. My email address. Well, I don't know the circulation of visibility
on this...so I ain't puttin my personal email addy, however, you can reach me
through the b'sex site up yonder..
Thar yew go.
Oh and Please do not refer to me as "Declan" anymore.
I absolutely abhor that name. Ecccch.
My name is Lesley. Since 2001, actually.
Thank you.
God Bless,
Much Love
~Lesley
Oh yeah.
I have another music site besides the twilight zone one.
<http://www.ampcast.com/American_Lesley_Jane>
I don't know. It could be you.
Could be the same David I knew, or just as well maybe not.
Both have nice smiles at any rate. ~L
I've done some interesting stuff with my life, how 'bout you? Anyway, if that IS you, David, sounds like you grew up into a fascinating young man. Well, I guess we're all not quite young, but young at heart is good enough as far as I'm concerned. I made a bunch of music with talented entities from somewhere else.
Used to be from here, but... <http://www.ampcast.com/BEATLESEX>
Yeah, if this is you David, you turned out as quite an interesting Dude, Dude.
Oh, okay. My email address. Well, I don't know the circulation of visibility
on this...so I ain't puttin my personal email addy, however, you can reach me
through the b'sex site up yonder..
Thar yew go.
Oh and Please do not refer to me as "Declan" anymore.
I absolutely abhor that name. Ecccch.
My name is Lesley. Since 2001, actually.
Thank you.
God Bless,
Much Love
~Lesley
Oh yeah.
I have another music site besides the twilight zone one.
<http://www.ampcast.com/American_Lesley_Jane>
I don't know. It could be you.
Could be the same David I knew, or just as well maybe not.
Both have nice smiles at any rate. ~L
In music that would be a very common occurance. Like you I started life as a jazz player that played many kinds of music. It's very common for the leader to say something like "let's do a 12 bar form but for the solos, let's do a McCoyish[?] modal thing" or maybe "let's do I'll remember April but Bird style and stay away from pentatonics". Similarly I might say to a group of programmers, "rather than casing out this calculation method depending on the mutual fund company we are working on, lets use a Registry here". Are you saying that would send you packing?
In February 2004 I gave a talk at the Atlanta XP users group (agileatlanta.org). I gave them a demo of FitNesse. Someone asked "Have you used FitNesse to test FitNesse?". Embarrassed, I answered in the negative. We had just managed integrate FIT with the wiki about a week before, and had not had time to write any acceptance tests for FitNesse at the time.
*外贸服装批发
*牛肉面
*防火墙
*网站*solenoid
*网络推广
*网上支付
*脱发
*韩国化妆品
*美国加州牛肉面大王
*防火墙*北京礼品公司
*脱发*防盗包
*防盗包*北京鲜花
*99bb
*18dy
*x365x
*外贸服装批发
*北京礼品
*solenoid
*外贸服装批发
*牛肉面
*防火墙
*网站*solenoid
*网络推广
*网上支付
*脱发
*韩国化妆品
*美国加州牛肉面大王
*防火墙*北京礼品公司
*脱发*防盗包
*防盗包*北京鲜花
*99bb
*18dy
*x365x
*外贸服装批发
*北京礼品
*solenoid
So patterns are useful because they provide context and common understanding. While passing your language certification may mean that you'll get to the correct method name a split-second earlier than the guy who relies on code completion tools, it doesn't guarantee that you'll come up with a robust, maintainable solution that satisfies the needs of your client.
Add Child Page to ImprovisedSoftwareIterationOne