🇬🇧🇺🇸 Coder vs Software Engineer

In the tech industry, the people who actually actively write code are an important part of the product building process. Of course, the other parts are important too (management, architecture planning, design, business specifications, etc), but the people who actually write the software are the backbone. After all, you need code to build a tech product.

In the industry, over my career so far, I found out that there are two kinds of people writing code: coders and software engineers.

In this post, I'm going to talk a little about what they do, what are the differences between them and which one you should strive to become (hint: it's not the coder).

What is a coder?

A coder is usually a person who writes code. For people outside of the tech industry, that is a pretty bogus statement. Aren't software engineers doing the same, just writing code? Well, no.

Writing code means just writing the code. Usually, people that don't have a strong grasp on algorithms or don't have a very trained mathematical thinking, break into the tech industry to do just that: writing code.

Entry level employees and juniors usually start like that, because of their lack of experience, they are not given higher level responsibilities such as taking architectural or technological decisions. They are tasked to implement very specific things, following very specific specifications and instructions. Over time, as they prove that they can tackle increasingly more complex tasks, they will be given extra responsibilities and little by little they will transition into being a software engineer.

Don't get me wrong, there's nothing wrong to being a coder. But there are some disadvantages attached: not enough responsibilities are given to them, the opportunities for growth are fewer, and without extra effort on their part, the are chances they will not grow too much during their careers. The worst part about all these, is that writing code is the easiest part of working in a tech sector, and being able to do only the easiest part, means you are replaceable. And being replaceable means lower salary and lower job security.

What is a software engineer?

Software engineers are the people who solve problems using code as a tool. They aren't married to their language, are able to adapt to shifting requirements easily, come up with clever and efficient solutions for any problem, understand that done is better than perfect (and that there is no perfect), and have a good grasp on algorithms, a strong mathematical thinking and good computer science knowledge.

They are able to apply abstract computer science concepts to solve real life problems (eg. binary trees, priority queues, decision trees, acyclic graphs, etc).

Given only a problem, they are able to gather all the data they need, to come up with a solution for it and implement it from scratch in a familiar programming language. Or if it's a new language, they are able to adapt and eventually get the job done.

Some advantages of being a software engineer is that you are able to grasp the business domain of the project you are working on (being able to analyze and understand the business cases and problems rather than, or how I like to call it, the "big picture"), thus becoming a partner in business decision making. When business decisions are about to be made, your input is asked for, to be able to estimate the complexity (if it's even possible to do it) or the time it will take to get done.

This kind of partners, no matter the hardships of the company, the management will fight nail and tooth to keep them around. They become indispensable because business domain and knowledge is the differentiator.

Conclusion

So, long-term is better to strive to be a software engineer rather than a coder. Being problem focused and understanding the business domain of the project you are working on is a game changer, and will allow you to have a better and more satisfying career. But for that, you'll need to put in the work to master the algorithms, computer science and mathematical thinking.

Unfortunately, being a software engineer from the get go is hard, if not impossible: everybody needs to start somewhere. We all start as simple coders, and some of us build up their skill sets over time to advance to being software engineers. It's definitely possible, but it is hard work, every day, being obsessed by problem solving and embracing that no problem is impossible to solve (with small exceptions, that fall into the computer science field. See? Computer science knowledge is useful to also know what can be solved or not).

If you currently identify as being a coder, you better start digging deep into the areas that will unlock the next levels of your career: data structures, algorithms (how popular algorithms work, complexity) and math. I am tired of hearing from peers from the tech industry that computer science and math are useless because you won't have to implement a sorting algorithm yourself. It's true, you won't, but it's important to understand where the bulk of your code complexity is and why your code is running very slow. And God forbid to actually have to implement a sorting algorithm because the default one in the library you are using is too slow for your data.