Oorspronkelijk geschreven voor het onderzoeksproject programming-languages-ai-era.
De gelijke stand die geen gelijke stand is
TypeScript en Go staan in mijn framework gelijk op 4.01, en die gelijke stand is de interessantste bevinding in het cohort. Een gewogen matrix die tien talen op elf dimensies rangschikt en aan de top een exact gelijke decimale score oplevert, oogt op het eerste gezicht als een framework dat weigert te kiezen. Het is het tegendeel. De gelijke stand vertelt je dat de vraag er meer toe doet dan de taal. Zodra je de cellen onder het gewogen totaal leest, houden de twee scores op gelijkwaardig te zijn. Go en TypeScript beantwoorden verschillende vragen. Elk is het schoonste antwoord op zijn eigen vraag. Waarom CTO’s en VP’s Engineering dit moet interesseren: als je er een adopteert alsof het een generieke topkeuze is, zet je verkeerd in op de workload, niet op de taal. De frameworkversie is v0.6 en de rest van dit stuk is de beslisregel die eruit volgt.
Waarom de gelijke stand niet dubbelzinnig is
De getallen lopen scherp uiteen zodra je naar de cellen kijkt.
| Cel | Go | TypeScript | Wat het meet |
|---|---|---|---|
| HC (Human Cognition) | 5 | 4 | leesbaarheid, governance |
| MC (Machine Cognition) | 4 | 4 | statische analyseerbaarheid |
| AO (AI-Agent Operability) | 5 | 5 | sluiting van de agent-loop |
| RE (Runtime/ecosystem) | 4 | 4 | productie-deployment |
| SV (Strategic Viability) | 4 | 4 | stewardship en toekomstbestendigheid |
| AIN (AI-Systems Native) | 2.0 | 1.5 | first-party AI-oppervlak |
| AIE (AI-Systems Ecosystem) | 3.5 | 5.0 | AI-oppervlak van derden |
| SON (Structured-Output Native) | 3.0 | 2.5 | first-party schema-oppervlak |
| SOE (Structured-Output Ecosystem) | 3.0 | 5.0 | schema-oppervlak van derden |
| EDR (Ecosystem Dependency Risk) | 3.5 | 3.0 | weerbaarheid van de backer-mix |
| RCH (Reachability to Top Tier) | 3.5 | 4.0 | plausibiliteit van het traject |
| Gewogen | 4.01 | 4.01 | dimensiegewogen som |
De voorsprong van Go zit op de helft taal-en-toolchain: Human Cognition (HC=5, alleen aan het cohortplafond) dankzij een bewust klein oppervlak, en AI-Agent Operability (AO=5, gedeeld met TypeScript en door geen andere taal gehaald) dankzij één canoniek commando en één canonieke formatter. De voorsprong van TypeScript zit op de AI-applicatiehelft: AI-Systems Ecosystem (AIE=5.0, gedeeld met Python en door geen andere taal gehaald) en Structured-Output Ecosystem (SOE=5.0, opnieuw alleen gedeeld met Python). TypeScript is naast Python de enige taal in het cohort die beide ecosysteemplafonds raakt. Hetzelfde gewogen totaal. Verschillende vormen. Verschillende inzetten.
De ezel van Buridan verhongerde tussen twee gelijke balen hooi. De matrix geeft je twee gelijke balen en een regel om te kiezen; de regel is het punt, niet het gelijkspel.
Profiel A: Go is de schoonste inzet op backend-services
Lees de Go-kolom door een CTO-lens en het beeld is ondubbelzinnig: Go heeft de schoonste agent-loop in het cohort omdat het de schoonste toolchain in het cohort heeft. go build, go test, go vet, go mod is één canoniek commando-oppervlak. Geen discussies over projecttooling, geen Maven-versus-Gradle, geen setuptools-versus-Poetry-versus-uv: één pad, gedocumenteerd door hetzelfde team dat de compiler levert. Minimum version selection in go mod lost het probleem van lockfile-versieverschillen op zonder lockfile-gedoe. gofmt is afgedwongen conventie, geen stilistische optie, wat betekent dat door agents gegenereerde code bij de eerste commit op dezelfde canonieke layout landt als door mensen geschreven code. gopls is de officiële implementatie van het Language Server Protocol, gefocust, en geleverd door het taalteam. De eenvoud van de runtime vertaalt zich direct: één statische binary, geen GIL-contentie, een deployment-oppervlak dat in twintig regels Kubernetes-manifest past. De operationele winst stapelt zich op waar de taak van de agent is “lever een service die betrouwbaar draait”. Kubernetes-operators worden in Go geschreven. Het grootste deel van de dragende infrastructuur van de Cloud Native Computing Foundation, etcd, containerd, Helm, Prometheus, Kubernetes zelf, is in Go geschreven. Command-line-tools die als één binary verschijnen, kiezen standaard Go. Stateless services die onbeheerd op schaal moeten draaien, kiezen standaard Go.
Het afhankelijkheidsrisicoprofiel versterkt de inzet. De score van Go op Ecosystem Dependency Risk is 3.5, middenmoot, verankerd door het stewardship van Google over de taal zelf en door de commerciële first-party Go-SDK’s van Anthropic en OpenAI: de dragende laag tussen Go-services en frontier-modellen staat onder stewardship van leveranciers, niet van één maintainer. Waar Go het juiste antwoord is: backend-agentinfrastructuur waar de taak van de agent is een service te leveren die betrouwbaar draait onder SRE-toezicht en een operationele horizon van vijf jaar overleeft.
Dit klopt niet als de hoofdtaak van je agent is LLM’s aanroepen en structured output parsen. Go’s encoding/json met struct tags is typeveilig, maar het validatie-ecosysteem is versnipperd over go-playground/validator, ozzo-validation en invopop/jsonschema, zonder duidelijk equivalent van Pydantic of Zod. De LLM-specifieke ergonomielaag is dun. LangChainGo loopt in functionele breedte achter op LangChain.js en LangChain Python. Kies Go voor de service. Kies Go niet voor de supply chain van prompt engineering.
Profiel B: TypeScript is de schoonste inzet op AI-applicaties
Lees de TypeScript-kolom door dezelfde CTO-lens en een ander beeld wordt scherp. AI-Systems Ecosystem-score 5.0, het cohortplafond, dat geen andere taal dan Python haalt; de eerstvolgende zijn Java en Rust samen op 4.0. De libraries onder die score zijn allemaal first-party van de leveranciers die ertoe doen: de officiële TypeScript-SDK van Anthropic, de OpenAI Node SDK, LangChain.js als de canonieke TypeScript-port van LangChain, de officiële MCP TypeScript SDK met Anthropic als mede-steward, en een TypeScript-distributie van LlamaIndex. De Vercel AI SDK breidt het structured-output-oppervlak uit met generateObject en streamObject. De Structured-Output Ecosystem-score van 5.0 rust op Zod als de facto standaard voor schemavalidatie in de taal, ArkType dat opkomt als high-performance alternatief, zod-to-json-schema dat tool-call-definities in LLM-API’s voedt, en native compile-time-inferentie via z.infer. Hetzelfde Zod-schema stroomt door het tool-typing-oppervlak van de Anthropic SDK, de structured-output-modus van de OpenAI SDK, de generateObject van de Vercel AI SDK en de eigen grensvalidatie van de applicatie. Eén schema, vier oppervlakken, volledige type-inferentie van begin tot eind.
Operability komt op dezelfde as van toolchain-unificatie waar Go op wint, alleen vanuit een ander startpunt: de door Microsoft onderhouden TypeScript Language Service over het Language Server Protocol dat Microsoft zelf heeft bedacht, met strict mode en discriminated unions die agents een diep semantisch model geven om over te redeneren. De AI-Agent Operability-score van 5 evenaart Go. De end-to-end agent-loop in TypeScript blijft in één stack: de frontend, de backend, de agent en de structured outputs delen allemaal dezelfde types uit één tsconfig. Een startup die een chatinterface plus een agent-backend plus een tool-call-oppervlak in TypeScript levert, draait één typesysteem, niet drie. Het polyglotte interactie-oppervlak dat Python-plus-TypeScript-stacks straft, bestaat niet als beide helften TypeScript zijn.
Dit klopt niet als je afhankelijkheidsrisicoprofiel geen dragende libraries met één maintainer verdraagt. Zod zit één bus-factor-gebeurtenis verwijderd van een strategisch probleem: Colin McDonnell draagt de last, en het stewardship van Microsoft over TypeScript strekt zich niet uit tot Zod. De score van TypeScript op Ecosystem Dependency Risk is 3.0, in het onderste derde deel van het cohort (alleen Pythons 2.5 is lager) en ruim onder de 4.5 van .NET, precies vanwege dat structured-output-anker. Een risicomijdende lezer kan ArkType-plus-Zod-redundantie inkopen als hedge, maar die hedge is het soort ding dat om een alinea in het architecture decision record vraagt.
De beslisregel
Als de taak van de agent is een stateless service te leveren, een CI-pipeline te repareren, een Kubernetes-operator te refactoren of een CLI te schrijven, kies dan standaard Go. Als de taak van de agent LLM’s aanroepen, structured outputs parsen, prompt-evaluaties draaien, integreren met vector stores en tool calls aaneenrijgen omvat, kies dan standaard TypeScript. De splitsing is geen nipte beslissing. De cellen maken haar expliciet: HC=5 plus AO=5 tegenover AIE=5.0 plus SOE=5.0, twee verschillende voorhoedes van dezelfde 4.01.
Als je team beide bouwt, gebruikelijk bij AI-productstartups, draai je beide talen. Het polyglotte interactie-oppervlak hoort bij het werk, het is geen mislukking van de taalkeuze. Het als mislukking behandelen levert de verkeerde remedie op: een geforceerde consolidatie naar één taal die een boete betaalt op het profiel waarop de overgebleven taal niet voorop loopt.
Als je risicomodel stewardship door een leverancier hoger waardeert dan ecosysteembreedte, is .NET (3.99, derde in het cohort, 0.02 achter de gedeelde koplopers; EDR=4.5, alleen aan het cohortplafond, door geen andere taal gehaald; en Reach=4.5, eveneens alleen aan het cohortplafond) het derde profiel: leveranciersgebonden AI-applicatiewerk via Microsoft Semantic Kernel, Microsoft.Extensions.AI, ONNX Runtime .NET en de MCP C# SDK die Microsoft mede onderhoudt, en de sterkste toekomstinzet in het cohort. Dat is het onderwerp van stuk 4.
Wat er misgaat als ik het mis heb
Twee faalwijzen laten de tweedeling instorten.
Als één taal native AI-systeemprimitieven levert die het gat dichten, Microsoft voegt een first-party Anthropic .NET toe, Apple opent MLX cross-platform, of Google levert een officiële Go LangChain in partnerschap met Anthropic en OpenAI, dan stort de tweedeling in tot één standaardkeuze. De splitsing native/ecosysteem die TypeScript zijn huidige AIE-voorsprong geeft, is een eigenschap van wie vandaag first-party code levert; een steward die een geloofwaardige first-party AI-runtime levert, verschuift de cel, en de matrix verschuift mee.
Als structured-output-ergonomie ophoudt dragend te zijn, omdat de API’s van frontier-modellen native typed-output-modi leveren die Pydantic en Zod voor het gangbare geval omzeilen, dan krimpt het voordeel van SOE=5.0 tot een kleinere marge. Het structured-output-oppervlak van Anthropic en de structured-outputs-API van OpenAI bewegen al die kant op. De inzet van 18 tot 24 maanden op Zod als dragende infrastructuur is plausibel. Zeker is ze niet. De momentopname van de frameworkversie doet ertoe. De acht voorspellingen die ik aan het einde van de serie publiceer, waaronder of OpenAI of Anthropic first-party schemavalidatieprimitieven levert die Zod overbodig maken, zijn de toetsbare vorm van deze hedge.
Tot slot
De gelijke stand aan de top is het framework dat weigert twee verschillende inzetten tot één plat te slaan. Kies eerst de workload, dan de taal, en verdedig de inzet op de cellen, niet op het totaal.
Abonneer je op rutgerhemrika.substack.com voor stuk 3, de Python-paradox: het diepste AI-systems-ecosysteem in het cohort, een middenmoot-score overall, en wat de EDR- en AIN-helften van de rij met het gewogen totaal doen. Wil je de onderliggende data, claims en bronnen, dan staat het framework open op github.com/hemrika/programming-languages-ai-era.
De gelijke stand is het antwoord. Lees de cellen, niet het totaal.
David Brent zou het gelijkspel een win-win hebben genoemd. Het zijn twee verschillende weddenschappen met dezelfde score, en de enige verliezende zet is doen alsof de score het besliste.
Verwijzingen
De knipogen en citaten in dit stuk, met hun herkomst:
- The Office (BBC, 2001-2003): David Brent.
- Buridan’s ass, the medieval paradox of a choice between equal options, attributed to Jean Buridan (14th century).
- #AI-tijdperk
- #Programmeertalen
- #Engineeringstrategie

Rutger Hemrika
AI-strategie en -governance voor sectorsoftware. Schrijft vanuit bouwen, niet vanuit slides; elke claim draagt een bewijsniveau.