Programming Languages in 2017

Time for the annual collection of programming language news. Little has changed in terms of popularity rankings; the usual suspects dominate. JavaScript maintains its overall lead, except in the bizarro world of TIOBE. Established newcomers Go, TypeScript, and Swift continue making inroads but are still relatively niche. Kotlin (on which more below) might have a great future but is not on the popularity radar as yet. So just for the record, here are some ranking snapshots from 2017.

  • GitHub Octoverse (2017) — Top 15 by opened pull requests, with 2016 figures if available: JavaScript (2.3M from 1.6M), Python (1M from 744k), Java (986k from 764k), Ruby (870k from 741k), PHP (559k from 478k), C++ (413k from 330k), CSS (335k), C# (326k), Go (285k), C (239k), TypeScript (207k from 56k), Shell (206k), Swift (107k from 62k), Scala (99k), Objective-C (66k)
  • Stack Overflow Survey (2017) — Top 25 by most used: JavaScript, SQL, Java, C#, Python, PHP, C++, C, TypeScript, Ruby, Swift, Objective-C, VB.NET, Assembly, R, Perl, VBA, Matlab, Go, Scala, Groovy, CoffeeScript, Visual Basic 6, Lua, Haskell
  • RedMonk Language Ranking (June 2017) — Top 22 by combining GitHub pull requests with Stack Overflow tags: JavaScript, Java, Python, PHP, C#, C++, CSS, Ruby, C, Objective-C, Swift, Shell, Scala, R, Go, Perl, TypeScript, PowerShell, Haskell, CoffeeScript, Lua, Matlab
  • TIOBE Index (January 2018) — Top 20 by weighted combination of search engine terms: Java, C, C++, Python, C#, JavaScript, VB.NET, R, PHP, Perl, Ruby, Swift, Delphi/Object Pascal, Visual Basic, Assembly, Objective-C, Scratch (!?), Matlab, Go, PL/SQL

In related news, A Large-Scale Study of Programming Languages and Code Quality in GitHub examined 728 project histories using Github’s most popular languages to determine any associations between languages and bugginess. To sum it up, while the effects they found were not strong, the most defect-prone languages were unsurprisingly those with implicit type conversions and manual memory management, in particular C/C++.

Erik Bernhardsson found another way to measure language popularity: mass-query Google for various terms of the form “move/switch from (language 1) to (language 2)” and count the results. The full matrix is shown in his post, The eigenvector of “Why we moved from language X to language Y”. Among languages, the top switching targets were Go, C, Java, C++, and Python. Will this predict future language popularity, as he thinks? I have my doubts but it’s an interesting data point nonetheless. By the way, he also applied his method to JavaScript frameworks (React wins) and databases (MySql wins).

Unpopular Languages

Perhaps you would also like to know about the world’s least popular programming languages. Yevgeniy Brikman has a nice collection with code samples in his 2014 article, Six programming paradigms that will change how you think about coding: concurrent by default (Ani, Plaid), dependent types (Idris, Agda, Coq), concatenative (Forth, cat, joy), declarative (Prolog, SQL), symbolic (Aurora), and knowledge-based (Wolfram). Very interesting read if you enjoy thinking about language design.

More on the absurd side is Esolang, the esoteric programming languages wiki. It’s been around since 2005 but I only discovered it last year, thanks to a tweet about German, a language whose only two keywords are BEER and SCHNITZEL.

Kotlin

2017 was not the year of Kotlin’s start of development (2010) or even 1.0 release (2016), but it’s the year when everyone started talking about it. One big factor was Google announcing first-class support for Android development. Aside from running on any JVM with full Java library compatibility, Kotlin now also supports transpiling to JavaScript and experimental native compilation.

This wide availability and a very attractive language design are two strong points, but another one is the business aspect. Kotlin is produced by a professional team for an established company (JetBrains) that also uses the language internally, does not need to monetize it, and of course offers full support in its own popular IntelliJ IDEA. These points are very important because niche languages cannot grow if fickle volunteers lose interest, users are expected to pay, or solid tooling is nonexistent.

