know.2nth.ai Software Programming languages
software · Languages · Skill Leaf

Pick one. Then stop worrying about it.

Teams burn enormous energy on "which language?" when the honest answer is: it matters far less than the discipline around it — tests, version control, review, CI. A well-engineered project in a boring language beats a sloppy one in a fashionable language every time. That said, the choice isn't arbitrary; a few real factors should drive it.

Typed vs dynamic Ecosystem fit Runtime fit Agent-friendly

The discipline matters more than the language.

It's the most over-debated decision in software. The truth most senior engineers settle on: within the set of mainstream, well-supported languages, the choice is a second-order factor. What actually determines whether a project succeeds is everything this branch is about — is it in version control, are there tests, is there review, does CI gate the changes? A disciplined team ships reliable software in Python, TypeScript, Go, or Java. An undisciplined team ships fragile software in all of them.

So the goal of choosing a language isn't to find the "best" one — there isn't one. It's to pick a good-enough, well-supported language that fits the job and the team, then spend your real energy on the engineering practices that compound. The rest of this leaf is the small number of factors that genuinely should tip the choice.

Typed vs dynamic.

If one distinction is worth understanding, it's this. A statically typed language checks the shape of your data at compile time; a dynamically typed one checks it at runtime, if at all.

Types are a safety net the compiler holds for free. They catch a whole class of mistakes before the code ever runs, they document what a function expects, and they make large codebases navigable — your editor knows what everything is. The cost is a little ceremony and a compile step. Dynamic languages trade that away for speed of writing and flexibility, at the price of more bugs surfacing only at runtime.

The decisive trend of the last decade: gradual typing won. TypeScript added types to JavaScript; Python added type hints (checked by mypy/pyright). The mainstream answer in 2026 is "a dynamic language with types bolted on, used seriously" — you get the flexibility when prototyping and the safety net when the codebase grows. For anything that will live longer than a weekend, lean typed.

Types help agents most of all

Static types are a tight feedback loop, and feedback loops are what make agents reliable. When a coding agent writes typed code, the type-checker immediately tells it (and you) when something doesn't fit — wrong shape, missing field, bad call. That's an automated reviewer catching the agent's mistakes the instant they're made. Typed languages don't just help humans navigate a codebase; they give agents a fast, objective signal for whether their change is even coherent.

Pick by the job.

Not a ranking — a map of which language fits which job. For most 2nth work the answer is one of the top two.

LanguageBest atNotes
TypeScriptWeb front & back ends, edge/serverless, anything on Node/Bun/Workers, agent toolingJavaScript with types. The default for web and edge. Huge ecosystem; runs everywhere; agents write it very reliably.
PythonData, ML/AI, scripting, automation, backends, glueThe lingua franca of data and AI. Gentle to read, vast libraries. Add type hints for anything that lasts.
GoNetwork services, CLIs, infrastructure tooling, high-concurrency backendsSimple, fast, statically typed, compiles to a single binary. Built for services and ops tooling.
RustPerformance-critical systems, WASM, where memory safety + speed both matterBest-in-class safety and performance, steeper learning curve. Reach for it when the constraints are real, not for fashion.
Java / C#Large enterprise systems, Android (Kotlin), Microsoft stacksMature, typed, enormous ecosystems. The pragmatic choice where the org and talent already live there.

For most 2nth builds the working default is TypeScript on the edge (Cloudflare Workers, Bun, Node) and Python for data and AI. Both are typed-capable, agent-friendly, and have the deepest ecosystems for the work we do. Reach past them only when a real constraint — raw performance, a specific platform, an existing team's expertise — points elsewhere.

Four factors, in order.

01 · Ecosystem fit

Do the libraries exist?

The biggest lever. ML lives in Python; the web lives in TypeScript. Pick the language where the libraries for your problem already exist — you'll write less and ship sooner.

02 · Runtime fit

Where does it run?

Cloudflare Workers wants JS/TS or WASM. A data pipeline wants Python. An embedded board wants C/Rust. The deploy target constrains the language as much as the problem does.

03 · Team fit

What can the team maintain?

The best language is the one your team (and the next hire, and the agent) can read and maintain. A clever choice nobody else knows is a liability, not an asset.

04 · Boring is good

Prefer proven over novel

For production, a mature language with a deep ecosystem and a big talent pool beats an exciting new one. Save novelty for problems that genuinely need it.

Notice what's not on the list: benchmarks, syntax preferences, and what's trending. Those dominate the arguments and decide almost nothing. Ecosystem, runtime, and team are what actually determine whether the project goes well.

A new factor in the choice.

There's now a real consideration that didn't exist a few years ago: how reliably can an agent write this language? Coding agents are dramatically better in some languages than others, and it's not random — it tracks the things that have always made languages good for humans, amplified.

Agents are strongest in Python and TypeScript. Two reasons. First, training data: these are the two most-written languages on the open web, so models have seen the most examples and idioms. Second, the feedback loop: a typed language with fast tooling (TypeScript's compiler, Python with pyright) gives the agent an immediate, objective signal when it's wrong, which it can act on before a human ever sees the code. Languages that are both widely-written and typed are the ones agents operate in most reliably.

The practical upshot

If you expect agents to do meaningful work in a codebase — and increasingly you should — that's a genuine point in favour of TypeScript and typed Python, on top of all the human reasons to choose them. It's the same principle as the rest of this branch: the practices and tools that make a codebase good for people (types, tests, fast feedback) are the same ones that make it good for agents. You don't optimise separately for AI; you do good engineering and the agents benefit.

Hire for the pool, not the fashion.

Talent availability is a first-class factor here

In the SA market, the language you choose shapes who you can hire and how fast. Python and JavaScript/TypeScript have the deepest local talent pools and the most active communities and bootcamps; Java and C# are strong in enterprise and banking. Choosing a niche language for a client project can quietly become a hiring and maintenance problem two years on. The pragmatic SA default — typed Python and TypeScript — is also the one that's easiest to staff, easiest to hand over, and (now) easiest for agents to extend.

Where this links in the tree.

Primary sources only.