From opera to tech

People are often curious to hear how I went from a background/degree in classical music to a career in software. So, I thought it would be worth while to write down my full story. This post is a series of anecdotes capturing what, in retrospect, feel like the key events that allowed me to go from an arts education to a sustainable software career. It ends with some reflections on what I think made it possible.

One quick aside before I begin: this is just my story. The industry has changed dramatically over the intervening years, so I would caution against reading this as a playbook that could be expected to yield similar results today.


Organizing opera recordings

As a high school student I was involved in a local theater company’s opera-centric children’s program. As a result, I became interested in opera. I sang leading roles in student productions, chorus roles in local professional productions and loved listening to recordings of operas.

Living in the nascent age of digital music, I started to acquire a large number of digital opera recordings. Pretty soon the issue of how to organize them on my computer became a pressing concern for me. The existing solutions were all based around iD3 tags, which were woefully inadequate for cataloging all the singers, conductors, composer, chorus, venues, etc. that made these recordings so fascinating to me.

My older brother, a computer enthusiast, suggested a database might be what I wanted. At the time, PHP and MYSQL were the top results for how to get started with a database, so to me it appeared to be the only way. I bought some random book about PHP off a magazine rack, and set to work. I remember spending about three days not able to get the code that I copied out of the magazine into my text editor to work at all. Eventually, I would learn that PHP is case sensitive and I had failed to match case when transcribing the code.

The project captivated me, and throughout my high school and college years, I spent countless late nights, long afternoons, and idle minutes during rehearsals tinkering with it and expanding it. Each new feature I wanted to add, from streaming transcoding to audio fingerprinting, was new topic to teach myself. Luckily for me, when I got really stuck I could usually turn to my brother for pointers.

Software as a job

One evening after graduating college, I was sitting on the couch with my roommate, who happened to do freelance web development for restaurants and small businesses. He was stressing over a deadline while I was happily hacking away on some side project or other. He asked me if I wanted to help him with his work project in exchange for a portion of the money. Being unemployed, it sounded like a reasonable proposition. For the next several years I worked as a subcontractor for him. Mostly building PHP sites for local small businesses.

I learned a lot through this work, but after a while I started to hit a ceiling. The budget and scope of these projects did not allow for growth or the luxury of focusing on software as a craft. I learned about a conference (the first Laracon) which I thought might help me grow and asked if he would pay for me to attend. He declined, but pointed out that if I really thought it was a good career investment, I should pay for myself. I did. After working in isolation for so long, it was an eye opening experience, and I gained a lot of perspective about what the rest of the industry was like.

It cemented by suspicion that a full time job would offer the growth opportunities I desired. But, I was still terrified that I wasn’t qualified, or would be unable to cope with the expectations of a full time job. In retrospect part of this was influenced by the fact that both my parents were self employed and I didn’t have any examples in my life of adults who were happily employed at a full time job.

With some much-needed encouragement from my wife, I decided to take a risk and try getting a full-time job writing software.

On my last day doing freelance work a friend, who I knew as an amateur musician but who also happened to be a software engineer, coincidentally reached out asking if I was looking for a job. The ~200 person startup where he worked was hiring, and there was a lucrative referral bonus waiting for him if he referred someone who got hired. I put together a résumé, called my brother to ask what “big O notation” meant, did a phone screen, and to my surprise not only got an interview, but passed it.

I later learned that the cofounder/CTO had originally planned to reject me based upon my lack of formal qualifications, but had been talked out of it by one of the engineering leaders (himself self taught) who pointed out that if they turned down people without degrees, the company would have missed out on people like himself. I am forever grateful to him for sticking up for me in that moment, and to the CTO for being open minded enough to listen and take a chance.

Going full time

At this new job I learned Python and had my first taste of real engineering practices, both in terms of writing software and working in a larger organization. I loved it. It turned out that a full time job was significantly less stressful than freelance, because you get to just focus on the things you are good at. Also the pay and benefits are a lot better. Over the next few years, I became particularly interested in JavaScript. I became the local expert within the company, started contributing to open source projects, and even created a JavaScript side project which happened to get picked up on Hacker News. It’s probably not a coincidence that the side project, an in-browser clone of the venerable audio software Winamp, was also related to digital music.

That Hacker News post attracted the attention of a Facebook recruiter who reached out to see if I would be interested in interviewing. I reflected on the fact that while there were many brilliant engineers in my company, from whom I could learn, there weren’t many people who could help me progress my interest in JavaScript. At the same time, between Jest, Prettier, and React, I knew that some of the most interesting JavaScript work in the world was being done at Facebook. So, once again, I called my brother for a primer on big O notation, read up on typical interview questions, and did the interview. To my even greater surprise than last time, I was offered a role.

Big tech

For the last seven years, I’ve worked at Facebook/Meta, and grown tremendously as a software engineer. As I had hoped, I’ve had the great privilege of working with, and learning from, some of the most brilliant, kind, and patient, front end engineers in the industry.

Reflections

I believe that my ability to get, keep, and enjoy these jobs despite not having any formal training is really just the result of genuine passion for the subject. I first encountered software as a means to achieve something I personally cared about. First it was organizing my music, then classifying operatic voices, eventually preserving Winamp skins and more. This has meant that software has always felt exciting to me, since it was a tool that helped me accomplish things I was passionate about. I never sat down with a goal to “learn software”, but rather I had problems I was excited about solving, and I found software could help me solve them. How cool! When you’re excited about something, it’s not hard to spend lots of time thinking about it and learning along the way.

I’ve seen how this externally motivated learning has helped me shine in interviews. When asked questions I nearly always have some personal experience which informs my answer. Not only has that meant that I have something well-informed to share, but it also gives me a concrete context in which to discuss it. Sharing the project or problem I wanted to solve, and how this aspect of software helped me solve it, implicitly conveys my genuine enthusiasm, which comes across well in an interview.

I’ve also seen how this passion has helped me stay enthusiastic about my job over these many years. I still wake up most mornings genuinely excited about the problems I get to solve, and when my brain is idle it naturally gravitates toward chewing on whatever challenging problem I need to solve for my current side project or interesting work project. I’m not sure I would have been able to last this long doing this kind of work without that.