Back Original

The Missing Programming Language - Why There's No S-Tier Language (Yet)

DISCLOSURE: If you buy through affiliate links, I may earn a small commission. (disclosures)

I've spent years searching for a programming language that has it all: expressive types, a large ecosystem, good performance, and good devx.

Every language I've tried makes me choose. So here I wanted to share my view of the current language landscape, where they fall short, and what I think they can do to have it all and become S-Tier.

Related: My 2025 Programming Language Tier List - where I noted S-tier is conspicuously empty

Programming Language Wish List

What I want in a language:

I don't think this is unreasonable. Each of these features exist, just not in the same package.

My Definition of Expressive Types

I get asked about this a lot and I think everyone has their own definition so I want to be clear about what I mean. When I say expressive types, I mean:

Most languages have 1-2 of these. Few have all 5. But IMO these are powerful tools for modeling the domain and if you can model the domain well you can make invalid types unrepresentable and if you can do that you end with a system that is MUCH more robust to many kinds of common errors. If you can't do that then you have implicit rules engineers need to keep in mind long term and it's an error waiting to happen when someone eventually misses that implicit.

Note: Ergonomics matter too - the easier types are to read and write, the more developers will use them to model simple, correct domains. But since this is highly subjective I'm not including it in the formal criteria. But as a general rule, less boilerplate is good.

Programming Language Scores

The Programming Language Landscape

Here's how I'd score popular languages across these dimensions:

Language Expressive Types Big Ecosystem Large Community Performance DevX Score
C# Mixed Yes Yes Yes Yes 4.5
Kotlin Yes Yes Mixed Yes Yes 4.5
TypeScript Mixed Yes Yes Mixed Yes 4.0
Go No Yes Yes Yes Yes 4.0
Rust Yes Yes Yes Yes No 4.0
Swift Yes Mixed Mixed Yes Yes 4.0
Java Mixed Yes Yes Yes Mixed 4.0
F# Yes No No Yes Yes 3.0
PHP No Yes Yes No Yes 3.0
Python No Yes Yes No Yes 3.0
Ruby No Yes Yes No Yes 3.0
C/C++ No Yes Yes Yes No 3.0
Gleam Yes No No Mixed Yes 2.5
Elixir No Mixed Mixed Mixed Yes 2.5
Zig Mixed No No Yes Mixed 2.0

Scoring: Yes=1, Mixed=0.5, No=0. Max possible = 5.0 (S-Tier). No current language achieves it.

Some patterns:

Here's my reasoning for each language:

C# - Almost There (4.5)

Closest to S-tier for me. If unions land well in C# 15, this could be the answer. But I have reservations about whether it actually will be in this release and how the ergonomics play out in terms of boilerplate and interop with the rest of the language / ecosystem.

Related: Why I'm Moving my Blog from F# to C#

Kotlin - JVM's Best Hope (4.5)

If you're okay with JVM, this is a strong choice. The Android-centric community is the main gap.

TypeScript - Great Types That Lie (4.0)

Most pragmatic choice. Types don't lie often enough to matter for most projects. Web-native is a huge plus.

Related: TypeScript Result Types

Go - Deliberately Incomplete (4.0)

If Go had expressive types, it would be THE language. The deliberate design against it is one of the primary factors I rank it in C Tier.

Rust - The Learning Curve (4.0)

On paper, Rust is closest. In practice, the DevX cost is real. I'm currently trying "high-level Rust" with Arc/Clone to avoid the edges during my time at Recurse Center but we'll see how this works in practice.

Swift - Apple's Walled Garden (4.0)

Great language trapped in Apple's ecosystem. If you're building for Apple, it's excellent. Otherwise, limited.

Java - The Boilerplate King (4.0)

Enterprise workhorse but showing its age. Kotlin exists for a reason.

PHP - Surprisingly Decent Now (3.0)

PHP has improved dramatically but the type system hasn't kept up. Fine for web and a very productive language but I think there are better options out there.

F# - Beautiful but Lonely (3.0)

My favorite language that I can't fully commit to. It's fun but the ecosystem gap is painful.

Related: 7 Reasons F# Sucks, Why I'm Moving my Blog from F# to C#

