Software engineering is an incredibly diverse field. It takes whole teams of developers working across a wide spectrum of disciplines to create modern apps. Even more confusing, not only are there many different types of engineering jobs, but there’s also many different types of software:
Although it would be impossible to list every type of engineering job (especially considering the countless ways that software is used), I’ve grouped many of them into rough categories below according to their role.
The reason I’m starting with this category is that it’s the broadest. Whether you’re creating a video game, a mobile app, a desktop app, or just about any other kind of app, you can usually divide the software into a front-end and a back-end.
While back-end and front-end engineers account for the bulk majority of most development teams, they tend to focus more on functionality and less on logistics. Logistics, however, doesn’t just happen on its own. There are entire jobs dedicated to solving the problem of how all this software actually gets run, on what hardware, on what operating system, on what network, on what database, and with what configuration settings. DevOps (Development and IT Operations) jobs, for instance, are all about maintaining and managing infrastructure. Sure, this includes the production infrastructure (what the software runs on when it’s live), but it also can include the automated components that integrate, test and deploy the software.
DBA (Database Administrator) jobs help other developers focus on writing new features by ensuring that the database is always running smoothly. They also work to ensure that the database schema (the ‘blueprint’ of how data is organized) is designed efficiently. Data engineer jobs solve the problem of getting large amounts of data into and out of the app. It sounds like a small problem, but in reality, it can take an entire data department to tackle it. This job can involve parsing data from one source, transforming it into another format, and then inserting it into its final destination. This is especially true when data needs to be constantly fed into an app to keep it up to date.
Ensuring the quality and security of a large software project is crucially important. Also, without solid automation, this task can quickly become overwhelming to accomplish. This is why these tasks have their own dedicated engineers.
QA automation (Quality Assurance) jobs focus on writing software that tests other software. These tests may include unit tests where each chunk of code is tested individually, integration tests where multiple chunks are tested, or even functional tests where the entire system is tested, sometimes at a browser level, to ensure that everything works together.
Security engineer jobs focus more on ensuring the security of the software. They analyze the software for flaws, make recommendations to developers, and set up secure policies and configurations. Like QA automation, security engineers can also set up automated tests to check the software for common issues and design flaws. This kind of testing is commonly known as ‘pen testing’ or penetration testing.
Although machine learning (artificial intelligence) isn’t a part of every software project, it is quickly becoming that way. This means that machine learning engineers are rapidly growing in demand.
Machine learning jobs tend to focus mostly on creating ‘models’ by training algorithms on test data works using models.
A model is a mathematical representation of a certain subject. It allows the computer to sort of ‘understand’ how things work so that it can transform inputs into outputs that make sense. Take for example image recognition. A machine learning engineer might ‘model’ what cats look like mathematically so that the computer can recognize them in photographs.
Although front-end and back-end engineers make up the bulk majority of most engineering teams, they are far from being able to do everything on their own.
DevOps, DBAs, and data engineers help keep teams focused on features instead of logistics, QA automation and security engineers help keep code tested and working as expected, and machine learning engineers create powerful models that can be used to recognize images, translate text, classify trends, and more.
As you can see, there are many, many, many types of software engineering jobs. I’ve only covered a small fraction of them at a rather high level, but I hope I’ve given you a 10,000-foot view of the kinds of jobs that are out there.
Discover where Holberton Graduates work after attending the school.