You are viewing content from a past/completed QCon

Presentation: When and How to Win With New Programming Languages

Track: The Right Language for the Job

Location: Mountbatten, 6th flr.

Duration: 10:35am - 11:25am

Day of week: Tuesday

Slides: Download Slides

Share this on:

This presentation is now available to view on

Watch video with transcript

What You’ll Learn

  1. Hear about DSLs and what they are good for.
  2. Learn when it makes sense to adopt a new language, when to wait and how to wait.
  3. Listen to some experiences working in Scala and Racket.


Life is short and burdened with tedium. Automation is one of our most potents for escaping tedium, but our prime tool for creating automation—the programming language—is itself surprisingly resistant to change. In this talk I'll make the case for adopting new programming languages, and look at the conditions when a language could and should be adopted in a commercial setting.


Getting more done in less time is a worthwhile goal, if only because life is short. For programmers, process and software libraries can help but one of the most potent forces for improving productivity is improving the programming language. However this is a relatively infrequent occurence. While the field of programming language research advances rapidly the most commonly used languages, such as Java and Python, are still based on ideas from 1980s.


There are signs of progress, though. Scala has a large community. Typescript is gaining popularity in the world of front end development. Rust is the hot new thing (but will it actually gain traction?) Even Haskell is getting more use, largely in the world of blockchain startups. Can we determine the conditions that will make a previously obscure language successful? When is it a good idea to invest in a new language in a commercial setting? How can one successfully adopt a new language? These are the questions I’ll tackle in my talk, based my experiences working with Racket and Scala, and what I’ve seen happening in the industry at large.


What are you doing these days?


Currently I am a consultant working primarily with Scala. I do a lot of training and mentoring—generally helping teams get better with Scala.


Tell me about your talk.


My talk is about adopting new programming languages. I got a strong interest myself in programming languages and I feel somewhat frustrated at the slow rate of adoption of new technology in the industry. It's about how you can adopt and when you should look to adopt a new language. Then I look at my experience as adopting languages. Another part is about what I see as a growing rise of the DSL languages. Takes DevOps, for example Terraform, Chef, Puppet or whatever. They all have these DSL configuration languages. I think there are more DSLs than people realise but we can do a better job of designing them.


How much of your talk is about adopting new programming languages and how much of it is about Scala and Racket?


The majority will be about adopting languages. I don't think the specifics of Scala and Racket are really the focus of what I want to talk about. I think it's more interesting to talk about how you could adopt languages, and some of the aspects around DSLs which I think are probably more close to what people are likely to do.


When you talk about strategies for adopting languages, are you going to talk about ways to get them into production or use them for testing?


I think there are a few points about languages adoption which is going to be along the lines of languages providing freedom of expression versus languages as a platform similar to how JavaScript is a platform now, while other languages compile into JavaScript. That's one of the points. Other points around adoption are when you should wait and when you should adopt. I don't think that getting a language into production is so easy. I think if you're going to choose a language for the majority of your code then you need to go all in on this. That's what I've seen that works. I think you've got much better chances for adoption hitting DSL tasks. Small fixed tasks you could really address with a DSL, rather than a big rewrite saying we're going to change everything from Java to Rust or whatever, I think that is a very high risk.


When you talk about DSL you mean fluent programming?


When I think of fluent programming I think of internal DSLs. That’s certainly a reasonable approach, with a lot of benefits, but external DSL, a true language, shouldn’t be discounted. I see it DSLs in a lot of different work. I see people who are compiling their language into let's say Terraform. The client I'm working for has this configuration language that’s likely to become an external DSL. We're considering a non-Turing complete language so could you guarantee that it actually terminates because the last thing you want a support engineer or someone sending your production code into an infinite loop.


What is Racket?


Racket is an implementation of Scheme. The Scheme community has always had a heavy focus on building languages, but Racket focuses on this more than any other language I know. It's a great tool for quickly prototyping a DSL.


What do you want someone who comes to your talk to leave with?


I want people to walk away with increased appreciation for the power of different programming languages to solve particular problems in a concise manner. And I want them to know how to approach adopting a DSL or new language to solve their specific problems.

Speaker: Noel Welsh

Founding partner @underscoreio

Noel is a founding partner at Underscore, where he helps teams become more productive with Scala and functional programming. Noel has 20 years experience working on systems ranging from recommender systems, to web services, to embedded software. His main technical interests are functional programming, machine learning, digital art, and distributed systems. He has a PhD in machine learning and is the author of "Scala with Cats", "Essential Scala", and "Creative Scala".

Find Noel Welsh at

Last Year's Tracks