Okay, let's be honest.
Many (and I mean...many) software "engineers" are NOT engineers at all and here's why:
Many (and I mean...many) software "engineers" are NOT engineers at all and here's why:
- They do not use even the most fundamental engineering principals, ever.
- They do not take time to understand the problem they're trying to solve.
- They do not take time to understand the current shape of their system.
- They do not consider the costs and trade-offs of their solution.
- They only think about code.
These are not engineers, these are programmers and only programmers. They do NO engineering at all. Writing code is NOT engineering.
Here's how to be a real software ENGINEER:
Step 1: Understand the Problem
If you don't understand the problem, you can't possibly find a good solution. So start by understanding the problem.
Here's a hint: all problems in software are data problems, so if you don't understand the data, you don't understand the problem. Mike Acton gives a great intro to this in his talk on data-oriented design: https://www.youtube.com/watch?v=rX0ItVEVjHc - you can still apply these ideas in an object-oriented world if that's your thing.
Step 2: Understand the System
If you don't understand the current shape of your system, you can't possibly know how to best fit a solution into it (or how to reshape it so a solution can fit). So spend time understanding your current system.
Hint: Focus on the parts of the system that are related to the problem you're solving....in case that wasn't clear.
Step 3: Engineer a Solution
Now take your understanding of the problem and the shape of your system, apply some fundamental engineering principals, pay attention to the costs and trade-offs you encounter, and sprinkle in some creativity to land on a reasonable solution.
Only after following these steps should you start coding the solution you engineered. That is all.