There was a lot of coverage for Kotlin following Google’s announcement, all of it positive. Here are some highlights:

  • On the Rise of Kotlin (Joe Kutner, Heroku) — “Our existing JVM languages are great, but none of them [unlike Kotlin] have demonstrated the potential to become the de facto language of choice for a large percentage of JVM developers.”
  • RedMonk Language Rankings (Stephen O’Grady) — “The big question facing Kotlin then isn’t whether it will experience gains based on interest – the language already has jumped nearly twenty spots in a year’s time which is very unusual – but how quickly, and to what degree.”
  • Why you should totally switch to Kotlin (Magnus Vinther) — “I used to prefer Java but the last year I’ve found myself coding Kotlin whenever I could, and at this point I really can’t think of a situation where Java would be a better choice.”
  • Kotlin is like TypeScript — An interesting comparative series of code snippets in both languages.

Tabs vs Spaces Reloaded

David Robinson put a new spin on the eternal question. Analyzing the Stack Overflow survey data, he found a solid correlation of using spaces exclusively and a higher salary – 8.6% on average. This correlation appears to hold regardless of any other factor he checked, including country, experience, or programming language.

Evelina Gabasova was as surprised as anyone and decided to investigate the raw survey data (which is public). She found that using spaces exclusively was after all correlated with certain factors that have a much more obvious influence on salaries, namely contributing to open source projects and using GitHub.

(She also notes that the survey’s salaries are likely misreported for much of the world outside America as people seem to have entered monthly instead of annual salaries!)

Web Development

The State of JavaScript 2017 delivers its usual mass of detailed survey results. For non-specialists in this area, the major takeaway is that web development shows no signs of getting any less splintered or complicated. Ian Allen’s The Brutal Lifecycle of JavaScript Frameworks examined Stack Overflow trends for major frameworks, and found a quick succession of meteoric rise and fall.

There appears to be a quick ascent, as the framework gains popularity and then a slightly less quick but steady decline as developers adopt newer technologies. These lifecycles only last a couple of years.

I can only guess at the causes, but that’s certainly no sign of a mature industry. For us dinosaurs, Peter Jang has written the tutorial Modern JavaScript Explained For Dinosaurs. Quite useful, but involuntarily demonstrates what a mess this field has become.

Garbage Collection

  • Kirk Pepperdine wrote about Java’s garbage collection, a very informative article that also gives an overview of the technology’s historical evolution.
  • Ken Fox made a series of nice memory space animations for Visualizing Garbage Collection Algorithms, a 2014 article that came to my attention last year.
  • Nitsan Wakart was surprised to discover What a difference a JVM makes. Concurrent code that was lock-free in Java 8 suddenly had a machine-level lock in Java 9 – a requirement of the new garbage collector, reducing speed over tenfold.

Blogosphere News

Finally, here’s a roundup of other noteworthy blogs or posts.

  • Daniel Lemire has introduced a weekly roundup of Science and Technology links on his blog. His selections are quite good and further improve what was already an outstanding blog on programming and various technical and scientific subjects.
  • I newly discovered the excellent blog of Java and machine language expert Richard Startin. Follow him if you are at all interested in the computational performance of Java code.
  • Java performance guru Aleksey Shipilёv has started a series of short (by his standards) posts that analyze various individual JVM features. You can find a list and compilation on the overview page, JVM Anatomy Park.
  • Ur-blogger Eric S. Raymond had a fascinating series on the future of systems languages. The last one was called C, Python, Go, and the Generalized Greenspun Law and links to the three earlier entries near the top. I suggest you read them all in order.
  • And if you want an extremely thorough overview of 2017, Dustin Marx’s Significant Software Development Developments of 2017 has you covered. The first numbered items cover Kotlin and React, and you’ll find many more language news towards the end of the post.

Leave a Reply

This site uses Akismet to reduce spam. Learn how your comment data is processed.