My teacher once said that the purpose of programming is to get a computer to act in a desired manner. This is also the purpose of playing music, to get a piece of music to come out in a certain way. The selected instruments and selected programming languages affect the outcome, whether a song or software. Like good music, good programming requires creativity. To master programming you must be willing to break boundaries, to think outside the box, and be always prepared to reappraise your skills. You need to be humble and recognize that you can always learn and improve.
Instruments are selected according to use. If you are going to play a song appropriate for certain environment you do not use musical instruments that belong to a whole different genre. Many classical music lovers would not appreciate the use of electric guitars and accordions in the concert hall, just as users of Microsoft’s Enterprise solutions do not necessarily value of Linux-based software solutions. Some things just don’t fit together.
Good music also requires a conductor and producer, one whose job it is to ensure that end result meets expectations. We call them project managers. Few musicians can make music just for themself and completely on their own terms. The artist always has constraints, set either by the record company or by external economic realities. Music is a business, certain products sell better than others and they can be tailored to specific audiences. This is not very far from the software industry, where the customer plays the part of a music listener, the one who pays for the work done and puts the bread on the artist’s table. The company is, therefore, a programmer’s record company, project managers their producers, and the programmers themselves play the part of studio musicians and artists.
Keyboard is the programmer’s instrument. We do not need to tune the strings of a guitar, but instead we tune our brains, enter our flow, close off the outside world and progress towards our goals. First a programming builds the software’s basic structure and proceeds to create the basic rhythm. If the chorus gets repeated too often, song easily becomes too “heavy” and cumbersome to listen to. The same applies to software structure. Complex, diverse works of music and programming also both require more time to absorb and understand.
Like musicians programmers also leave their mark on their work. Do you remember a moment when you were listening to music, thinking, “brilliant”, “genius” or “that’s it!”? Or are you those people who take a holistic approach to listening music and just enjoy the experience without any analyzing? Well, I belong to the former group. I cannot listen to a piece of music without analyzing the instruments used, nuances and other subtle things that make the music brilliant.
It’s really the same experience when I’m reading the source code of a program. I cannot help but to review the way the software is build, the genius of the design (or lack thereof) and other things that make the program what it is. It is quite difficult for me to use software without wondering why it works the way it does, and how it is done. This constant awareness of the quality of any software I am current using can sometimes be rather depressing, but in many cases it has helped me to appreciate the talent and creative spirit of the developers and the hard work they have done to make the software work