I have a personal theory that work related to software engineering can be split into three main categories:
- Sofware engineer does not need to deeply know computer science theory, you just need to know how to manipulate data, how certain protocols work, and the language you are using
- e.g. a backend web developer need to know http, a backend language, and how to push data around
- Handle big systems (e.g. EC2, distributed system with millions of requests), needs to deeply know an area of computer science (e.g. distributed systems, data science)
- e.g. Software engineers at AWS, Facebook
- Innovates by researching a field and proposing new theories/implementations
- Needs deeply knowledge in Maths and different areas of Computer Science
- e.g. People creating frameworks or systems like Kafka, TensorFlow…
I think most software engineers work on the first and second categories. The first category will probably one day be replaced by no-code/low-code frameworks.
The second category will sooner or later only be required in very large organisations. And the third category will always exist and it’s closer to the Academy.