TL;DR
- ES6 is the new standard.
- CoffeeScript is past its prime.
- A new wave of JavaScript flavors is coming.
When you talk about “JavaScript”, you're not just talking about a single language: it's actually more like a family of closely related cousins.
What started with CoffeeScript back in 2009 has become an explosion of choice over the past couple years: ES6, TypeScript, Elm… they all have their strengths, and they're all growing more and more popular.
The All view presents all five options on the same chart, while the Interest and Satisfaction lets you isolate the “interested/not interested” and “would use again/wouldn't use again” pairs.
Note that when selecting the Interest or Satisfaction view, percentages are relative to the current pair (in other words, the two highlighted bars combined total 100%).
ES6, CoffeeScript, and TypeScript all have near-perfect awareness, which surprised me since TypeScript isn’t quite as popular as the other two yet.
Elm and ClojureScript on the other hand have much lower scores, which makes sense since they’re more tied to their own ecosystems, and harder to use in existing apps.
It’s interesting to look at ES6: a large proportion of developers have already jumped on the bandwagon, and almost all (89%) of those who haven’t yet want to learn it as well.
TypeScript and Elm are in the same boat: not many people have used them, but they have 53% and 58% interest scores respectively, which isn’t bad by any means. If I had to guess, I’d say that both TypeScript and Elm might be having a hard time articulating their advantages to the average JavaScript developer. After all it’s hard to understand the advantages of something like static typing if all you know is JavaScript.
Also, few developers have used CoffeeScript, and apparently almost nobody wants to learn it. There goes my plan to write a 12-volume CoffeeScript Encyclopedia…
We now come to the key question: how many developers have used each specific flavor, and how many would use it again?
While plain JavaScript has the largest usage numbers, in terms of satisfaction the big winner here is ES6, and I think it’s safe to say it’s now the default way to write JavaScript apps.
TypeScript and Elm both also have similarly high satisfaction percentages, around 85%. And once more, poor CoffeeScript trails the poll with only 17% of developers willing to consider it again.
Plain JavaScript | ES6 | CoffeeScript | TypeScript | Elm | ClojureScript | No Framework | React | Angular | Angular 2 | Ember | Vue | Backbone | Redux | MobX | Relay | REST API | Firebase | GraphQL | Apollo | Falcor | Horizon | Meteor | FeathersJS | DoneJS | MERN | MEAN | Mocha | Jasmine | Enzyme | Jest | Cucumber | Ava | Plain CSS | SASS/SCSS | LESS | CSS Modules | Aphrodite | Webpack | Grunt | Gulp | Browserify | Bower | Native Apps | React Native | Cordova | PhoneGap | NativeScript | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Plain JavaScript | 100 | 7 | -2 | -4 | -5 | -1 | 22 | -1 | 4 | 0 | 2 | 2 | 8 | -3 | -2 | -2 | 12 | 3 | -3 | -4 | -1 | 0 | -1 | -3 | -1 | 1 | 8 | 2 | 5 | -1 | -2 | 0 | -1 | 21 | 5 | 4 | -3 | -1 | -1 | 9 | 8 | 7 | 3 | 4 | -4 | 4 | 5 | 0 |
ES6 | 7 | 100 | -2 | 14 | 6 | 3 | -1 | 42 | -5 | 8 | 9 | 7 | 2 | 37 | 8 | 6 | 19 | 11 | 11 | 5 | 2 | 4 | 6 | 2 | -2 | 10 | 9 | 34 | 20 | 18 | 11 | 5 | 11 | -3 | 13 | 3 | 11 | 5 | 43 | -6 | 10 | 15 | -11 | 2 | 17 | 1 | -2 | 2 |
CoffeeScript | -2 | -2 | 100 | 1 | 4 | 4 | 0 | 1 | 1 | 0 | 5 | 3 | 5 | -1 | 1 | 2 | 2 | 0 | 2 | 3 | 3 | 2 | 5 | 1 | 1 | 2 | 1 | 3 | 3 | -1 | 1 | 9 | 1 | -3 | 6 | 6 | 1 | 1 | -2 | 5 | 2 | 4 | 8 | 4 | 2 | 1 | 2 | 2 |
TypeScript | -4 | 14 | 1 | 100 | 6 | 4 | -5 | -3 | 20 | 48 | -2 | -1 | -4 | 0 | 5 | 2 | 8 | 5 | 2 | 2 | 3 | 3 | -1 | -1 | 0 | -1 | 14 | 5 | 15 | -3 | -1 | 1 | 2 | -3 | 3 | 5 | -1 | -1 | 7 | 1 | 9 | 0 | 3 | 5 | 1 | 9 | 5 | 14 |
Elm | -5 | 6 | 4 | 6 | 100 | 15 | -1 | 10 | -6 | -2 | 2 | 2 | -2 | 11 | 5 | 5 | 2 | 4 | 7 | 2 | 2 | 3 | 0 | 1 | 1 | 4 | -5 | 8 | 4 | 6 | 7 | 3 | 10 | -2 | 1 | 0 | 5 | 6 | 8 | -6 | -4 | 1 | -6 | 3 | 6 | -3 | -3 | -2 |
ClojureScript | -1 | 3 | 4 | 4 | 15 | 100 | -2 | 10 | -4 | 0 | 5 | 1 | 1 | 7 | 5 | 11 | 3 | 3 | 9 | 1 | 6 | 3 | 0 | 4 | 2 | 2 | -3 | 7 | 3 | 7 | 7 | 4 | 6 | -2 | 1 | 1 | 3 | 4 | 6 | -3 | -1 | 3 | -3 | 3 | 7 | -1 | -1 | 0 |
Note: “user” defined as people who picked “I've used it before, and would use it again”. Phi coefficient values go from -100 to +100, darker red indicates stronger positive correlation, darker blue indicates stronger negative correlation.
The heatmap clearly shows that preferring Plain JavaScript correlates with an old-school approach that favors using Backbone, or even no framework at all, whether it's for JavaScript or even CSS.
On the other hand, ES6 correlates strongly with the React stack, while TypeScript is used by Angular 2 developers as expected.
The high satisfaction scores we saw previously are confirmed here: with an average score of 3.96 overall, people are really happy with JavaScript as a language.
It’s hard to say if this is because of JavaScript’s recent improvements, or because maybe (just maybe) JavaScript isn’t as horrible a language as people make it to be. But it’s certainly comforting.