Yes. You can be a good software engineer if you just do it for the money.
Yet I've seen dozens of tweets, blogs and YouTube videos that suggest it's not possible. The argument is usually some variation of the following:
Software is hard and it changes all the time. If you aren't passionate enough to always be growing and keeping up with new tech in your free time, you won't be able to make it as an engineer.
I agree: writing software is hard, and it does change all the time. You know what else is pretty difficult and changes frequently? Corporate law.
Law school is notoriously difficult, and if a lawyer doesn't keep up with changes in legislation & regulation, they are putting their clients in a devastating position. Also, mastering the art of high-stakes corporate defense in the courtroom is probably as difficult as mastering the most complicated computer science topics.
As it turns out, when you talk to these high-priced lawyers who bill out between $200-$500 an hour, hardly any of them got into law because they were passionate about protecting mega-corporations against antitrust lawsuits. They did it for the money.
You'll find countless successful individuals who are driven by money in other well-paid careers, including medicine, finance and advertising.
Why would software engineering be different?
Passionate developers are great. I consider myself one of them, and I spend a lot of my free time learning new languages & frameworks to keep up with the industry. I enjoy it. I own the Gang of Four's Design Patterns book, and I've tried to incorporate my learnings into the code I write. I've learned multiple JAMStack platforms to build lightening fast websites.
These habits aren't without their downsides though. Time spent tinkering with a new framework is time that isn't spent adding new features to software. While learning multiple platforms means I can use "the right tool for the job," it also means I'll frequently have to switch contexts as I switch among projects using different tools and paradigms, slowing things down. And sometimes, that clever pattern I find in a software book ends up becoming five layers of unnecessary abstraction. This happens because I'm passionate about code and want to try as many interesting things as I can.
While passion is great, it doesn't necessarily equal productivity.
Engineers without a deep passion for code often end up being much more practical about how they approach building applications. They can identify the most popular languages, use those in their projects, and change only when there's an actual business need. Working with fewer tools means it's more affordable to train new team members and maintain software.
As an industry, we often lack this level of maturity and fall victim to shiny object syndrome.
There are people who buy their first laptop to attend a code bootcamp because they want to provide a better life for their families. I'll bet they will have more than enough drive to become excellent engineers, even if they never develop a passion for code. They will likely be incredibly pragmatic in their approach to software, focusing on shipping code rather than making micro-optimizations.
Meanwhile, developers who are passionate for the intricacies of code and patterns can deep-dive into the gnarliest problems at every level of a codebase, shaping quality abstractions and exploring new solutions.
When you leverage the strength that each of these developers brings to the table, you will have a stronger team, faster iteration cycles, and a quality codebase that is easier to understand. This is a key strength of diversity in engineering.
As an industry, I hope we can find a place for both passionate and pragmatic engineers who are eager to reap the benefits that a software engineering career provides.