Themes and Variables
As I begin my journey into the world of full stack web development, I find myself reflecting on the similarities between this world and the world I inhabited previously as a musician and music educator. For the past 20 years I have conducted and been performed in musical ensembles, large and small. Many of the concepts and skills we use as musicians transfer well to coding.
Both music and code are based on a symbolic notation — notes, accidentals, dynamics, articulations are markings that all contain rich meaning for musicians. Furthermore, music, like computer code, executes in a time space. The program runs, the performance starts. Both musicians and the processor interpret the code to a (hopefully) successful coda. A successful composer or arranger understands how these symbols will be interpreted by musicians. Syntax is important. If these symbols are placed out of order (eg. a flat sign to the right of a note instead of the left ) or in a way that is not customary, sight reading musicians will hesitate and the execution of the code (the music) and will crash. Every musician knows the experience of an ensemble going up in figurative flames when encountering confusing notation or a particularly difficult passage.
Successful coding is the cycle of planning, coding, executing, debugging and repairing. As we add features, the code breaks, we debug the problem code, often running smaller portions of suspect code in isolation, come up with a solution and run again. Likewise, the rehearsal process involves identifying when a passage is not working (unexpected sounds are our error messages), diagnosing the problem (intonation, balance, lack of precision?) and finally coming up with a strategy for fixing the problems (rehearse a few measures at a time, just the clarinets, at a slower tempo) until things work. The process is the same — run, debug, fix, and re-run.
The key to success in either of these endeavors seems to be, in part, developing a systematic process, good planning. Before rehearsing a work with an ensemble, I spend time planning, reading through the score. What is the intention of the composer? What are the larger structures in the work? Where am I apt to run into problems? What sections will need the most attention? When I have a coding challenge, I first look at the big picture. What is the story? What are the deliverables? What structure will best fit that code’s eventual demand for scalability?
We live in a rapidly changing world. The bootcamp I’m involved in involves a number of participants who are moving to coding from other careers. It’s important to take stock of the skills we’ve learned in our other lives, many of which will transfer directly or indirectly as we learn the art of coding. It’s a new world for many of us, but maybe not so different as we sometimes think.