We've all been there at least once, feeling that we have gained so much knowledge in the past few months that it completely overshadows everything we previously knew.
With that usually comes the question "What should I learn next to grow as a software developer?".
I have personally asked myself that before, still do every once in a while.
Deciding whether to try a new Framework or Language
I believe that these are the deciding factors when choosing to learn a new Framework or Language:
Platforms it is designed for (Web, API/Backend, Mobile)
Differences to the current stack (React vs Angular vs Vue)
Learning time needed to feel productive while working (and do Code Reviews)
Take the following example:
You'd like to start coding Backend on your personal projects so that you can become a Full Stack Developer in time.
You have worked in teams that use PHP and decide to learn it so that you may soon start using Laravel.
After a week you realize that learning PHP is very difficult, and you're not so sure about the decision anymore. What happened?
Well... there is nothing wrong with wishing to learn a new programming language... but it is very difficult.
Let's evaluate PHP based on the decisive factors that we've listed:
Platforms it is designed for: API/Backend
Differences to the current stack: High, a completely new programming language
Learning time needed to feel productive while working: >12 months
It does look like the choice was not one that would allow you to learn more about Backend Development quickly, but rather one that requires you to first learn the inner workings on a new programming language, and then the techniques every Backend Developer needs to know to be proficient.
As a React Developer, your go-to solution to learn how to work with Backend is Node.js, specifically Express or NestJS.
An Express project can be bootstrapped in less than 2 minutes using the official express-generator library, using the following command:
It will provide you with a boilerplate that needs to be extended with as little as environment management, using the dotenv package, and you're ready to start learning Backend Development, without the necessity to learn a new programming language.
Platforms it is designed for: Web, API/Backend, Mobile, Desktop & more
Learning time needed to feel productive while working: less than 3 months
By choosing Express or NestJS you have removed the necessity to learn a new language and you're keeping your focus towards becoming a Full Stack Developer.
Choosing the right thing to learn will greatly impact your learning experience and the results will be the ones you expect.
Becoming proficient in your current technical stack
As a Software Developer, your main objective should be to become proficient in a technical stack of your choice.
My personal web developer career path started with React, when ES6 was being rolled out, with many features and operators still having to be included in projects as experimental.
In the first year I also wanted to learn Backend, and I started with a pre-built CRUD app written in PHP, which I tried to customize, but never got the hang of.
At the time decision was lead by necessity, and my immediate necessity was to be able to have user accounts for my Frontend Applications.
Looking back, choosing to move away from PHP and to learn Express was the best choice I could have ever made.
Thanks to the flexibility and scalability of Express, throughout the following 6 years, I have had the opportunity (and the necessity) to learn:
Micro-services architectures: Ad-Hoc, Docker, Kubernetes and Serverless
Database Query Optimizations: NoSQL and SQL
Networking, Firewalls and Permissions on both self-hosted Cloud Instances and Cloud Services Providers, such as AWS IAM
A lot of techniques to add functionality, secure and optimize Backend Systems
How to create good architecture for Backend Systems that are developed in either one of a highly or non-restrictive environment
And these are just a few of the things I was able to learn by not getting distracted by other programming languages, and even Frameworks. (except for NestJS, which is awesome for structuring a Backend project)
That is why you should stick to the technical stack you're working with on a daily basis.
We never know what the future may bring, I've been reading on DevOps, and I have implemented everything that I learned for our team, from our own Jenkins instance to using SAST and DAST tools, to preventing supply-chain attacks for our clients and more.
The takeaway is: