In a funny coincidence following my last post on language adoption, the IEEE Spectrum in my mailbox today contained a pointer to IEEE’s version of the top N languages.
They use a variety of data sources, some of which overlap with the SocioPLT’s, e.g., counting projects on GitHub. Some sources are different, e.g., using Google and Twitter to count occurrences of “X programming” for a language X. The site allows you to create your own rankings to weigh the various data sources differently, e.g., to focus only on GitHub projects or to increase the weight of Google Trends.
Comparing the IEEE top twenty with the SocioPLT top twenty shows some interesting differences.
SocioPLT | IEEE |
---|---|
Java | Java |
C++ | C |
PHP | C++ |
C | Python |
Python | C# |
C# | PHP |
Javascript | Javascript |
PERL | Ruby |
Shell | R |
Delphi/Kylix | MATLAB |
Visual Basic | SQL |
Visual Basic .NET | PERL |
Assembly | Assembly |
JSP | HTML |
Ruby | Visual Basic |
PL/SQL | Objective-C |
Objective-C | Scala |
ASP.NET | Arduino |
Tcl | Shell |
ActionScript | Go |
The top six languages are the same in both lists, but the order of the six is different. (Recall that the top 6 made up 95% of projects in the SocioPLT code repository study, so if that’s still true, these remain significantly dominant.) Both lists have Java on top, but SocioPLT then has C++, PHP, C, Python, and C#, while IEEE has C, C++, Python, C#, PHP. Would be interesting if this difference represents a meaningful evolution of preference.
Some languages have entered the top twenty. Scala and Go, both relatively recent languages, are in. R, an old language, is apparently recently popular. Arduino’s appearance is confusing. This is a hardware micro-controller platform whose IDE accepts C and C++ code; perhaps here it is referring to the wiring language. If so, I’m very surprised that it’s so popular. Note that all of these languages remain in the top 20 even when only considering active Github projects.
Other languages have moved up or down. Python and Ruby are up, while Perl, PHP, and Visual Basic are down.
Other languages have gone (or been reclassified, e.g., Visual Basic .NET is perhaps combined with Visual Basic in the IEEE list, and JSP merged with Java). Tcl and Actionscript are well and gone (now number 41 and 39, respectively).
Looking further down the IEEE top 50, Haskell is the top functional language at number 25, though Scala is arguably functional, too, at number 17. Congratulations to Prolog, a logic language, which clocks in at number 29.
Interestingly, if you consider only active Github projects, Javascript jumps to the top (up from 7), Go jumps to number 12 (from 20), and Haskell jumps to number 15 (from 25).
Java/C++/C#/C all have a similar flavor of imperative languages, but it’s obviously more nuanced than that. If I look at the top six, I see a few interesting divisions: languages with type / memory safety (Java/C#), languages with “dynamic” types (PHP/Python), and languages where objects play a central role in good design (Java/C#/C++/maybe Python, unsure about PHP standards).
But in general it seems really difficult to “rank” languages because it doesn’t help you answer any questions about how / why / when you’d want to use one of those languages. Instead of giving the “top ten” languages (which are mostly C derived/inspired) I’d like people to see a smattering of languages which exemplify good programming language features (objects/concurrency/dynamic typing/”scripting”/type based abstraction/proofs/machine layout correspondence/vector computing/scientific computing).
Seeing another iteration of “top” lists answers a good question: which are used in large projects and deployments, but in terms of mass appeal (which I assume is the point of an IEEE spectrum article) seeing only the “same old” languages in the top six gives the impression to onlookers that you don’t need to care about all those other “academic languages” (whose features are slowly creeping into these languages, e.g., Java and C# additions in newer versions) but just focus on learning some “top” languages.
I think a portion of my kneejerk reaction to these lists is my experience about hearing people (undergrads, interviewers, people who own startups) talk about the “top” programming languages as the things to learn, when we should *really* be teaching students foundational concepts that back those languages. It is perhaps presumptive of me to assume that people will look at these numbers and use them to discredit studying PL as a field, but I fear people treating programming languages like a specific tool you learn (as in, Adobe Photoshop).
Sure, you learn specific concepts apropos to each language (e.g., syntax, the difference between prototypical inheritance or metaclasses in Ruby), but at it’s core you learn to extrapolate those specifics into foundational building blocks that guide the design of these languages (e.g., Erlang being structured around a message passing semantics, Ruby growing from a core object model reminiscent of Smalltalk). Seeing that the top six languages neglect so many features highlighted by other languages is understandable: they’re intended for mass use and commercial applications. But only ever talking about the “top six” collectively seems neglectful if we don’t state it with the caveat that there are other factors at play.
Great points, Kris!
One of the things I find confusing about all these lists is that it’s not clear what the thing is that we’re trying to measure. You could imaginably measure “lines of code in the language written per week”, “hours spent working with the language per week”, “number of programmers who know the language”, “number of programmers who use the language regularly”, or six other things. These aren’t the same and might give substantially different rankings.
I wonder if there is any actual shared intuition for what we are trying to rank. I suspect not?
Ari, are you looking for a higher-level metric that counting Github projects, Google searches, etc. are trying to approximate? Of your list, what would you want to know the most?
Pingback: What is type safety? | The PL Enthusiast
Pingback: 【翻訳】型安全性とは何か | POSTD