Introduction
I'm an avid follower of Hacker News and many various programming related subreddits. There is a constant flow of posts where the author expresses fatigue, weariness, and many times backlash at JavaScript and the plethora of front-end frameworks. Much of this conversation surrounds React and Angular and then other frameworks such as Mithirl, Meteor, Ember, Vue and others (and there are many others). The conversation many times will go X is the best framework, or X is not the best framework Y is, and the reasons, or much consternation that X or Y is short lived and will be superseded soon by Z. Then many times it is just complaining about X, Y, Z, and frameworks and JavaScript in general.
I'd like to offer a few thoughts counter to this outcry of fatigue in the industry.
Overview
What if you viewed the churn and the constant creation of frameworks and libraries as a positive growth factor. What if you viewed the JavaScript ecosystem as parallel to the machine learning ecosystem.
In the machine learning world there is, albeit not as voluminous, a continual outpouring and creation of new libraries and frameworks to analyze data. There is only positive sentiment towards this as we see this as advancing the ball on the field. Yet many take the parallel situation of JavaScript framework advancement and have a very negative sentiment, possibly because of the negative sentiment towards JavaScript in general.
I tend to see these negative sentiments as more group think and viral memes catching on than necessarily objective criticism. If we get down to it we can nitpick and criticize any language or framework. We can find fault with C++, Java, Ruby, Python, you name it, or we can praise each respectively. Each language, and everything contained therein, has strengths and weaknesses, but even more so, at the end of the day the apps we create are black box. The end user sees the function not the code. Therefore if we are programming in a language/framework to create functionality, then it is the effectiveness and vibrancy of the functionality that is the goal, the nuances of the languages or framework are more or less meaningless to the degree that they do not significantly slow us down or prevent us from implementing functionality. Yes I know future maintainability is important, testing is important, solid code is important, but such things can be accomplished in nearly any language or framework. Such concepts are universal, not specific. One can create beautiful code in any language just as one can create poorly designed code likewise.
Frameworks
Let's look at Angular and React. Prior to Angular there were definitely plenty of popular front-end frameworks (Knockout, Backbone, Ext, etc...) however Angular made a huge splash because it was a brand new approach backed by a very large company that provided a full framework out of the box to do front-end development, especially with single-page apps. It filled in a lot of gaps that front-end developers previously had problems with and gave a complete solution while being extensible, this was huge. Angular caught on fast, and I believe, due in part of the popularity of Angular, the front-end framework/library development re-ignited. This is not a bad thing, this is progress. This is learning from past mistakes. Angular and React wouldn't exist if there wasn't still a need or room for improvement.
And now we have React, which is the next major evolution in JavaScript frameworks. You may disagree that it is the best out there right now, but it is currently, at the time of this writing, the most trendy with the most hype. The authors of React took a new approach using a virtual dom where changes queue up reconciliations between the virtual dom and the real dom. React also offered an extremely simple means of hooking into the lifecycle of the Component, and provides a very simplistic set of APIs to render the view layer. The simplicity and conciseness of React has been very well received by the industry, and I believe has shown that we can have a very powerful framework/library (depending on how you mince words) that is also simple to grok. It would also appear that Angular 2 is adopting some of the concepts from React and other frameworks. Angular 2 has made the idea of a Component a first class construct, and offers lifecycle hooks which is fantastic. The dom rendering in Angular 2 is much faster as well though it isn't using a virtual dom, it does support the native shadow dom where available. I also really like that Angular 2 is pushing TypeScript.
I find the vibrant npm ecosystem and the ever changing front-end framework ecosystem very exciting. The churn, the numerous frameworks, the attention and resentment all indicate a growing and advancing domain of knowledge and techniques. New content means new life and it brings new programmers and attention. The last thing I would want to see is no new frameworks and no growth or advancement. There are languages and domains out there with small ecosystems and small user bases. Those languages can be fun but frustrating when there are few library and framework options. In JavaScript the world is your oyster. And again, many are turned off by that, but I believe it is ultimately a good thing.
What should you do if you have JavaScript and/or framework/library fatigue, yet you are still part of the JavaScript world? Choose a framework you like, that is active, use it, take a step back and ignore everything else for a while. Remember ultimately you are creating functionality, the language and the frameworks are simply a means to an end. Being inflamed at the numerous frameworks out there is ultimately a meaningless endeavor. When you express angst at the industry it only inflames others, either with you or against you, but it changes nothing. It does not stop anyone else's development and exploration of new frameworks. The best thing you could do, if you believe in an existing framework, and hate the idea that other 'inferior' ones are being created/used, is to start contributing bug fixes and features to the framework you like so that it has the best chance of long term use. If you don't contribute to the upstream, blowing smoke is just that, it accomplishes nothing meaningful. And if you just enjoy hating and criticizing, then it would be an excellent practice to take your ideas on why everything else is so bad, and create a new framework yourself. Being the one criticized by creating 'yet another framework' would give an excellent humbling perspective.
Predictions
What's next in the industry? I have no crystal ball, but the past is the best indicator of the future.
- I'd expect to continue to see the evolution of existing frameworks and libraries and the creation of new ones that advance some new idea or concept that make creating webapps easier and more fluid. The larger frameworks will likely cherry pick from the best ideas in the aggregate. We've already seen this with Angular 2 adopting superior forms of internal rendering over v1 and having the 'Component' as a first class construct.
- Angular 2 will be successful to some degree but probably be overshadowed by React mainly due to momentum. This likely won't change for a while, especially given the still 'not ready for production' state of Angular 2. Think Xbox 360 and how it hit the market long before the PS3, the PS3 was always playing catch up. Not a perfect analogy in light of Angular 1.x, but it has some parallels I think.
- Innovations surrounding and within React may become a standard (think Flux and the Virtual DOM) but it would be many years before that really caught on and with the Angular/Angular 2 user base it won't become the industry standard necessarily. I don't hold a strong position here, consensus is very difficult in this domain, but having Google or Facebook back a standard may give it a higher chance of success. Remember competition is good. Standards are good, but there is the age old fragmentations of standards problem as well: https://xkcd.com/927/
- There will be some new library or framework X that will be introduced and gain momentum eventually though it will be a while. React and Angular have enough hold and mindshare that any new major framework will have a very hard uphill battle to establish any sort of major dominance barring a new revolutionary approach like React popularized.
- There will be many new micro-frameworks and 'nextbestthings' that come out, but none will experience the large success of React and Angular for some time.
- When React version 1.0 is released it will be a very significant milestone as a successful implementation of the original concept and goals. I see the momentum only increasing for React not decreasing. There will undoubtedly be an arc at some point, but not soon.
- There will continue to be framework fatigue, if people are fatigued now, they will continue to be so, especially with the popular hate of JavaScript in general by many. Some may rest in the comfort of some of the major frameworks/libraries, but there are always new programmers so there will always be confusion over what to choose and what to do. And there will always be fanbois and people who enjoy trolling. To provide a counter to that, constructive criticism of anything is healthy, through the collective conscious criticism we can expose flaws in existing frameworks that hopefully push the ball forward to develop better techniques, I do realize this is important.
Conclusion
I hope the new development of frameworks and churn continues. I'm a big believer in the power of the collective conscious to innovate. Just like the field of machine learning the world of front-end JavaScript is incredibly dynamic and continually advancing. There is clear evidence that we are progressing and getting newer and better means as time goes on; I can only hope this will continue despite the fatigue many feel. I encourage you to continue advancing the cause, criticize, but offer ideas for solutions. Don't see fracture and fragmentation as bad, see it as the collective exploration of new approaches and ideas, which may catch on and be adopted mainstream. Happy coding and enjoy the wild!
Last updated: December 19, 2016