Due to some unforseen personal circumstances, Part 3 of my high school math series is running behind schedule. This week, I’d like to talk about the different job titles in tech fields and what they mean. Something to keep in mind is that there are no protected job titles in tech - there are no certifications required to call yourself “software engineer” like there are for registered nurses or professional engineers in civil engineering. This means that the distinctions between different job titles can be fuzzy and vary from company to company. It is also a contributing factor to the proliferation of coding bootcamps. Some organizations, especially those associated with the US federal government, get around this by classifiying everyone as “member of the technical staff” and assuming that technical staff can perform a wide range of skills as needed.
Software Engineer/Developer
This is a very common job title with many sub-headings. In theory, a software developer focuses on a particular part of a system while an engineer focuses on the whole system, but this is one of the blurriest distinctions. This would mean that a developer would focus on writing the code that allows me to edit this article on the Substack website, while the software engineer would be responsible for figuring out how that functionality goes into the full Substack website. Software engineers and developers can work on all types of software and can have more specific job titles such as:
Frontend Developer - Someone who focuses solely on the customer-facing part of the website, like the menus and graphics.
Backend Developer - Someone who focuses on the “hidden” part of a website, such as the way it “talks” to other applications or stores data
Full Stack Developer - Someone who does frontend and backend development
App Developer - As the name implies, someone who only develops apps
Embedded Software Developer - Someone who writes code for specific chips or hardware, not necessarily a computer. This is the person that makes robots move.
Algorithm Developer - Again as the name implies, someone who develops algorithms. This is the person who figures out the math that tells the robots how to know how to move. You can think of the algorithm developer as a brain, figuring out high-level information, “the robot needs to walk towards a door”, while the embedded software developer is the nervous system that tells the rest of the body how to actually carry out the high level command, “contract the muscles in your leg”.
Machine Learning/AI Jobs
There are three main jobs that fall into the machine learning/AI header. A data engineer builds pipelines that can collect and manage raw data. A data scientist is responsible for analyzing data. A machine learning engineer is responsible for developing machine learning algorithms to solve problems. Let’s say our robot from the example above is only making it to the door 70% of the time. A data engineer would be responsible for setting up a system that can collect data from all the robots we have and pulling out the part we care about. The data scientist would then take that data and look for trends - are there specific conditions that cause the robot to fail? After the issues have been identified, the machine learning engineer would identify a flaw in the current neural network model that controls the robot’s high-level algorithm and architect a fix. In smaller companies, all three of these roles can be performed by the same person. Alternatively, at very large companies these roles can be divided still further, like a database engineer who is only responsible for maintaing the database of raw data the data engineer is getting.
Information Technology Jobs
Information technology (IT) jobs can be divided into a few big categories:
Quality Assurance - Someone who performs testing on software. Manual software testing can mean clicking around a website in a deliberate fashion in an attempt to find bugs. Automated testing can mean writing code called “unit tests” that check every possible input and output configuration of a piece of code to ensure there are no cases that break it.
System Administrator - Someone in charge of managing computer systems. If you work in an office, this is the person who tells you what software is allowed to be installed on your system. System adminstrators are critical in any company that uses computers because they are in charge of making sure all the computers are running, up-to-date, connected to the Internet, and have available storate.
Network Administrator - Similar to a system adminstrator, the network administrator is in charge of maintaining all the networks at an organization. While a system adminstrator may upgrade your phone’s software, a network adminstrator would be the one who makes sure your phone can use 5G.
Cybersecurity Engineer - It is debatable if this belongs under the umbrells of “IT” or is its own category, but cybersecurity engineers are the ones responsible for making software applications safe and secure. They are the ones who develop the code that makes it safe (theoretically) for you to pay with your credit care online without fear of it being stolen. They are the opposite of hackers usually depicted in media. The show “Mr. Robot” has a realistic view of what cybersecurity professionals and illegal hackers do.
DevOps Engineer - This role is difficult to explain to people without a software engineering background because it is rather abstract. DevOps is a way of approaching software development that lets the developers and the integration experts work together. Instead of an algorithm developer working on an algorithm until it is perfect, then handing it off to the data engineer or embedded engineer and saying “put this on our product”, DevOps allows those teams to work together. The Atlassian website has more details about DevOps in general and DevOps engineers in particular. A MLOps engineer is someone who applies DevOps principles to machine learning.
Management
Confusingly, the two most common software management positions are both abbreviated “PM” - product manager and program manager. As the name implies, product managers care about the strategy and direction of products, while program managers do the same for programs. This may sound like the same thing, but often it is not. Boston Dynamics has a famous legged robot called “Spot”. A program manager at Boston Dynamics may focus on a program that is supposed to use Spot to search for survivors of earthquakes. The program manager would be in charge of finding people at Boston Dynamics that can write the code that makes Spot do this, developing a timeline, and managing budgets. The product manager cares about Spot as a whole, and will be deciding on a strategy for Spot - do we want to focus on improving speed or accuracy? Will Spot be branded as a disaster recovery robot or one that helps around the house? This will require working with the program managers to make sure their programs are aligning with Boston Dynamic’s overall strategy.
Another well written and informative article. I feel myself getting smarter.