Which JS Framework to learn in 2017?
None of them.
Seriously. Skip the whole thing. If you already know one, just use that. If you want a different job, ok, maybe you want to prep a bit and do what they do, so you can "hit the ground running."
Alternatively, do you want to "hit the ground running?" Or should you be a little skeptical of companies that are that transparent in their unwillingness to train you on anything?
If you're just starting out, yes, any company is the "right company" and you might have to chase around a few technologies and do some demos with some of them. But if there's that much commitment from your side to be considered by the company, you're potentially losing out on having leverage of multiple offers.
You want to learn one because you're interested? Okay, cool, nevermind. Learn a different one than the one you know then. Maybe something popular. Go ahead. Have fun.
But really, don't.
Ok, so even with the prospect of a desirable job or just general interest, here's a thought: Whether via react or ember or vue or whatever whatever whatever, You're still just shipping HTML.
I fear not the man who has practiced 10,000 kicks once, but I fear the man who has practiced one kick 10,000 times. – Bruce Lee
As an interviewer, I don't care if you know 10,000 ways to build HTML. I don't even care if you know one super well. It would be best if you knew JS pretty well and could extend/ignore frameworks when appropriate.
Here's what I'd really like to convey about frameworks though. At a certain point, any combination of 5 things can happen with your use of them:
- They will require a ton of plugins to work
- They will require people who know the language and paradigms backing them up in order to properly extend them to suit your new use cases, aka going beyond the framework... if that's not you, your project is in trouble
- They will become unfashionable and you'll just have to rebuild the whole thing in the new flavor of the month or year (this might just be a new version of the same framework)
- They will be a barrier to maintenance, building new features, and potentially hiring (especially if you want your new hires to "hit the ground running")
- They will fall short of expectations (likely uneven/bad performance or design)
Is it important to rally around some technology so that everyone is speaking the same language at a company? Yes. Should the tech industry as a whole push the costs down the stack, and instead of using the frameworks of browser vendors, just petition the browser vendors to properly implement necessary features? Hell yes. A proper require, web components, and smart conditional loading would pretty much seal the deal.
Why hasn't that happened yet? Apparently the browser vendors/framework providers aren't incentivized to do so (perhaps because they're the same people).
In the mean time, yeah, use and learn something if necessary, but don't go on a quest to use and compare and configure everything. n! is a bad complexity class.
Every tool you add to the stack isn't just another thing to break, it's n! things to break. Let's say you have a JS framework, two testing libraries, a database adapter, and 6 more scattered modules. That's 10 things. 10! (ten factorial) is 720. 720 possible incompatibilities. 720 errors to track down on stack overflow or github issues. 720 things to upgrade and patch and shim when they update and stop working.
What to learn instead of frameworks?
If anyone thinks that the next big thing is shipping HTML in a new way, they're short-sided as all hell or lying to you intentionally. Just because this stuff is popular doesn't make it good or do anything for you in the long term.
You want to learn React? Just don't. Learn functional programming (just the ideas around immutability will get you pretty far) and game architecture (especially double buffer rendering). That's what is at the core of it.
Or learn more about JavaScript itself. Learn different ways of writing it. Learn why a framework gets in the way of writing simple tests. Learn how to break out of the framework when you need to (because you'll need to).
Or learn parallel computing.
Or learn some AI.
Or learn some math. Khan Academy is good and free for a high school refresher. You'll likely want Calc 1-3 and linear algebra for 3D graphics. Add stats to that if you want to do Machine/Deep learning. Yes, there are frameworks with Machine Learning and 3D graphics. They have the same weaknesses as listed above for JS frameworks. MIT open courseware
Or learn some algorithmic complexities. Get familiar with the plots of x and y graphically. That is algebra, maybe algebra 2 type stuff. If you forgot it, or never learned it well, that's cool. Just review it. This is useful for interviews. It really doesn't come up that much if you're dependent on frameworks and the patterns they establish. But that doesn't mean ignore it. Learn it instead of a framework.
Or don't.
We've got a crisis going on. If you don't believe that, you're not my people, and that's ok.
Anyways, depending on how you look at it, we have some combo of a failure of imagination, a failure of communication, or a failure of public and private institutions and people to behave honorably.
None of these are made better if you learn to ship HTML in a new way.
For the design minded, "empathy" defined as making the clicks go up has been a dismal failure. For the entrepreneurs, "progress" as co-branded with "disruption" is not working.
Talk (but mostly listen) to people different than you. Work on your communication. Work on your imagination.
Please get in touch if you need anything or have any ideas for me along the same lines.