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

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


  • Architectures You've Always Wondered About

    Hard-earned lessons from the names you know on scalability, reliability, security, and performance.

  • Machine Learning: The Latest Innovations

    AI and machine learning is more approachable than ever. Discover how ML, deep learning, and other modern approaches are being used in practice.

  • Kubernetes and Cloud Architectures

    Learn about cloud native architectural approaches from the leading industry experts who have operated Kubernetes and FaaS at scale, and explore the associated modern DevOps practices.

  • Evolving Java

    JVM futures, JIT directions and improvements to the runtimes stack is the theme of this year’s JVM track.

  • Next Generation Microservices: Building Distributed Systems the Right Way

    Microservice-based applications are everywhere, but well-built distributed systems are not so common. Early adopters of microservices share their insights on how to design systems the right way.

  • Chaos and Resilience: Architecting for Success

    Making systems resilient involves people and tech. Learn about strategies being used, from cognitive systems engineering to chaos engineering.

  • The Future of the API: REST, gRPC, GraphQL and More

    The humble web-based API is evolving. This track provides the what, how, and why of future APIs.

  • Streaming Data Architectures

    Today's systems move huge volumes of data. Hear how the innovators in this space are designing systems and leveraging modern data stream processing platforms.

  • Modern Compilation Targets

    Learn about the innovation happening in the compilation target space. WebAssembly is only the tip of the iceberg.

  • Leaving the Ivory Tower: Modern CS Research in the Real World

    Thoughts pushing software forward, including consensus, CRDT's, formal methods & probabilistic programming.

  • Bare Knuckle Performance

    Crushing latency and getting the most out of your hardware.

  • Leading Distributed Teams

    Remote and distributed working are increasing in popularity, but many organisations underestimate the leadership challenges. Learn from those who are doing this effectively.

  • Full Cycle Developers: Lead the People, Manage the Process & Systems

    "Full cycle developers" is not just another catch phrase; it's about engineers taking ownership and delivering value, and doing so with the support of their entire organisation. Learn more from the pioneers.

  • JavaScript: Pushing the Client Beyond the Browser

    JavaScript is not just the language of the web. Join this track to learn how the innovators are pushing the boundaries of this classic language and ecosystem.

  • When Things Go Wrong: GDPR, Ethics, & Politics

    Privacy, confidentiality, safety and security: learning from the frontlines, from both good and bad experiences

  • Growing Unicorns in the EU: Building, Leading and Scaling Financial Tech Start Ups

    Learn how EU FinTech innovators have designed, built, and led both their technologies and organisations.

  • Building High Performing Teams

    To have a high-performing team, everybody on it has to feel and act like an owner. Learn about cultivating culture, creating psychological safety, sharing the vision effectively, and more

  • Scaling Security, from Device to Cloud

    Implementing effective security is vitally important, regardless of where you are deploying software applications.