What is popular in the tech world changes constantly, but these are some fundamental masteries that I think will always make a software engineer valuable. Here's why:
- 📖 Base computer science knowledge: You learn new technologies, and adapt more efficiently with a solid base of core knowledge to build upon (algorithms, data structures, network protocols, the operating system, low level mechanisms, binary operations, etc). Formal education in Computer Science is the best way to build this base, in my opinion.
- 🎯 Common sense and reasoning: It's important to know patterns, clean code, optimizations, and abstractions. But it's more important to know when to apply them. Applying them wrong, or at the wrong time, is often worse than not applying them at all. Performance is good to have, but should we spend half the sprint to make a button a few microseconds faster, while making the code less maintainable in the process? There's always a tradeoff between: performance, clean code (code that looks good in books), maintaiable code (code that's easy to modify when requirements change), delivery time, deadlines, tech debt, and team harmony. Also, common sense suggests we should stop nitpicking, as it degrades team harmony, kills development momentum, and distracts people from the more important problems.
- 🤝 Communication and teamwork: We are people working with people to build tools for other people. Efficient communication between all the parts involved is mandatory for achieving meaningful results. But it's not always an easy task to find the perfect plan for meetings, presentations, standups, announcements and updates. In a software engineering team there's often at least one person who is not engineering software, but actually engineering people.
- 💡 Information synthesis and self-learning: Knowing how to know. The skill of gaining skills. Finding information and learning on your own is something you will never stop doing as a software engineer. Take a look at your online search history and you will see that not a single day goes by without you seeking to learn. Therefore it is an important skill to polish, to be able to filter out the irrelevant information while focusing on what you need.
- 🫶 Passion and enthusiasm: Work is hard sometimes, and we get tired. To be able to do your work with joy is not easy, but is a skill that can be learned. And if you learn to be passionate about your work, it will help you stay sane, and will make you a more enjoyable person to work with.
- 🦎 Tehnical flexibility and adaptibility: Software engineers need to be flexible enough to adapt to the ever changing world of technology, in order to keep being software engineers. You can sink with your ship, or keep swimming to find a new one.