BT

InfoQ Homepage Articles Programming Languages InfoQ Trends Report - October 2019

Programming Languages InfoQ Trends Report - October 2019

Bookmarks

Key Takeaways

  • 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.

The report provides a summary of how the InfoQ editorial team currently sees the adoption of technology and emerging trends within the programming language space, with the exclusion of Java / the JVM and JavaScript / Web Development which are reported on separately. This is an opinion piece that is formed from extensive internal discussions with our editors, who are active software engineers themselves, reviews of external public survey results, and reviews of internal or private survey and analysis results. Extracts of the various editorial conversations can be found below.

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
  • JavaScript — the most used overall 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
  • Ballerina
  • 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.

Dylan Schiemann, CEO of SitePen and co-founder of Dojo, is an established presence in the JavaScript and open source communities. Under his direction, SitePen has become the definitive source for enterprise organizations that are focused on creating well-tested, highly performant and sustainable web applications. Dylan’s current initiatives include guiding development on Intern and modern Dojo. Dylan was the co-founder of the Dojo Foundation prior to its merger with the jQuery Foundation to later form the Open JS Foundation. Dylan also helps organize the HalfStack meetup and conference series and TSConf. When not actively engaged in bettering SitePen and demanding better developer tools, Dylan enjoys traveling and sharing his experience at conferences around the world.

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.

Werner Schuster (murphee) writes software and writes about software. After a day of JavaScript wrangling, he prefers Mathematica, Clojure & Co.

 

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.

Rate this Article

Adoption
Style

Hello stranger!

You need to Register an InfoQ account or or login to post comments. But there's so much more behind being registered.

Get the most out of the InfoQ experience.

Allowed html: a,b,br,blockquote,i,li,pre,u,ul,p

Community comments

  • complexity in F#

    by John Broderick /

    Your message is awaiting moderation. Thank you for participating in the discussion.

    what's the complexity issue with F#? Is that in comparison with other functional first languages or C#?

  • Re: complexity in F#

    by Jonathan Allen /

    Your message is awaiting moderation. Thank you for participating in the discussion.

    There are couple areas where F#’s running into problems.

    The first is nullability issue, which is simply the fact that there are way too many different ways to express the concept of a null in F#. Some may quibble as say a ‘none’ is different than a ‘null’, but even if we accept that there is Option<T> vs ValueOption<T>. Then you add in further complications such as the difference between ValueOption<int> and Nullable<int>, CLR nulls hiding inside an Option<T>, the whole CLIMutable thing, etc. See Nullable Reference Types in F# 5 for more information.

    Then there’s the broader interopt story. To be successful with F#, you need to be able to consume, and often produce, C# libraries. This isn’t easy because F# conventions are very different from the conventions used in the rest of .NET. The language will fight with you because it wasn’t designed for the highly OOP-centric design that .NET has adopted. And to make matters worse, F# now has to figure out a good story for nullable reference types because C# developers using F# libraries are going to demand it.

    And I didn’t even mention async yet. F#’s asynchronous patterns and syntax predate async/await, which is another interopt issue that developers are having to deal with.

    Honestly, I think F# needs to hit the reset button. It can keep the syntax, but it needs to redefine the internals to be based on modern .NET concepts. For example, Option<string> should just be string? under the covers. Likewise, Option<int> should be mapped to Nullable<int>. But resetting a language is not very realistic. VB did it twice, the second time killed the language in the professional sphere.

  • Re: complexity in F#

    by John Broderick /

    Your message is awaiting moderation. Thank you for participating in the discussion.

    thanks for the detailed answer

  • Where is JuliaLang?

    by Murilo Hallgren /

    Your message is awaiting moderation. Thank you for participating in the discussion.

    Julia is fast as C & Fortran and EASY like Python!!!

Allowed html: a,b,br,blockquote,i,li,pre,u,ul,p

Allowed html: a,b,br,blockquote,i,li,pre,u,ul,p

BT

Is your profile up-to-date? Please take a moment to review and update.

Note: If updating/changing your email, a validation request will be sent

Company name:
Company role:
Company size:
Country/Zone:
State/Province/Region:
You will be sent an email to validate the new email address. This pop-up will close itself in a few moments.