This iteration of the RedMonk Programming Language Rankings is brought to you by Cloudflare Workers – the fast, secure, and affordable serverless platform. No matter the language, Cloudflare Workers helps developers solve their hardest problems. Start building today with Cloudflare Workers!
With everything going on in the world, we’re a little late with our third quarter bi-annual Programming Language rankings. But better late than never, they are finally complete.
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 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 2020.
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 Python
3 Java
4 PHP
5 C++
5 C#
7 Ruby
7 CSS
9 TypeScript
10 C
11 Swift
11 Objective-C
13 R
14 Scala
15 Go
15 Shell
17 PowerShell
18 Perl
19 Kotlin
20 Rust
In a stark contrast to the massive disruption going on in the world, this quarter’s rankings saw less change overall than is typical. As accretive metrics, the rankings are not particularly volatile to begin with, but even by that modest standard this quarter’s rankings were fairly static. Whether this is part of the normal ebb and flow of relative language trajectories or whether it’s a manifestation of a world being turned upside down isn’t yet clear but we’ve run some preliminary numbers discussed below and will be monitoring the trend closely moving forward.
In the meantime, the changes that did occur are that much more notable, because they are the exception rather than the rule. One change in particular that we’ll discuss below is also notable because it’s something we have never seen before in the eight years we have been ranking programming languages according to their performance on GitHub and Stack Overflow.
With that preamble, here are the most important takeaways from this edition of the rankings.
-
Python (0): Ironically, the most notable “winner” in this quarter’s rankings is Python, which did not move at all. But in assuming sole control of the number two spot in our rankings, Python is the first non-Java or JavaScript language ever to place in the top two of these rankings by itself, and would not have been the obvious choice for that distinction in years past. Underrated and often overlooked, the versatility of the language remains both its calling card and the basis for its continued strength. Much like Perl in its heyday, Python is the glue for thousands of small projects and the basis for countless personal scripts, including a few that retrieve data for these rankings. But it continues to find its footing amongst emerging and expanding categories, whether that’s data science a few years ago or GPT-3 work today. As long as it remains a language of first resort, it will continue to perform well in these rankings.
-
Java (-1): As the fourth caveat states above, we caution against reading anything into slight differences between the rankings themselves, and this run is no exception. The difference between individual places on the rankings is slight, and the ranking in any single quarter is just a snapshot, one subject to temporary fluctuations. That being said, it is notable that, having been performing these rankings since 2012, this is the first time we have ever placed Java in a rank other than first or second. Even as other reports prematurely and falsely called the language dead or wrote it off, its robust performance in these quantitative rankings validated what we observed qualitatively, which was that Java remained in widespread usage thanks to its ability to find and satisfy new use cases. It is true, however, that Java has never faced more competition for developer time and attention than it does today, and while it will be an enterprise mainstay for years, its traditional position of prominence is not guaranteed. It will therefore be interesting to watch Java over the coming quarters to determine whether this run is a temporary aberration, a new status quo or an early indicator of a longer term decline in popularity.
-
Rust (+1): Speaking of languages competing with Java for developer time and attention, Rust’s steady if somewhat deliberate ascension up our rankings continues with its debut in our Top 20. Five years ago this quarter, Rust was languishing around at #48 on these rankings, nearly thirty spots behind languages like Haskell, Matlab, Clojure and Groovy. As of this quarter, it has passed them all and appears to have more growth potential yet in front of it. Its focus on the construction of secure applications is of particular and growing importance, and contributes to Rust’s usage in more and more high profile projects. Like Go, it probably has a ceiling in the mid-teens given its nature and focus, but the question is how quickly or not it can hit that mark. Or, in fact, whether its Top 20 positioning is sustainable or whether it might face a temporary setback.
-
Kotlin (0), Dart (0), Julia (0): The story with these three languages is the story of this quarter’s run, which is to say that there is no story. But before we delve into that, a quick aside: if it’s impressive that Rust now sits in the Top 20 after placing 48th five years ago, how much more impressive is it that Kotlin, one spot ahead of Rust this quarter, was fully twenty behind it five years ago at #68. That historic growth aside, however, the story for many of our recent movers on these rankings was no movement. These three languages which had shown a recent upwards trajectory all stalled, along with many others on our list. The obvious explanation would be a COVID-related dropoff in activity, but the data suggests otherwise. The Stack Overflow tags that we track grew at a negative rate compared with our last run (-16%), but the GitHub pull requests among surveyed languages grew at an 11% rate compared to the last rankings. This is not an anomalous pattern, historically, so there doesn’t appear to be an outsized impact from the pandemic on code contributions and discussion. Absent COVID, however, there is no obvious candidate for a simple hypothesis, so it may well be the static nature of these rankings was just a random occurrence. We’ll have to monitor this moving forward.
-
TypeScript (0): As with Python, or several other languages mentioned here, there is nothing to report with respect to TypeScript in terms of its movement. Given its placement at #9, however, that is notable in and of itself. Prior languages such as Swift have shown that achieving a high ranking is certainly possible, but that sustaining it is an entirely separate and often more difficult challenge. TypeScript, however, has managed this trick with a minimum of effort, its particular mix of JavaScript-based ubiquity, optional type safety and usage in popular projects like VS Code proving to be a powerfully sustaining mix of attributes. The question for TypeScript, as it was during the last run, is what the language’s potential ceiling is. Will it top out in the back half of the Top 10, or can it make a push for the Top 5? We’ll be watching to see where this up and coming language heads.