The Two Classes of Software Engineer

“Software engineer” has become a ubiquitous term for people who write, deploy, architect, or sometimes even simply test code. In reality, I think there are two classes of “software engineers”; those who understand computer science well enough to do challenging, innovative work, and those who just get by because they’re familiar with a few high-level tools. The laziness with which the tech industry has adopted the term “software engineer” has made it harder for us to distinguish between the two.

For the sake of this article, I’m going to refer to those who’ve taken the time to study in-depth as “computer scientists“, and those who skipped the boring stuff to learn how to deploy a React portfolio as “developers“. Keep in mind I just need some words to work with, there’s nothing wrong with the term “developer” and there’s nothing magic about the title “computer scientist”.

I won’t be talking about the differences in job titles among software engineers. If that’s what you’re here for check out this other article on how much money different kinds of engineers make.

It isn’t binary, there’s obviously a spectrum of skill

Before anyone gets too upset, let me acknowledge that the technical skill level of all software engineers could be divided into as many classes as there are engineers in existence. I’m trying to point out that there seems to be a great divide between those who have taken the time to learn algorithms, data structures, and higher maths, and those who took an 8-week crash course in web development.

Stop gatekeeping

i am the gatekeeper 41079851

Sorry, that’s not my intention, and I apologize if I’m doing a poor job of expressing my thoughts.

I think the divide is primarily a result of a simple anecdotal observation I keep making: After engineers find a job they like, they stop learning the hard stuff. Many of us browse Hacker News, a coding-related subreddit, or follow tech topics on Twitter. While better than nothing, there’s a big difference in value between brushing up on algorithms and experimenting with a hot new web framework.

My goal is to articulate the importance of continuing education, even after getting that first great job. It doesn’t matter if you got your start by attending college, going to a boot camp, or taking online courses, you can become a “computer scientist” – there’s no reason to settle as a “developer”.

I also want to point out that I don’t think the distinction between the two classes lies simply in a gap of knowledge. Being a “computer scientist” is more about how you approach and embrace learning and less about what you know today. You’ll never know all there is to know about an industry as massive as the software industry, but the way you go about learning (or not learning) is what will make you successful.

But why? I can make six figures without inverting binary trees

It’s true that both kinds of software engineers earn similar salaries in their early careers (see here and here). In fact, often when people take the university route (I don’t always recommend that these days) to learn CS, they have a hard time finding their first job because they never became familiar with modern tools and technologies. Maybe they didn’t even learn how to use Git. The difference is that people that started on a “computer science” path will have an easier time learning React, Django, Rails, you name it. On the other hand, those that took a “developer” short-cut will have a harder time figuring out how to scale a moderately complex system if they don’t understand Big O.

In other words, it’s easier to learn the fundamentals and then the high-level tools, rather than the high-level tools and then the fundamentals. If you did it backwards don’t sweat it! The important thing is simply to identify gaps in your knowledge and fill them as you have time.

Over time, and often as soon as the first year of employment, “computer scientists” tend to move towards more fulfilling and well-compensated work, whether that’s well-funded open-source projects, technical leadership, or mission-critical commercial systems. “Developers” tend to continue doing what they’ve always done, learn a new framework, use an ORM to make simple database queries, or render information in a browser using a tool someone else made.

Demand won’t always be higher than supply

Currently, the number of people needed in software engineering is still rapidly increasing, but (anecdotally, and if anyone has good data on this please let me know) it seems when I talk with entry-level engineers that they’re having an increasingly hard time landing a first job. With greater competition at the junior levels, it seems more and more apparent that “get-rich-quick” paths don’t often produce the best results.

If you’re still struggling to find your first job, are wanting to take your career up a level, or you’re simply looking for more job security, taking the time to learn more advanced and specialized subjects is the best path.

How can I become a “computer scientist”?

“Computer scientists” find ways to learn CS in-depth, whether through conventional means like taking classes at a local university or by taking the initiative to relentlessly self-teach online. “Developers” tend to exist on the surface understanding, preferring to learn specific languages, frameworks, and technologies rather than their underpinnings. “Developers” only pick up new skills when they feel the fads of the time are changing.

If you seek deeper technical fulfillment, don’t settle for writing CRUD applications and API calls. Don’t be afraid to watch lectures on YouTube, take some challenging CS courses, or start a for-fun project that will require more technical prowess than you’re used to. If you’re interested in learning CS online, check out my other post, “A Comprehensive Guide to Learn Computer Science Online“.

If you’re worried about not being able to prove your knowledge if you’re just learning in an unaccredited way online, look into CS certifications.

Have questions or feedback?

Follow and hit me up on Twitter @q_vault if you have any questions or comments. If I’ve made a mistake in the article, please let me know so I can get it corrected!

2 thoughts on “The Two Classes of Software Engineer”

  1. I agree with your whole general premise, but I do think you should use this argument to better define “Software Engineer” rather than encouraging use of the term “Computer Scientist”. Scientists conduct research and discover new knowledge — engineers with a strong understanding of the science apply that knowledge to solving real world problems. What the world needs is more “real” software engineers. (I have the same quibble with the term “Data Scientist”…)

    • I take your point. I really chose the terms fairly arbitrarily… mostly just because I’m talking about dissecting software engineers and one of the great divides seems to revolve around CS principles. Maybe “software engineer” and “developer” could work though… I’ll think about that

Leave a Comment