This iteration of the RedMonk Programming Language Rankings is brought to you by YLD.
YLD is behind many of the products and services you use every day. We create cutting edge technology and design capabilities that last beyond us. We’re experts in open source tech such as node.js, react.js, React Native, Kubernetes and design systems. Get in touch!
With the month of June in the books, it’s time to drop our third quarter bi-annual Programming Language rankings. As always, these are a continuation of the work originally performed by Drew Conway and John Myles White late in 2010. While the specific means of collection has changed, the basic process remains the same: we extract language rankings from GitHub and Stack Overflow, and combine them for a ranking that attempts to reflect both code (GitHub) and discussion (Stack Overflow) traction. The idea is not to offer a statistically valid representation of current usage, but rather to correlate language discussion and usage in an effort to extract insights into potential future adoption trends.
Our Current Process
The data source used for the GitHub portion of the analysis is the GitHub Archive. We query languages by pull request in a manner similar to the one GitHub used to assemble the 2016 State of the Octoverse. Our query is designed to be as comparable as possible to the previous process.
- Language is based on the base repository language. While this continues to have the caveats outlined below, it does have the benefit of cohesion with our previous methodology.
- We exclude forked repos.
- We use the aggregated history to determine ranking (though based on the table structure changes this can no longer be accomplished via a single query.)
For Stack Overflow, we simply collect the required metrics using their useful data explorer tool.
With that description out of the way, please keep in mind the other usual caveats.
- To be included in this analysis, a language must be observable within both GitHub and Stack Overflow.
- No claims are made here that these rankings are representative of general usage more broadly. They are nothing more or less than an examination of the correlation between two populations we believe to be predictive of future use, hence their value.
- There are many potential communities that could be surveyed for this analysis. GitHub and Stack Overflow are used here first because of their size and second because of their public exposure of the data necessary for the analysis. We encourage, however, interested parties to perform their own analyses using other sources.
- All numerical rankings should be taken with a grain of salt. We rank by numbers here strictly for the sake of interest. In general, the numerical ranking is substantially less relevant than the language’s tier or grouping. In many cases, one spot on the list is not distinguishable from the next. The separation between language tiers on the plot, however, is generally representative of substantial differences in relative popularity.
- In addition, the further down the rankings one goes, the less data available to rank languages by. Beyond the top tiers of languages, depending on the snapshot, the amount of data to assess is minute, and the actual placement of languages becomes less reliable the further down the list one proceeds.
- Languages that have communities based outside of Stack Overflow such as Mathematica will be under-represented on that axis. It is not possible to scale a process that measures one hundred different community sites, both because many do not have public metrics available and because measuring different community sites against one another is not statistically valid.
With that, here is the third quarter plot for 2019.
Besides the above plot, which can be difficult to parse even at full size, we offer the following numerical rankings. As will be observed, this run produced several ties which are reflected below (they are listed out here alphabetically rather than consolidated as ties because the latter approach led to misunderstandings).
1 JavaScript
2 Java
3 Python
4 PHP
5 C++
5 C#
7 CSS
8 Ruby
9 C
10 TypeScript
11 Swift
12 Objective-C
13 Scala
14 Shell
15 R
16 Go
17 PowerShell
18 Perl
19 Haskell
20 Kotlin
With the exception of one quarter in 2018 in which Swift placed tenth, it has been five years since we saw the entrant of a new top ten language. In this quarter’s run, however, TypeScript continued its upwards surge by placing tenth – more on that shortly. Outside of that, the top ten was typically static, with the only other change being C++ rising one spot into a tie with C#. The back half of the top twenty included more movement as we’ll address, but from a macro perspective the long term relative stability within the programming language ranks remains in spite of fierce competition and new challengers. It will be interesting to see if the ascent of languages such as Kotlin, Swift and TypeScript opens the door for other emerging languages, or if they remain statistical outliers.
- TypeScript (+2): Three years ago at this time, TypeScript had just broken through to #26 after languishing in the thirties for years. This quarter, as mentioned above, the JavaScript superset capped off one of the more remarkable growth stories we have ever seen in these rankings, placing in the top ten for the first time after surging to #12 last quarter. In doing so, it passed both Objective-C and another fast riser on these rankings, Swift. Ironically, those two languages competition with one another is likely what enabled TypeScript to pass them both, but it is no fluke. The ubiquity of JavaScript coupled with the optional safety offered by TypeScript has proven to be a winning combination, and vaulted it directly into rare territory. It will be interesting to see if it can sustain this rank, or if like Swift before it, this is a temporary gain. Either way, TypeScript is a language that many are betting on moving forward.
-
Go (-1): For the second run in a row, Go dropped one spot, this time out of a tie with R for 15th back to 16th on our list. To be sure, placement in the top twenty is by itself a remarkable achievement; many popular, widely used and beloved languages lay well behind it. But for all of its credibility and usage in widely used, popular projects, Go’s lack of versatility – perceived or otherwise – has limited its upside. Go has remained a solidly top twenty language, but has never placed higher than 14th, and that for only a single quarter. It will also be interesting to see if any of the controversy surrounding Go’s future direction – and the community’s input or lackthereof into that – has any observable impact on the language’s traction moving forward.
-
Kotlin: Kotlin, for its part, held serve by not moving up or down from its 20th rank during last quarter’s run. As discussed, that ranking is a remarkable achievement, particularly for a language as recently popularized as Kotlin. That being said, having seemingly plateaued the question for advocates of the language is what, if anything, will put it back on the kind kind of trajectory that TypeScript finds itself on. It is more versatile than Go, and like TypeScript has compatibility with an immensely popular and near ubiquitous language (Java) in its favor, but it also has shown little mainstream traction as a viable replacement for and alternative to Java the language (as opposed to Java the platform), which is somewhat surprising given both Kotlin’s aesthetic and stylistic appeal and the market context, specifically some of the controversies around Java and its stewardship.
-
Julia: Julia remains distant from mainstream usage and visibility, but continues an upward, if glacial, ascent, clocking in at #33 up from #34 in January’s numbers. While on the one hand the trendline is positive if uninspiring, the fact remains that Julia is less popular by this measure than low visibility languages such as Dart (#27), Elixir (#29), Lua (#22) and Matlab (#23). There is nothing to preclude a continued ascent, or even an acceleration of this – there is ample historical precedent. But there is also nothing in either the data here or the market context which would suggest this is likely or imminent.
-
Rust: One quarter after holding at #23, Rust inched up two spots to #21 this quarter. Placing one spot behind a high growth language like Kotlin and ahead of popular JVM-based languages such as Clojure (#25) or Groovy (#24) is a remarkable accomplishment given Rust’s low level, safety-oriented nature. It’s one thing to pick up JavaScript or even TypeScript quickly; fluency and competency in Rust is, by comparison, more difficult to achieve. For a systems language to continue its upward trajectory in this fashion suggests that some combination of the design, the language’s community and market demand is combining to have it outperform its natural expectations.
Credit: My colleague Rachel Stephens performed the data collection for both the GitHub and Stack Overflow portions of this analysis.