Alex and Rahul and the other senior people on Taro have consistently emphasized how important good software engineering fundamentals are to long-term career success as a software engineer. This is in contrast to learning the latest popular framework or area of development. Can people define what those fundamentals are and how one should go about acquiring/improving them?
Thanks!
The definition of a fundamental is a skill that will be useful anywhere you go. Fundamentals are really interesting as it's not binary either - Even among fundamentals, some are more broadly applicable than others (applying to your personal life as well!).
There's a lot of fundamentals that a software engineer can pick up, and I'll split the categories up into separate comments as there's simply so much to cover. Let's start with my favorite one:
This is by far the most important fundamental IMHO as it is literally useful in every single context, both inside and outside of work. Communication is a massive area that takes almost everyone a while to get good at, but to start, you should watch my entire Effective Communication series: Alex's Guide To Effective Communication
Communication is also connected to many other "sub-fundamentals":
Similar to communication, this can also be applied outside of work. The math is simple: If you are able to get more work done per unit of time than others, you are in a great position. To get better at this, I recommend this masterclass: [Masterclass] How To Manage Your Time Optimally In Tech And Achieve More Results
Here are some "sub-fundamentals":
This one is more specific to software engineering, and I recommend this Q&A from a Meta engineer as a starter resource to learn more about it: "For self-taught developers - How to build my own knowledge system during work?"
Here's the "sub-fundamentals" for it:
I will add one more
The ability to Sympathize with others and understand where they are coming from becomes increasingly important as you progress in your career
Use compassion to understand the need of your teammates
Use compassion to understand the priorities of your managers/directors
Use compassion to understand the priorities of other teams
I've been thinking about this myself lately, but more so from the perspective of what I admire about strong SWEs. In addition to the very important skills the answers so far have already provided, here are some more technical pieces that I think strong SWEs often demonstrate.
Some of these skills I'm actually missing myself even to this day, and I plan to dive into them over the next couple of years.
In terms of how to pick these skills up, most of these should come with the job and being promoted from entry-level to senior as long as your company has good SWE practices. The two that are a little harder to get just from getting to senior alone are "Automation" and the "Fundamentals of Computer Science". Automation comes with your own observations of things that are repetitive and can increase the velocity of you or your teams output. Learning computer science requires school or the combination of self-study and side projects that help you gain those concepts.