I like reading through my old CS coursework every so often. It's fun to reminisce, and it's in a way validating to see how far I've come since then. It's also a little bittersweet.
During school, I was passionate about the field. I read research, I had side projects and open source contributions, I learned (and was genuinely excited by) new languages and frameworks. Everything seemed fascinating, new, and all I wanted to do was explore that. It was, for a few years, something close to an all-consuming focus.
Now? Not so much. I can't remember the last time I built a toy webapp over a weekend. 1 If I'm reading something related to engineering, it's more likely something fuzzy or soft rather than a piece of research or a tutorial on a new tech stack. The obsession and fascination is, if not entirely gone, then in an indefinite quiescence.
That's uncomfortable to write. We get signals all around us – from blogs, job postings, books, TED talks – about passion. We should cultivate it, and, if we don't experience it, should find a new line of work. I had to fight myself to not add some obligatory apology to the preceding paragraph - I'm still good at what I do, people like me, I do good work, etc – as if not being passionate is something I should apologize for.
I think this focus on passion is mostly wrongheaded. I'm not going to argue that general point here. Instead, I want to dig into a couple aspects of this narrative.
There's a certain false dichotomy that I see in discussions on passion and software careers.
On one side, we have a passionate engineer who lives and breathes code, puts in long hours at a day job, makes groundbreaking side projects or open source contributions during free time, gives conference talks and so on. Similar to how we might think of certain artists or authors, code is life, life is code. 2
The alternative is a sort of mediocre tedium. While not cut out for the field (by dearth of passion), this person might learn one framework well enough to get hired. Maybe the most they can hope for is a sympathy promotion to senior amid a career of drudgery. People are all passionate about something; failure to be passionate about your career means that you're not in the right career.
I think this is a harmful dichotomy. A profession can be a net positive contribution to your life – bringing fulfillment, challenge, even joy – without being a singular all-consuming focus. Blogs, internet discussions and so on don't always capture this, but I'd argue that it's a more common case among working developers than either of the two extremes above (based on my own experience, anyway). I know that my grandparents (for example) enjoyed their work and derived meaning and satisfaction from it, but I would not for a second think of asking my grandad if his work (maintaining telephone wiring and infrastructure) was his passion in life.
As I said above, I wouldn't describe myself as passionate. I also really enjoy my work. I like being part of a bigger whole (the company); it's really satisfying to look at the cool things that the company does and know that I contributed to them. I like interacting with my coworkers; they're good and fun people. I get to be creative when designing systems and solutions to problems. I get to disappear into the zone for a few hours a week writing code. I've grown and improved throughout my career, and continue to do so. It's a positive, fulfilling part of my life, among many other things that take me well away from it.
This one's a little tougher.
If we have two developers of equal aptitude, start them from the same starting point, have one put in 40 hours/week, and the other put in 80 hours/week, who will be ahead in 5 years? Overly simplistic, but also something I see a lot in discussions.
There's a core of this argument that's appealing. Practice helps us get better, and someone putting in more practice could be expected to get better faster than someone putting in less practice. There's nuance to this that makes things murky.
Not all practice is the same. If all I do is play the same scales on my piano, I'm not going to magically be able to play Chopin one day. If I'm being paid to work with a large team to maintain and extend a mature, complex, mission-critical enterprise system, writing a "Hello, world!" webapp in a technology my team will never use may have a middling impact or no impact at all on my job performance.
For senior people, hard technical skills stop being the limiter for career growth. It's important to be comfortable with hands-on work, of course, but it's also important to be able to lead when necessary, mentor and help less senior engineers grow, advocate for your own work to leadership, and think architecturally and strategically about how future work relates to your employer's goals. Passion projects – quite often one-dimensionally technical – will often not address these limiters.
Finally, it's important to acknowledge that there is some truth in here. Passion projects sometimes become well-loved open source libraries, lucrative SaaS products, or otherwise things that substantially benefit their creators. For people just starting out, when technical skills are a primary limiter, the payoff for extra practice, even if it amounts to nothing beyond a hello world app, is much clearer than it is for senior people. While it isn't universal or linear, there is a payoff to extra practice. This is fine. We are not failures because there are other developers who are more skilled or accomplished than we are. 3
It was (and still is) unsettling for me to acknowledge to myself that I wasn't passionate about CS in the way that I used to be. I'm sure it's even worse for people who never were passionate about it. I wanted to write this to reinforce that this it's OK for software to not be your passion if you're a developer. Common, even. You can still grow as a developer. You can still be a valuable member of your team. You can still genuinely enjoy your work. You can still have a future in the industry. You aren't in the wrong field.
For me, the amount of pleasure I get from these essentially "Hello, world!" projects diminished significantly after I put in the time to really deeply learn – over years – a couple of different languages and frameworks. Intro projects can be fun, but will not provide more than a surface level understanding of the technologies used. This will be unsatisfying to people who enjoy a deep understanding of their tools, and also makes these sort of projects highly overrated as ways to "stay up to date on the latest technologies" ↩
There are absolutely people who fit the passionate engineer stereotype. They have an unaffected, intrinsic curiosity and fascination with code, and get ample and joyful returns for the part of their life they dedicate to it. Some people, lacking passion in this sense, are driven enough to work really hard anyway to advance. It's important to acknowledge this; you are likely to meet and work with these people at some point in your career, and it's to your benefit to do so without feeling defensive about their dedication. ↩
Actually accepting this and keeping it as a stable point of self-regard – even when working with people who are clearly a lot better at engineering than I am – was the work of years for me. The payoff was worth it, though. ↩