1.1. What is a Software Engineer?
A software engineer is someone who designs, develops, tests, and maintains software systems.
Some examples of software systems include web applications, mobile apps, desktop software, cloud services, embedded systems, operating systems, developer tools, and a lot more.
It is the job closest to society's perception of a "programmer" or "coder," and it's the role most people have in mind when they start studying computer science.
Software engineers use programming languages and tools to build software to solve real-world problems. They work closely with teammates — like designers, product managers, and others — to create software products that meet user needs and business goals.
However, software engineering is not the exact same as computer science (the degree you are likely pursuing).
Computer Science vs Software Engineering​
Software engineering is an applied discipline built on top of computer science. Many students mix up the two, and this misunderstanding often leads to frustration when they realize a computer science degree doesn’t directly prepare them for a software engineering job.
Computer science focusses on the theory behind the principles of computation, algorithms, data structures, and the underlying mathematics of computing. It provides a foundation for understanding how computers work and how to solve problems using computational methods.
Software Engineers apply this knowledge to build software systems that solve real-world problems, while Computer Scientists study the theoretical aspects of computation and develop new techniques that can be applied in software engineering.
For example, a Computer Scientist might develop a new algorithm for sorting data more efficiently, while a Software Engineer would utilize that algorithm in a real-world application.
Here's a simple analogy to help clarify the difference:
Software Engineering is built off of Computer Science in the same way Physics is built off of Mathematics.
Knowing how to do complicated math proofs doesn't mean you know the physics to build a bridge, and knowing how to write a sorting algorithm doesn't mean you can build an app.
A common mistake I see is students overemphasizing theoretical knowledge over practical skills when presenting themselves through resumes, projects, and in interviews.
You have to understand that most of the jobs in tech are applied roles and employers are looking for people who can build real software systems, not just those who can recite algorithms or data structures.