Originally published on my blog MullinStack
No Winners in the Crazy Frameworks Race
This crazy race has no winner at all since it is neverending. That’s it! Yesterday you were learning Backbone.js, jQuery, Knockout.js, Ember.js, then AngularJS and now ReactJS, Next.js, Vue.js, all Angular flavors. Today, up comes Ext JS and Aurelia, the new ones. And tomorrow another will come up. The framework array list is endless.
So I Shouldn’t Learn a JS Framework?
No, no, I’m not saying that. Actually, you should learn them — but without wasting most of your precious time on them. By this I mean that time is limited and we should invest wisely in what really matters. I know there is an insistent temptation to learn the more modern tools, frameworks, libraries, some of them listed above. This is because all the world — your colleagues, the forums, platforms, communities you follow — are bragging about the new cool stuff they have and how easily you can accomplish your development goals. Have you experimented with that? I think more than one of you have had that temptation and have fallen down on. I understand why this happens. As developers, we need to stay up to date with the technology.
I should recognize that some years ago I got carried away by this temptation. Remember, the purpose of a framework is to give you a real speed-up to your development journey, to gain velocity. It’s in charge of complexity and abstract things, offering you a shortcut to speed up the process of coding, among things. But that doesn’t mean you’ll master and become a strong, knowledgeable JS developer. It means you’ll know what to do but not why or how things work under the hood.
I also know that, like everything in life, there will be detractors and lovers of my point of view. This piece is just a guide, a piece of advice. It’s based on my personal experience and a huge number of complaints I have seen in the programming discussion platforms on LinkedIn, Reddit, Dev.to, Medium, Facebook groups, etc.
I will touch upon just a few core concepts for the purpose of a good read. The rest of them I will just list so that you can keep them in mind. In my next pieces, we’re going to dig in to know what wraps each of them.
A closure is simply a function inside of another function that has the ability to remember its execution context. This concept is pretty tricky even for seasoned and experienced JS developers. I have been trying to grasp fully concepts around closure for a long time. It might look easy, but it’s not. Sometimes we’re not even aware that we’re in front of a closure. If you have a good understanding of closures, you can read and understand more complex code. For instance, you can dive into the source code of your favorite framework and start to understand its code.
And, of course, you should also be caught up on the latest ECMAScript specifications: ES6, ES7, ES8, ES9, ES10, ES.next …and beyond.
Where and How to Master Those Concepts
Apply the 80/20 rule in your learning process
As we have discussed before, new frameworks and libraries will come and then go away. That’s what we have been seeing in recent years. A good approach is to set up a good learning system if you want to catch up with the trends. It’s what’s called the 80/20 rule: Invest and focus 80% of your time learning core concepts, digging in more every single day. Then spend the remaining 20% investing in the hottest and coolest tool.
Instead of being worried about learning trends of JS frameworks/libraries, you should read the following resources. The most important thing about them is that some are free! So, no more excuses!
Clean Code: A Handbook of Agile Software Craftsmanship
The Pragmatic Programmer: From Journeyman to Master
You Don’t Know JS Yet
You are the master of JS
If you know how the engine works, how to predict how a function will behave in a given scenario, or how the scope works, I dare to say you’ll save time when things don’t work as expected. Also, you’ll have greater odds of creating better and higher code quality.
Thanks for reading! If this story turned out to be interesting, I’d really appreciate it if you like and share it with your friends. I hope to add a little bit more knowledge to you. Don’t forget to follow me on Medium and on my blog MullinStack
Top comments (22)
You've described my entire philosophy of programming. Because I've spent so much time mastering the underlying concepts of software development, I can pick up any language quite quickly. Similarly, when I spend any meaningful time in a language, I try to master the entirety of its core before I worry about grokking various libraries, GUI frameworks, or what have you.
Abstractions should make your life easier, as long as you don't focus on the abstractions. Learn the underlying concepts, and you'll be able to pick up any abstraction at will.
this should be the name of a book: the underlying concepts of software development
It very nearly is. I came across this new release from No Starch Press the other day. Looks promising...
How Software Works by V. Anton Spraul
Great. I will take a look at. Thanks for sharing!
Completely agree. Jason, thanks for reading.
I find understanding the language first leads to the frameworks making so much more sense when used. Rather than knowing that A does B, you understand how A results in B; which can be incredibly useful.
Yes sure, Actually, we do the opposite for different reasons. Thanks for reading!
Thank you Roberto! I agree with you completely. I think many of us are experiencing "framework fatigue." Many frameworks started out as just someone's way to save time. It's their own abstraction, but they knew the pure underlying language first - A Framework Author's Case Against Frameworks
Learning the fundamentals allows you to learn other languages more efficiently. At the end of the day, a function is a function, a variable is a variable, etc. Excellent article!
Awesome article. I was in the same race until recently. First I did angular (1 😅), then react, then recently vue- after flirting with Svelte. In the end, if I can't ship any code with these frameworks, what have I accomplished? Nothing.
I absolutely agree. If you learn core JS, you can pick up hyped-framework-X in short amount of time, saving you time in the future!
Appreciate the book list btw.
And sometimes it is really a framework issue, but we can't figure out because we don't know the basics.
Thank you, Thank you. In addition
leonardomso / 33-js-concepts
Feel free to submit a PR adding a link to your own recaps or reviews. If you want to translate the repo into your native language, please feel free to do so.
All the translations for this repo will be listed below:
Great article, Roberto, thank you! I would say that it's perfectly valid for any given language.
The book list you provided (I especially like the second one) has broken links BTW.
Like all other languages which have a ton of available frameworks, learn the fundamentals.
Yes, of course, it is too. Thanks for reading!
Learn language-agnostic principles: algorithms, design patterns, clean code and refactoring.
It´s working. Check it again.