I always have to snicker whenever I see a job posting asking for "rock star developers". What does that mean? I picture someone who draws attention to themselves by the sheer force of their software engineering acumen, coupled with an over-sized ego and an even bigger dope addiction.
"Rock star developer" used to mean one thing but now is meaning something else. I sometimes look at those job postings and wonder if these employers would prefer a "classical developer" instead.
I am a classically-trained musician, although you wouldn’t know it if you heard me try to bang through the Tocatta by Aram Khachaturian. When I was learning the first movement of Ludwig Van Beethoven’s Moonlight Sonata, I wasn’t concentrating on the individual notes so much as I was listening for the overall harmonic rhythm. I could sense when one diminished seventh would fake out a resolution to another diminished seventh, till it finally reached the tonic, which was not necessarily in the root key established at the start of the piece.
Do you play music? Did all that sound like gibberish to you? It’s probably because you weren’t subjected to four semesters of music theory, which is the music major’s equivalent to organic chemistry. If you don’t survive the theory classes, you were pretty much persuaded to switch majors.
But some musicians don’t need to speak that language. In fact, most musicians never speak that language. They just develop an instinct for what sounds "right". U2 prided themselves on the fact their earliest songs were nothing more than music exercises jumbled up to become songs. (On some level, though, that’s how it’s supposed to work.)
U2 are rock stars. They probably still don’t read music. And honestly, they’re wealthy enough not to need to.
By that token, I could probably be a "rock star developer". I don’t necessarily know what design patterns are. I may not be able to tell you what "cardinality" and "polymorphism" are off the top of my head. I write database queries with joins and outer joins all the time, but if you asked me to explain how they work, I’d probably mumble and stammer.
Makes you wonder how I make a living as a web developer.
I’ve been building web applications since 2000, so at this point, you’d think I’d pick something up. And I have. I’m just not necessarily cognizant of what. I know I have holes in my knowledge, but I don’t know exactly where they are. My coding style could probably best be described as "instinctive".
Very much like a rock star. Or at my level, a rock musician. (I don’t have the ego or the blow to be a "star".) Knowing the difference between an augmented fourth and a diminished fifth won’t effect whether you can shred through a guitar solo, but even a little music theory could go a long way in enriching your harmonic language.
What I should really be doing — and what I aim to do in the next several months — is become a "classical developer", someone who can map those nebulous concepts with an actual vocabulary, someone who knows why best practices became the "best", someone who can actually explain what "cardinality" and "polymorphism" mean.
Of course, the hazard of having classical training is being shackled by it, and no world is more inflexible than classical music. What’s on the page is what should be coming out of your instrument. That is the rule of law, and audiences will let you know when you break it.
The trick, then, is to lean on that training without being beholden to it. When I work on my own material, I’ll keep in mind what the common chord progressions are — then try to find ways around them.
I’m at a point professionally as a developer where I want to do something and know what I’m doing. And, uh, it’s kind of long overdue.
Have you heard the story of how Paul McCartney "composed" his classical piece, Liverpool Oratorio? He had someone with music training transcribe what he was humming.
I don’t want to be like Paul McCartney.