As a software engineer, I've learned that mastering the fundamentals is crucial for long-term success in this ever-evolving industry. But, as a newbie engineer eager to make a mark, it's easy to get caught up in the excitement of learning new, shiny technologies and overlook the importance of the basics.
In my experience as a Frontend engineer specializing in Angular, I've encountered many sophisticated technologies and concepts crucial for building robust web applications, such as Rxjs, state management, and SEO. And don't get me wrong; these are essential topics you need to know to build a cutting-edge application.
However, here's the catch: focusing solely on these advanced concepts without laying a solid foundation, you're setting yourself up for failure. Trust me; I've been there. I lacked the basics of how an application works, which resulted in setbacks, bugs, and time-consuming troubleshooting.
So, what did I do to improve my skills? I took a step back and concentrated on reinforcing my core concepts. I reached out to my mentors and colleagues, seeking their guidance on the fundamentals, and I worked on building a solid mental foundation.
Nowadays, I dedicate some time every weekend to filling gaps.
During my regular week, I noted down the ticket, the problem I faced, and the knowledge gap that prevented me from solving my problem more quickly.
The upcoming weekend, I would dedicate time to that topic.
Another example that is particularly interesting for all who do anything Java related is: Study the architecture behind it. JVM, JRE, how Java code is compiled into byte code etc.
This was knowledge I lacked for a long time until I realized that no matter how comfortable I am with Java and how uncomfortable it can be to dive deep into those topics, It was essential to understand the underlying concepts.
The result?
- Debugging took up far less time
- I was able to make more efficient decisions on my software architecture (choice of collections etc)
- I started to appreciate the level of abstraction some modern programming languages provide.
In conclusion, I advise new software engineers to don't neglect the basics. Don't always take the levels of abstraction for granted. Be curious about how and why things work as they work.
Seek guidance from experienced colleagues and mentors and build a solid mental foundation. Remember, balancing learning new, shiny technologies and reinforcing the core concepts is essential. Doing so will potentially save you hours of debugging and will separate you from those, who just copy-paste code from Stack Overflow or ChatGPT.
Top comments (6)
I do agree with building a house bottom-up. However, a more interesting question might be: what if you're facing an opportunity where you lack the fundamentals? What's possible to do then to succeed? (Just to give an example (but let's not stick to it), you with your friends saw a business opportunity, but you lack some fundamentals).
Yeah very interesting question. I can think of many scenarios. Say we have people who are techies but are not super deep in their subject. If I was them I would either think of finding people who have that know how, or I would do it myself in a "learning by doing" way. So while I build my startup or whatever, I would actually learn what I need to build it.
Yeah, that's exactly where I am right now. Have some ideas with other people to build something, but don't really have experience myself, so I'm learning as I do it. And if I hit the wall and have an idea who could advice me, then I go ask.
Alternatively, one could advice to hold the horses and gain that experience before the big bite, but that'd sound like a missed opportunity to me. From my experience, real world conditions are rarely the "ideal" ones, so I'm interested how we still can get things done with what we have. :)
Thanks for the response, looking forward to hear more from You in the future! :)
This is good advice. I agree that once you have an understanding of the basics of core concepts it makes debugging easier as you better understand the underlying issues. Thanks for sharing your experience :)
100% agree you need to walk before you can run. Also while shiny stuff might be interesting, depending on where you work / what you code, the majority of the day to day will likely lean more on the basics anyway.
So a solid grasp of the fundamentals not only helps you learn more advanced techniques easier, it helps you work faster and more confidently on the business as usual items.
I personally find that a sign of a strong developer is working with the "basics" in often novel ways that improve efficiency, performance and maintainability of the codebase.
Thanks for sharing. Really important stuff.