tl;dr; software engineering is more than just typing code into an editor and let it run on a computer. Software engineering is a bundle of good practices, tools, methodologies and a certain mindset.
Table of Contents
I’ve “developed” this model with the intention to teach software engineering to our apprentices and interns which often did not have experience beforehand.
So it uses some personal opinions and may lack precise definitions. It reflects my experience in the software industry over the last 15 years as developer, tester, QA guy, engineering manager and team coach.
The inner circle – Programming / Coding
All you need is an editor (notepad.exe would suffice) and -depending on the programming language- a compiler, linker and / or runtime and Bob’s your uncle!
You can write code, you can run it. Make something useful for yourself or some friends. But no strings attached.
The middle circle – Software Development
You may want to earn money, maybe start a little self-employment or collaborate with some other freelancer e.g a designer.
So you might want to use a version control system instead of sending files via email or ftp.
Stakes might be higher as well. Perhaps your customer relies on your product. So you need some sort of documentation.
What did the customer want / what did he actually pay for? Let’s write that down. How does our product work? Write that down as well.
Maybe we rely on external software packages and need to know which version we used to make the program run: time for some dependency amangement tool.
As you might see we are professionalizing our software programming practice bit by bit, by bringing in more tools and methodologies.
Software Quality now becomes an issue, let’s use tests and linting. Perhaps we can streamline the interaction with all those different tools by using one tool for all purposes: here comes the IDE – the integrated development environment.
The outer circle – Software Engineering
You want to scale your company. Do bigger projects. Build a larger product with derivatives.
Time to think more about architecture, a branching strategy and project management.
As I stated in the beginning: this is a mental model. There are no clear boundaries between the circles:
you can of course use version control right from the beginning and set up a CI/CD system for a hello world program.
My main concern is to raise awareness that SW eng encompasses a multitude of tools and practices with a steep learning curve when you try to do all at once right from the start.
By dividing the field into three layers it might be easier to grasp the concepts more gradually and develop your skills from inside to the outside.