I'm mostly a server-side developer, but occasionally I delve into the wild world of client-side programming. Each time I do, I get bombarded with blog posts and tweets and advocates, each hyping their own preferred JavaScript framework.
Use Angular, they said. No, do Knockout, others proclaimed. Pssh, React is the way to go, a third group shouts. Ember.js is the one true way, or so says their adherents.
It seems like every day a new JavaScript framework appears, and every day that framework's proponents commence trying to convince everyone around them that their chosen framework has all the solutions they would ever need. Then, inevitably, a new system comes along and supercedes the old one, which disappears from the public eye, and the new one enjoys its short time in the limelight before eventually fading away. Seeing as how obsolescence is the ultimate fate of all software, you think we as programmers would be used to this rapid change, but the incredible proliferation of Javascript frameworks, to me, causes more worry and uncertainty to new learners like myself.
In fact, as a primarily server-side programmer, this whole debacle is rather discouraging. I just want to improve my JavaScript skills, dammit, not drown in a flood of frameworks. But I cannot seem to get started because I can't decide which framework will really be able to help me get better. All these competing voices, these disagreeing "experts", are really just hindering me, a JavaScript noob, from choosing to learn and code in the client-side world. It's almost like I'd rather not pick than choose incorrectly.
This is a classic problem: there's too many frameworks. The arguments put forth in the Paradox of Choice state that having so many choices is actually harmful to consumers; the more choices that exist, the more likely it is that you chose the "wrong" one. Since nobody wants to spend time learning the wrong thing, the amount of risk you carry when picking from many choices is rather large, and so many people simply won't decide at all for fear of being wrong.
Wait, Pick, Learn, Ignore
This is the situation I find myself in now: I want to do more JavaScript, and specifically I want to learn a framework, but which one should I pick? I arrived at that conclusion by following these steps, which I like to summarize as Wait, Pick, Learn, Ignore:
- Wait: Give it a couple years. Most likely, any frameworks that still exist a few years after their debut will be worthwhile in that they will be able to solve a wide variety of problems.
- Pick: Just pick one, even if it's a random selection.
- Learn: Implement and understand that chosen framework thoroughly. I cannot stress this enough. If you're going to spend all that time and effort just selecting a framework that you will study, you'd better put effort into actually learning it. Understand its strengths and weaknesses, the kinds of problems it can solve and the kinds of problems it's not very good at solving, and when you are done, at the very least you will have another tool in your coding toolbox.
- Ignore: all other frameworks until you're done with the first one. Don't confuse yourself by trying to learn everything at once. Stick with the framework you chose, learn it thoroughly, then move on to others. Having learned the first one inside and out, you'll most likely find that learning subsequent frameworks will take less time, since many of the ideas are transportable from one framework to another.
There are too many frameworks, but we shouldn't let that discourage us from learning Javascript. If we're stuck on choosing which framework to use, just wait a few years, pick one, learn that one, and ignore all others until you're done with the first one. In this way, we can learn a JavaScript framework without the baggage of wondering if we chose the "correct" one. Since, after all, there is no "correct" one, there's just a bunch of frameworks.
At the very least, this method will let you ignore the vocal adherents, and you may even find that doing so quells your mind and let's focus on you ultimate goal: making yourself a better developer.
(By the way, at least for now, I'm going with Angular, as it seems to have the biggest support and widest usage. Only time will tell if I made the right choice.)
Happy Coding!