flow.
"Flow is a condition of deep, nearly meditative involvement." - Tom DeMarco

Stretching Out...

Tuesday, January 29, 2008 10:15 PM
A common suggestion to budding musicians is to "stretch out".  Typically this means making an effort to play in styles outside of your comfort zone.  Back in my younger days as a music major in college, music majors were encouraged (read this as "highly suggested") to enroll in ensembles outside of your normal beaten path.  For example, I was a percussion major and my university had one of the best regarded World Percussion programs in North America, so we were highly "encouraged" to participate in as many of the world ensembles as possible.  This might have included anything from African drum ensembles, to Gamelan, to Taiko, to Steel Drums.  Although you weren't really expected to come in as a born master of the Balinese Gamelan, the inherit expectations could still be pretty disconcerting to your average 18 year old trap set player who had cut his teeth jamming in his parent's garage to Zeppelin's ZOSO.



You see, the thing to remember is that each one of these ensembles embraced a completely different styles.  Although a few shared fundamentals remained the same, for the most part, each ensemble demanded that you bring a completely different perspective to the table.  Not only did the styles and techniques vary each time, but some were even based on an entirely different system of rhythm.  Some groups required you to learn the pieces entirely by rote (by mimicking a rhythm that someone else has shown you), others required you to learn the pieces verbatim from a written sheet of music, while others simply provided you a skeleton lead sheet and relied upon you to improvise the meat of the song.  Each of these techniques was a completely different process.  However, and this is key, none of these ensembles were completely immune to the benefits of any of these techniques.  Although the African ensemble required you to learn the song by rote, only when combined with the improvisational skills that you learned in the jazz ensembles did the songs really begin to come life.  Even the classical leaning small chamber ensembles benefited greatly by the attention to aural detail that you developed from listening to other players while playing in the African ensemble.  No matter how different they seemed on the surface, you would be hard pressed to find many skills in any ensemble that could not be directly applicable to another.

Where am I going with this?  Well, one can draw a very strong parallel between musical styles and programming styles.  Any who's programmed in Lisp, Prolog, and C++ will tell you that they are all strikingly different experiences.  However few would argue that the lessons learned from a working in a hard core functional language, such as Lisp, could not be applied at some level to more OO leaning languages, like C++.  The Pragmatic Programmers have the concept of "learn one new language every year".  They argue that learning to think in the context of a completely different programming style will challenge you to approach problems in your primary language from directions you otherwise may not have thought of.  In fact, in many cases you don't realize all of the different ways to approach a problem until you've tried coming at similar problems in a different language.  It's almost as if you didn't even realize what skills you were lacking until you discovered them.

A word of caution here:  it's very tempting to pick a language similar to your own primary language as your new language for the year.  Maybe this is a language you're already relatively familiar with, maybe the syntax seems comfortable so you anticipate a shorter learning curve.  Don't fall into this trap.  The whole point of this exercise is to stretch out and expose yourself to models of thinking that you've never encountered.  If you're a C# developer, don't gravitate towards Java.  If you're a VB.NET developer, don't gravitate towards C#.  Venture outside of your comfort zone.  Try Lisp or Scheme on for size to get your thoughts around functional programming concepts.  Take Ruby out for a spin to understand some more bleeding edge OO concepts.  The trick is to learn the way of thinking of other languages, and then to bring those ideas back to your own skillset.

One final word of caution:  learning new ways of thinking is great but don't let those new ways of thinking cloud your judgment.  Remember the Golden Hammer anti-pattern:  when you have a shiny new hammer, everything looks like a shiny new nail.  When I first learned Prolog, everything problem looked like a shiny new rules engine.  Don't sacrifice a simpler and cleaner solution for the chance to apply some of your new tricks when they're not quite needed.  The trick is to save these new tricks for when they'll accomplish the same result as your old style of programming in a natural, more concise way.

No one's asking you to give up playing Zeppelin in your parent's garage, they're just asking you to mix in a little Coltrane when it makes sense.

kick it on DotNetKicks.com

Feedback

No comments posted yet.


Post a comment





 

Please add 3 and 8 and type the answer here: