Web application frameworks: Innovate or die

JavaScript
JavaScript

It's getting harder and harder to keep up with the JavaScript Joneses. While ReactJS got the headlines this week, no JavaScript framework has managed to lead for long. Some tout this as a positive, pushing the competing frameworks to out-innovate each other, but the frenetic pace of innovation makes it hard for developers to keep up.

What will it take to crown a winner for the long term?

Who's winning the web?

Let's be clear: there's a lot at stake. As EmberJS lead Tom Dale said to me:

"Remember what a big slice of the pie the web is. .NET is for Windows, Cocoa for iOS/Mac; winning the web is the whole darn world."

Because of the stakes, it's somewhat surprising that no framework has managed to dominate. Not for long, anyway.

After all, while new programming languages come and go, Java, C++, and C# have stuck around for eons, always at or near the top of the programming language dogpile, as Redmonk analysis shows.

Not so web application frameworks.

A quick glance at Google Trends shows the waxing and waning of popularity in JavaScript land (Figure A):

Figure A

Figure A
Figure A
Google Trends shows popularity in JavaScript.

Sproutcore, the brainchild of Charles Jolley and developed by Apple and then Strobe (my former employer, acquired by Facebook), eventually faded as BackboneJS took over, with companies like LinkedIn getting behind it. Meanwhile, some of the Sproutcore developers left Strobe to develop EmberJS, which (over time) is displacing BackboneJS.

Of course, if we add in AngularJS, Google's JavaScript baby, everything pales in comparison, whether measured by web searches or employer demand (Figure B):

Figure B

Figure B
Figure B
The rise of AngularJS.

This might be fine. AngularJS might actually be the Best. Thing. Ever!

At least, until the next cool thing comes along.

Can we slow this thing down?

Take ReactJS, for example. Developed by Facebook, ReactJS made headlines this week by announcing support for native applications. Meaning, React Native enables developers to easily build native apps using React and JavaScript. It's a nifty concept, if not exactly new. Other frameworks have offered similar functionality for years, which raises the question:

Did we really need ReactJS?

Netflix thinks so. On its developer blog, the technology pioneer declares, "Our decision to adopt React was influenced by a number of factors, most notably: 1) startup speed, 2) runtime performance, and 3) modularity."

Netflix feels that ReactJS offers an excellent way to reduce network requests (improving startup time) and streamlining UI rendering (runtime performance), among other things.

Maybe they're right. But why couldn't Netflix have accomplished the same thing with AngularJS or EmberJS or...?

Innovate or die

Brian Leroux, one of the core PhoneGap developers, believes that the innovations currently coming from JavaScript frameworks eventually "dissolve into the web platform itself," forcing the frameworks to constantly innovate to get ahead. As competing frameworks lose innovative steam, the market shifts to something better.

Hence, the churn.

By some accounts, we're starting to settle on a few consistently innovative frameworks. (One Instructure developer believes that EmberJS has already won because, "It's always Ember v. somebody.") AngularJS is also a contender, clearly. Maybe the contender.

And now ReactJS...?

It's frustrating that we haven't arrived at any sort of stasis in web programming, but that may simply reflect how much we have left to do on the web. AngularJS recently caught flak for shirking backward compatibility in its 2.0 release, something I've argued is probably a net positive for innovation.

Why? Because, as Leroux intimates, we have barely scratched the surface of what web innovation can and, arguably, should be. We're going to have to break things on the way as we come up with more powerful ways to program the web.

Not everyone agrees. EmberJS co-creator Yehuda Katz argues that "Forcing everyone to rewrite everything every few years is the best way to slow things down." And so EmberJS has striven to ensure maximum backward compatibility. AngularJS, as noted, has not. At least, not to date.

But these strike me as necessary speed bumps.

For the foreseeable future, we should expect the JavaScript frameworks to evolve. Some will die out. Some will win out. But while this can cause heartburn for developers, it's ultimately for the best, because it means the web is winning.