Monday, March 7, 2016

What does Playing an Instrument and Computer Programming have in common


I am a guitar player and a computer programmer.

I enjoy designing and coding software, as well as improvising on the guitar, particularly in the jazz, rock and fusion styles.  I've been thinking a bit about how music and programming actually have a lot in common. These 10 things are just the aspects that jump out at me, and may not necessarily work for you.

  1. Math at the Core: Computer programming uses math concepts to improve efficiency of code, such as when you're looking for an algorithm that executes in less time for your particular scenario, uses less memory, or CPU cycles.   Music theory uses basic arithmetic to define intervals between notes, that correspond to various tension levels you want to express.  Math in this case is used as a form of self expression.  Even if you are not aware of what a certain set of notes is expressed in mathematically, that math relationship is always there in anything that you play or listen to.  Same applies to software, which always winds up as ones and zeroes at the finest level.  

  2. Patterns and a Taxonomy to learn: Computer programming has logical patterns to organize and categorize the concepts you know:  classes, interfaces, design patterns, variables, enums, structs, methods, wrappers, adapters, pointers, variables, messages, delegates, weak references, data formats, algorithms.  Music theory uses chords, scales, triads, arpeggios, chord progressions / regressions, tonal centers, modal playing, shape thinking, contours, rhythmic variations, dynamics, phrase repetition, call and response, tension, release, mixture of voices, rhythmic displacement, harmonics, and feel to achieve the desired effect.  Both sides utilize these structural tools, each serving a distinct, specific purpose.  They are all, however, just a means to an end.  Being familiar with as many as possible of these is definitely beneficial for both trades.

  3. A Problem, and Solution: Computer programming has problems and unknowns. There are many ways to solve a problem, and an infinite combination of steps to get there.   Music has a chord progression that you may need to fill or arrange.  Or you could be trying to fulfill an idea which is just a melody in your head.  How you fulfill it, is completely up to you.  In both trades you often end up solving a problem that nobody cares about, but you have learned something in the process.

  4. A Scale of Clear Right/Wrong to completely Subjective.  Computer programming has common "right" and "wrong" ways of doing things.  Some choices are considered wrong, such as gluing SQL strings together, containing user input.  Music has some things that are very "wrong" too, such as playing a Flat 9 over a major chord repeatedly....  But Captain Beefheart would disagree.  Analysis is needed to  understand why a solution is considered "correct" and also that a musical passage is "tasteful" or of "high quality".  These conclusions are based on your personal line of reasoning, preconceptions, and requirements depending on your situation. Finally there is a Scale: A clear right and wrong on one end, and highly subjective decisions on the other.  We all decide differently where to put any given topic on that scale, although many common schools of though exist.

  5. Varying standards for Purity and Aesthetic. In Computer programming there is a certain aesthetic to your code. This includes: how clean and efficient it is, and how prone it is to breaking in the future. In music, you can also distill a melody or arrangement to its most essential parts, and subtract redundant pieces, until you're left with something that's "just right".  Some people are much more strict with this aesthetic than others.  How "cleanly" various roles are performed by different software elements can be correlated to how "cleanly" instrument tracks in a piece of music do their job.

  6. Knowing limits, breaking rules and common conventions. In computer programming, you may choose to break rules on purpose.  For example, you might DE-normalize a database table, building very specific indexes, so that very specific Select statements are quick to run, because you do not have to do any joins or contend with processes.  In music, especially jazz, you break rules all the time in order to create tension.  In more popular styles, you keep changing the well known rendition to keep things interesting for yourself - the musician, as well as the listener. This often involves infusing diverse influences into the rendition. 

  7. Exponential growth in variety. Computer programming has a proliferation of technologies which seem to be exponentially multiplying with the help of the internet.   The number of songs created, new music styles and cultural musical expressions is also exponentially growing.  The challenge for both is keeping up with the trends, and choosing what to even keep up with.

  8. Human Interaction is at the core. Computer programming has people you need to work with.  Some of them are very opinionated, overbearing or overly defensive.  The music industry has very similar types of people that you often have to work with.  Both trades, in my opinion, are as much about people skills as they are about the craft.  This human element applies at every stage:  From designers to customers.  From players to listeners. 
  9. Design determines what you can do.  How you design a piece of software often dictates what your limitations, possibilities and outcomes are in the future.  This applies to music, when you have a rough idea of the style of song you want to compose, the chord progression and the rhythm you have chosen.  It is generally uncommon to have a bunch of completely different, disjointed music styles, rhythms and chord progressions follow one another in the same song.  The "design" of the song must follow some specific train of though, so it can be understood.   The same applies to Software.
     
  10. Conventions, Rebellions and Inspiration. Every time traditional thinking is successfully challenged, we all enjoy the breakthrough.  Whether it's a hugely successful commercial success or a very niche following, we all love it when things are done differently on purpose.  If I can wire up 20 raspberry pies to uniquely control my house, or learn about Pat Martino's unique approach to using Minor Scales, I would be excited and inspired by the innovation factor, and the future possibilities.


Learn how to create your own Programming Language here!!

Beer in the Fridge at work

It makes me really happy to join a technology company and find beer in the fridge, people playing ping pong, sleep in sleeping pods, frying up BBQ at lunch, and playing basketball.  Not because these things are inherently fun.  But because, it's a message from management that says the following:

1. We hire such a high caliber of employee, that they would never consider abusing the perks we've given them.

2. Congratulations on finally getting to the top 10% of the best places to work.

3. People here are smart on many levels, not just book smart. They realize the value of maintaining a flexible mind and body.

4. We are all like minded in our pursuit of excellence.  We are so productive that we have plenty of time left over to enjoy the perks, after succeeding at our jobs. 

5. The company is successful financially, and would stop at nothing to satisfy and retain its employees.

This of course results in people giving back more, and feeding this cycle.

The Mobile Startup: Episode 5: Some thoughts about tech, and work.

Knowing that You're Bad! I think that if you have never thought of yourself as a bad engineer before, then you are probably a Bad e...