Programmer vs. Developer vs. Software Engineer
Systems Programmer. Software Engineer. Applications Developer. Have you ever wondered what the difference between these role actually is? Well, your best bet would be to ask the job poster but if they're not available, my opinion might just have to suffice.
Worth mentioning - my opinions are modeled mostly after my own career and some reflection on the titles. Note: I do understand that there is a crowd of people that you can't be a software engineer without an engineering degree. I am not one of those people.
What is a programmer?
Ah, the grit and determination of a programmer. Programmers are the heart of many modern businesses. Often the grunt-workers of your technical wonder, Programmers are similar to bit-factory workers. They're not here to make the technical decisions on how a product is built, but rather they often take the technical direction granted by a developer or engineer and help implement that. A programmer will spend most of their work time in their editor of choice or in a web-browser reading documentation or searching for help with problems. You'll find that StackOverflow is their go-to for solving problems that they're struggling with. As a programmer's skill increases, they'll find themselves with the options to continue increasing their skills as a programmer or to seek out new ventures as a developer. Neither of these are better than the other, but purely a matter of personal preference, in my opinion.
What is a developer?
Given that a programmer takes the time to pursue development, they'll find themselves making several changes to their standard routine. For one, they'll find themselves with a little less time in front of the screen (depending on the tools that they choose to use) as they'll be writing more documentation and architecting a project on the application level. With that said, I fully expect a Software Developer to be able to build a non-trivial piece of software from the ground up and see it through to completion. Whether this software is a Wordpress plugin or a C++ compiler is irrelevant. What matters is the developer's ability to structure their project in an reasonable manner, understand the scope of the project, be able to guide others in contributing, and write role-model-esque code for the project that others can look to for guidance. Similarly to a programmer, the developer can then assess if they would like to further their skills as a developer or to try to tackle the software engineer role.
What is a Software Engineer?
If a developer finds themselves pursuing Software Engineering, they'll quickly be confronted with a path to choose. Software Engineers hit a fork in their career where they're prompted to specialize. You can, of course, choose to dabble in all the paths presented, but I've seen success in others when they pick one and focus on it. The paths that I've seen are as follows:
- Build Pipeline & Tooling
- Performance Optimizations
- Mentorship & Coding Best Practices
- Data Center Infrastructure (or AWS Infrastructure)
- API Development
I'm sure there's many more paths to focus in, but these are the ones that come to mind and that I think make since to elaborate upon.
Build Pipeline & Tooling is a path that focuses on creating a streamlined path to get an application from a local machine and into a production service in a data center or the cloud. Additionally, these engineers often push efforts to maintain the health of that application and will implement recovery strategies to help revive a failed application. Sometimes, that last role is delegated entirely to a Site Reliability Engineer in the web-world.
Performance Optimization-focused engineers are interesting and there's a lot of overlap between the Coding Best Practices path. In this past, I've seen engineers on this path acting almost like sleeper agents, living their day to day engineering life writing code, and helping solve complicated problems. However, just like a sleeper agent with their codeword, they jump into action when there's a performance issue. Some companies have so many performance issues that they're able to always be focusing on these issues. Performance focused engineers can tell you about the performance implications of your code on their platform and code across many paths to help remove these issues. Is your code causing a lot of repaints or reflows in the DOM? Performance Engineers have the skills to fix this problem and hopefully help you avoid it in the future.
Mentorship and Coding Best Practices (Let's call them M&C Engineers) are the engineers that help grow programmers into better programmers (or developers) and developers into better (developers) or Software Engineers. It's common to see M&C Engineers very active in code reviews, participating in pair programming, or leading instructional talks to new hires about how the systems they'll be working on fit together. I consider myself to be a M&C engineer and my goal is to focus on helping others grow into confident programmers/developers/engineers.
Data Center Infrastructure (Let's call them Infra. Engineers) are the puppet-masters behind the massive scale applications like Facebook or LinkedIn. These are the people that fully understand the server ecosystem and can help you determine how your product fits into that. A lot of time for these engineers are spent implementing best practices for servers to communicate with each-other, setting up replication strategies, and handling fail-overs incase your data-center in Singapore goes down due to some unexpected reason.
Lastly, we have API engineers. These Engineers spend their time designing and writing APIs for other programmers/developers/engineers to use. Ideally these engineers are performance-conscious and know how to leverage the features of their language and platform to make extensible and understandable APIs to use. You'll commonly see them working with interfaces, generics, and more if their platform has such features and they'll spend a lot of time working on code shared by many applications. Additionally, you'll find these engineers working on versioning and backwards-compatibility strategies. Sometimes these APIs will be represented as a library and other times they could be represented as a web service or something similar.
Once again, these are my thoughts on the roles. You have options to pursue and I'm not trying to tier these in any way. You may notice that if you want to spend as much time as possible coding, the programmer role might suit you more, while the engineer role might have more business impact. Do whatever makes you happy and remember that these are just my opinions. You can always define your own role, too!