- Elixir has entered the trend report at the innovator adoption phase. It is a functional, concurrent, general-purpose programming language that runs on the Erlang virtual machine.
- We are seeing increased interest and innovation related to infrastructure-aware or cloud-specific languages, DSLs, and SDKs like Ballerina and Pulumi.
- We believe that Rust has moved from the innovator to early adopter phase, driven largely by its uptake within the infrastructure and networking data plane space—for example, Habitat and Linkerd 2.0.
- Python is continuing to gain in popularity, largely thanks to its roles within data science and teaching.
- Swift for iOS development has moved to early majority, primarily because of the popularity of iOS as a mobile application runtime. Kotlin, although tracked separately in the JVM trend report, has seen similar movement to early majority in relation to Android app development.
- For .NET we see a lot of interest in .NET Core, and, with .NET Core 3 having just arrived, we expect this will continue.
What are the programming language trends for 2019 and beyond? This report aims to assist technical leaders in making mid- to long-term technology investment decisions, and to help individual developers identify popular programming languages and choose where to invest their valuable time and resources in terms of which new programming languages to learn and skills to develop.
Both InfoQ and QCon focus on topics that we believe fall into the innovator, early adopter, and early majority stages. What we try to do is identify ideas that fit into what Geoffrey Moore referred to as the early market, where “the customer base is made up of technology enthusiasts and visionaries who are looking to get ahead of either an opportunity or a looming problem.” We are also on the lookout for ideas that are likely to “cross the chasm” to broader adoption. It is worth saying that in this context a technology’s exact position on the adoption curve can vary. As an example, Rust may be widely adopted at this point among San Francisco Bay Area companies, but may be less widely adopted elsewhere.
Notable changes since our internal 2018 programming trends report was produced include the addition of several languages that, although popular, we were not publicly tracking on the adoption curve, such as Python, Ruby, and PHP. Although technologies and factors relating to these languages were being discussed internally, we have now rectified their absence on our trend graph.
Programming Languages on the move: Elixir, Rust, and Swift
Elixir — a functional, concurrent, general-purpose programming language—has entered the trend report at the innovator adoption phase. Elixir builds on top of Erlang (which we have placed within the early adopter category) and runs on the Erlang virtual machine. Elixir and Erlang share the same abstractions for building distributed, fault-tolerance applications.
We believe that Rust has moved from innovator to early adopter, driven largely by its uptake within the infrastructure and networking data plane space — for example, Habitat and Linkerd 2.0. The language is also emerging as a natural partner for WebAssembly, which is helping drive awareness. In addition we note that Facebook has chosen to implement its Libra cryptocurrency using Rust.
Swift for iOS development has moved to early majority, primarily because of the popularity of iOS as a mobile application runtime. Although we are not tracking Kotlin within this trend category, the InfoQ Java and JVM trends report has seen the popularity of Kotlin increase as this is now the default language for developing Android apps.
Languages of Infrastructure: Ballerina, Pulumi, Dark
We are seeing increased interest related to infrastructure/cloud-targeted languages, DSLs, and SDKs like Ballerina and Pulumi. We’re also tracking Dark, which is currently in private beta and so doesn’t quite make it onto the graph yet. This category of technologies is currently firmly planted within the innovator adoption phase, but we are watching this closely, and will have a track dedicated to “Languages of Infrastructure” at QCon San Francisco in November.
For context, here is what our internal topic graph looked like for the second half of 2018. The 2019 version is at the top of the article.
Programming Languages 2018
.NET Q3 2019
For .NET we see a lot of interest in .NET Core, and with .NET Core 3 having just arrived, we expect this will continue. We’ve split .NET Core into the 2x branch and 3x branch on the graph since they are at different points in terms of adoption. Regarding .NET languages, we’re expecting C# 8 will be adopted rapidly. We continue to track F# with interest, but feel that complexity and a lack of strong support from Microsoft means it will unlikely gain broader adoption.
We have ASP.NET Core in early majority. At this point we believe most new web work is being done on ASP.NET Core, but not necessarily .NET Core. Some existing applications are being ported, but most will not. WCF is still really important in the enterprise, but MS isn’t properly supporting it in .NET Core. We’ve moved Visual Basic to laggards, and really see it as a language for hobbyists at this point.
The following is a series of lightly-edited and aggregated excerpts from the corresponding internal conversations between several of the InfoQ editorial team, which provides for more context for our recommended positioning on the adoption graph.
Abel Avram, Assistant Professor at the Computer and Automatics Faculty of the Technical University of Timisoara, and InfoQ Editor:
JetBrains published their The State of Developer Ecosystem 2019, polling 7,000 developers and coming to the following conclusions:
- Java — the most popular primary programming language
- Go — the most promising programming language
- Python — the most studied language
Go started out with a share of 8% in 2017 and now it has reached 18%. In addition, the biggest number of developers (13%) chose Go as a language they would like to adopt or migrate to.
StackOverflow had this to say about Python this year: “Python, the fastest-growing major programming language, has risen in the ranks of programming languages in our survey yet again, edging out Java this year and standing as the second most loved language (behind Rust).”
Arthur Casals, Computer Science researcher working in the area of Artificial Intelligence / Multi-agent Systems:
From what I’ve been seeing/reading lately, Rust seems to be picking up the pace in terms of adoption. It’s still (somewhat) niche though, and seen as “a replacement for C++.” However, with increasing numbers of available libraries and more adoption by major players, I think it’s a good bet for “early adopter.”
Elixir seems to be gaining some momentum especially in Brazil — there’s the fact that the language’s creator is Brazilian, and at least one of the new unicorns there (Movile) is openly using it (along with other trending companies such as Quero, in education).
I’ve seen some chatter about Elixir recently — especially after they had someone from Quero as a panelist, telling the story of how they adopted Elixir since the beginning, etc. There’s also a nice use case from the engineers at Discord, who recently wrote about using Rust and Elixir combined to provide backend support for 11 million concurrent users. This is a great real-world scenario involving both languages and a widely-used application, which definitely adds to their momentum.
Dylan Schiemann, CEO of SitePen and co-founder of Dojo:
Rust is in the early adopter stage, and in my experience its adoption is gaining in large part because of WebAssembly and perhaps Servo.
While Go has been interesting for a while, I would still classify its adoption as early adopter. Languages have a much slower lifecycle than frameworks for example, and I really wouldn’t say that Go has reached mainstream adoption yet. Similarly, Elixir and Elm would rate as early adopters.
In my opinion, Pony is a language I rarely hear mentioned, and remains an innovator at this time.
Swift has probably reached early majority due to it being the default entry point for iOS applications.
For Cloud-based IDEs, CodeSandbox and StackBlitz have gained significant popularity over the past year due to their impressive feature set for browser-based editing, as well as integration with local development tools.
After stagnating for a couple of years, Dart seems to be having a resurgence in large part because of Flutter.
Charles Humble, Editor in Chief at InfoQ:
I’d move Swift to early majority status — it seems to me that is continuing to pick up steam, and I think, judging from some of the announcements at WWDC — noticeably Swift UIKit — that we’re entering the “Swift era” for Apple’s platforms.
I think we can also move server-side Swift to early adopter. This is anecdotal, but talking to some people who are close to it, they tell me it’s seeing steady growth, and there is a lot of good stuff that has been driven by the open-sourcing of swift-nio, which has in turn increased the performance of several server-side frameworks that have moved on to it.
Rust definitely seems to have seen growth in the last year, and I’d move it from innovator to early adopter. They’ve been good at positioning it as a partner with Wasm, which is helping, I think.
I’m not sure about Go; it is still growing, but my sense is that it hasn’t quite reached the mass adoption point yet; possibly controversial, but I’d leave it at early adopter.
I’m hearing a bit more about Elixir, but I think it still stays at innovator; it’s still quite niche.
We also should put Python on here, and probably within early majority. It’s continuing to grow in popularity, largely driven by its popularity among data scientists, and it is a language I think we need to talk about more.
I don’t think Pony is likely to move beyond Innovator; it’s a shame. I like the language, although I found the type system rather complex, and I do think it is an impressive piece of work, but the community for it is still very small. I would drop it from the tracker at this point.
Finally I’m hearing more about Dark, although it is in private beta. I find that interesting in the context of languages for infrastructure more broadly.
Werner Schuster, Software Plumber at Wolfram:
On Swift: it’s really early days, but Swift for TensorFlow (S4TF) might become a big selling point for Swift and a potential competitor to Python (at least in that area).
Here’s a very thorough and interesting document on why Swift and not other languages. It has Chris Lattner behind it who works on this now at the home of TensorFlow; and Chris is up to his old tricks, creating IRs all over the place (MLIR)
The S4TF name is kinda boring, and hides all the interesting bits (AD, etc).
On Python: I’m kind of intrigued where Python goes; it clearly has benefitted hugely from having been the glue language of choice for lots of data science/ML native libraries—something Ruby didn’t figure out a decade ago, to its loss.
On the other hand, Python has been remarkably resistant to any sort of modernization of its runtime (anyone remember Unladen Swallow?) not to mention the decades long project(s) for de-GIL-ing the interpreter (none of which have gone anywhere).
I think Jython is dead too. Last time I checked the website, it hadn’t been updated in years and isn’t anywhere near Python 3.x.
Infrastructure languages: there seems to be a new trend of coupling languages (some new ones) to deployment.
- Pulumi & co — Typescript
- Unison Language — A new functional language, by ex-Scala/Haskell folks, but nicely free of Monads; it is still very much early days here
- Dark Language — not public yet
I’m curious where all of these are going to go; might be an overly coupled flash in the pan, or the first step to language features that will seem indispensable in 15 years (like when subroutines became language features).
We’re potentially looking at a new, unencumbered Wasm future (browser and server side with WASI etc.) as well as a newfound appreciation of native (with VMs, containers, serverless) which reduces the appeal of the JVM/bytecode and allows everyone to just use the native versions of languages (the canonical versions that have been under development for decades). To be clear—none of what I said above really concerns JVM native languages like Clojure, Scala, or Kotlin, etc.
Ben Evans, Principal Engineer and JVM Technologies Architect at New Relic, Inc.:
We have a small amount of stuff in Elixir. I am not particularly a fan — it’s a nice enough language but unless you need the actual strengths of the BEAM VM (fault tolerance, massively distributed simple things), then it doesn’t seem to add much.
Most of the fans of the language seem to like it because it’s the “new shiny,” and/or they have Java Allergy (usually based on a view of the platform that’s >10 years out of date), but … I haven’t seen anything compelling in it that couldn’t also be done fairly easily in JVM tech (albeit with potentially a bit more ceremony) — and the JVM has much better, broader integrations with libraries.
Dustin Schultz: Lead Software Engineer, Pluralsight Author, and technology evangelist
I’ve seen quite a rise in Python in the past years. As others have stated, I think this is largely due to data science, teaching it schools/universities, and lighter frameworks like Flask (vs Django).
I don’t have anything against Python (I actually enjoy writing it), but I think it’s popularity does not represent usage for enterprise use cases. I rarely see large, distributed, enterprise applications written in Python that stay in Python. They may start out in Python, but they eventually switch to something else because of performance.
Charles Humble: In terms of the core framework it seems to have had incremental improvements since about 2012 — I think a lot of effort is focused on .NET Core. My sense of this is that .NET Core has moved from innovator to early adopter. I wonder if we should split it when .NET Core 3 lands and perhaps have .NET Core 3 back in innovator and .NET Core 2 in early adopter.
Likewise I think C# should probably shift to early majority — to be honest, I’m not sure why it isn’t.
I think F# is following something of a similar path to Clojure on the JVM — it’s a lovely language in my view, but I don’t see much sign of it expanding beyond its current size. Equally I don’t see use declining much either.
Jonathan Allen, Software Architect for KPMG and Lead .NET Editor for InfoQ:
Talking to the community, F# has two problems:
- It doesn’t have strong support from Microsoft
- The leadership is focused on chasing C# compatibility at the cost of ease of use
- It is continuing to grow more and more complex, which the Computer Scientists like. But, the trainers actually teaching F# are mainly focused on non-programmers who need a scripting language. So, the additional complexity is making their job harder.
I also think C# 8 is going to reach early adopter fast. People have been asking for nullable reference types since…well, .NET 1 to be honest.
Additional publicly available research and surveys that were discussed included: “The RedMonk Programming Language Rankings: June 2019” and the IEEE Spectrum “The Top Programming Languages 2019.”
Let us know which of the programming languages you have used in the last 12 months or which ones you are planning to use. Fill in the survey.
About the Authors:
Abel Avram: has been involved in many InfoQ editorial activities since 2008, enjoying writing news reports on Mobile, HTML, .NET, Cloud Computing, EA and other topics. He is co-author of Domain-Driven Design Quickly. In the past he worked for many years as software engineer and project/team leader on legacy systems, Java and .NET. He started his career as an assistant professor at the Computer and Automatics Faculty of the Technical University of Timisoara, Romania. If you are interested in submitting a news story or an educational article please contact him at abel [at] infoq.com.
Arthur Casals is a Computer Science researcher working in the area of Artificial Intelligence / Multi-agent Systems. He has been developing software for 20+ years, in different markets/industries. Arthur has also assumed different roles in the past: startup founder, CTO, tech manager, software engineer. He holds a B.Sc. degree in Computer Engineering and an MBA degree.
Charles Humble took over as editor-in-chief at InfoQ.com in March 2014, guiding our content creation including news, articles, books, video presentations and interviews. Prior to taking on the full-time role at InfoQ, Charles led our Java coverage, and was CTO for PRPi Consulting, a renumeration research firm that was acquired by PwC in July 2012. For PRPi he had overall responsibility for the development of all the custom software used within the company. He has worked in enterprise software for around 20 years as a developer, architect and development manager. In his spare time he writes music as 1/3 of London-based ambient techno group Twofish, whose debut album came out in February 2014 after 14 years of messing about with expensive toys, and spends as much time as he can with his wife and young family.
Ben Evans is a co-founder of jClarity, a JVM performance optimization company. He is an organizer for the LJC (London’s JUG) and a member of the JCP Executive Committee, helping define standards for the Java ecosystem. Ben is a Java Champion; 3-time JavaOne Rockstar Speaker; author of “The Well-Grounded Java Developer”, the new edition of “Java in a Nutshell” and “Optimizing Java” He is a regular speaker on the Java platform, performance, architecture, concurrency, startups and related topics. Ben is sometimes available for speaking, teaching, writing and consultancy engagements – please contact for details.
Dustin Schultz is a Lead Software Engineer, a Pluralsight Author, and a technology evangelist at heart. He holds a Bachelors and a Masters in Computer Science and has been developing software for over 15 years. Dustin loves all things tech, and you can often find him geeking out about the latest technology. He also loves to learn and has always wanted to know how everything works, so much that when he was little, his mom bought him a book on, “how things work” because she got tired of all his questions. Dustin Schultz blogs here.
Jonathan Allen got his start working on MIS projects for a health clinic in the late 90’s, bringing them up from Access and Excel to an enterprise solution by degrees. After spending five years writing automated trading systems for the financial sector, he became a consultant on a variety of projects including the UI for a robotic warehouse, the middle tier for cancer research software, and the big data needs of a major real estate insurance company. In his free time he enjoys studying and writing about martial arts from the 16th century. Jonathan Allen blogs here.