Python - Easy but Fragile (3.0)

Great for scripts and ML, painful at scale. The lack of real types catches up with you.

Related: Types vs No Types - How Types Allow Code to Scale

Ruby - Developer Happiness, Type Sadness (3.0)

Similar story to Python - great DevX and ecosystem, but no real types and slow. Rails is still a productivity powerhouse if you accept the tradeoffs.

C/C++ - Manual Everything (3.0)

Still necessary for systems programming, but I'm not reaching for it unless I have to - and even then I'm trying very hard to bend other langs to accomplish the task instead.

Gleam - The New Contender (2.5)

Most promising new language. If BEAM's compute limits don't matter for your use case, watch this one. Though it probably needs corporate backing and several years to mature before it can gain the ecosystem and community it needs to compete.

Lua - Embedded Niche (2.5)

Excellent at what it does (embedding), not a general-purpose choice.

Elixir - BEAM Without Types (2.5)

Great for specific use cases (real-time, distributed web), but no types and niche usecase is a dealbreaker for me.

Zig - Not Ready Yet (2.0)

Interesting C replacement, but not trying to be high-level. Not what I'm looking for.

Why Does This Gap Exist?

Network Effects Lock In Flawed Languages

Once a language is big, ecosystem compounds. Jobs exist, so people learn it, so more jobs exist. Even flawed languages stay dominant because switching costs are too high.

Related: The Programming Language Death Spiral

Backwards Compatibility Traps

Once a language has billions of lines of code in production, adding fundamental features becomes nearly impossible without breaking existing code.

Easier to design right from scratch than retrofit.

Design Philosophy Misalignment

Sometimes languages miss important features not because of technical constraints, but because the creators' backgrounds and problem domains didn't prioritize those needs.

AI Amplifies the Adoption Gap Between Mainstream and Niche Languages

AI is better at top 10 languages (more training data). Small languages get worse AI support, making them harder to use. So larger languages will be easier to onboard to and stick with.

This accelerates the death spiral - developers choose languages where AI helps them, making those languages more popular, generating more training data, making AI even better at them.

Is There Hope?

C# Unions (2026?)

Mads Torgersen outlined plans for C# 15. Even if it lands, will the ergonomics be good? F# interop is an open question. But if it works, C# becomes the closest thing to an S-tier language for general-purpose development.

High-Level Rust

I'm experimenting with writing Rust like a high-level language - Using Arc and Clone generously to avoid ownership and lifetime complexity. Trades some performance (10%) for productivity (??%). If this works, Rust could be the language I've been looking for but really all depends on the devx gains.

Gleam

Great types, BEAM ecosystem. 70% admiration in its first Stack Overflow survey appearance (second only to Rust). If your use case is web/distributed and not compute-intensive, worth considering. But I do think it has several years of maturing / growing to do before it's "stable".

Kotlin Multiplatform

Already has the type system. JetBrains is actively pushing Kotlin Multiplatform for cross-platform development. If the multiplatform story matures and community expands beyond Android, it could hit S-tier.

Main gap: Community perception as "the Android language" - hard to shake even when the tech is there.

TypeScript Runtime Validation

If runtime type checking became standard (runtime validators, ts-native libraries that enforce types), it would close the soundness gap. V8 keeps improving, Bun/Deno close the performance gap with compiled languages.

Main gap: Unsound types are a design choice, not a bug. Tooling can mitigate but may never fully fix.

Someone Builds It

The features exist. Someone just needs to combine them right. With a Rust backend for performance, TS-like syntax for familiarity, F#-like types for safety. A Zig moment for typed functional programming.

Next

The missing language is real. Each option forces a tradeoff I don't want to make.

For now, my approach: TypeScript for web stuff (pragmatic), C# for backend (best of the mainstream), trying out high-level Rust to see if it can be productive.

Maybe C# 15 is the answer. Maybe someone builds something new. Maybe I'm too picky.

But I don't think wanting good types AND a good ecosystem is unreasonable. We should demand better from our tools.

Q: What's your current favorite language? What tradeoffs are you making for it?

If you liked this post you might also like: