The Pragmatic Engineer
The Pragmatic Engineer

TypeScript, C# and Turbo Pascal with Anders Hejlsberg

Brought to You By: • Antithesis – verify your system’s correctness without human review or traditional integration tests – and avoid bugs or outages. • WorkOS – Everything you need to make your app enterprise ready. • turbopuffer – a vector and full-text search engine built on object storage. It’s f

Featured Speakers

Anders Hejlsberg Guest

Topics Discussed

Episode Summary

Executive Summary: Anders Hejlsberg traces the evolution of modern developer tooling from Turbo Pascal to Delphi, C#, and TypeScript, emphasizing that languages are inseparable from IDEs and the full edit-compile-debug experience. He explains how Java, Windows, open source, and later AI shaped C# and TypeScript, and argues that future language and tooling design must prioritize locality, types, semantic analysis, and interactive verification.

Main Topics: Early programming roots and hardware intimacy: Hejlsberg describes learning to program on a 1970s HP machine in Danish high school, where systems were tiny, visible, and close to the hardware, shaping his appreciation for simple, layered-from-bottom software. Turbo Pascal and the integrated development experience: He explains how Turbo Pascal was designed as a complete loop—edit, compile, run, debug—not just a compiler, and why speed, interactivity, and low cost made it wildly successful. Delphi and the shift to GUI/client-server development: Hejlsberg recounts how Delphi responded to Windows GUIs and client-server apps by combining rapid development with compiled performance and extensibility. C# and .NET born from Java, VB, and the browser era: He details how Java’s rise, the Sun vs. Microsoft lawsuit, and the need to unify Visual Basic productivity with C power led to .NET and C# as simultaneous projects. TypeScript’s open-source strategy and tooling-first design: He explains that TypeScript existed to bring strong tooling to JavaScript through a type system, and that open sourcing and moving to GitHub were essential for adoption and workflow. Compiler architecture, Roslyn, and interactive services: Hejlsberg walks through TypeScript’s compiler pipeline and highlights how modern compilers must support IDE responsiveness, incremental analysis, and reusable semantic services. AI, code generation, and the future of programming: He argues that AI will increase code volume but not remove the need for programmers; instead, developers will shift toward review, architecture, semantic validation, and responsibility.

Key Arguments: Programming languages succeed when they are part of a whole experience, not just syntax and compilation; IDEs are effectively part of the language product. Turbo Pascal’s success came from combining compiled-language performance with BASIC-like interactivity, plus an affordable price point. Delphi addressed the new reality of Windows GUIs and client-server apps by merging visual rapid application development with compiled, object-oriented power. C# emerged because Microsoft needed a language that balanced Visual Basic ease with C performance, supported garbage collection and exceptions, and ran on a language-independent runtime. The Sun vs. Microsoft Java lawsuit made it strategically risky to build on licensed Java tooling, helping push Microsoft toward C# and .NET. TypeScript needed to be open source to win the JavaScript ecosystem; proprietary Microsoft tooling would not have been adopted. Types are crucial for tooling and large-scale maintainability, but TypeScript’s gradual typing is what makes it practical and widely usable. Modern compiler/IDE systems must be incremental, lazy, and interactive enough to answer editor queries in under 200 ms. AI is best used for toil reduction—tests, simple fixes, code review assistance, and migration tasks—but not as a substitute for understanding or ownership. Future AI-friendly languages and tooling should emphasize strong locality, explicit imports, semantic search, and fast feedback loops. Developers will increasingly act like architects and reviewers, not just typists, because AI can generate code faster than humans can. Efficiency still matters in compilers, infrastructure, and low-latency systems, but not all applications need optimization to the same degree.

Data Points: Early computer memory: 32K - HP2100 system at his high school Hard drive size: 1 megabyte - State-of-the-art hard drive on the early machine Compiler ROM size: 12K ROM - Early Pascal subset compiler he built for an 8-bit machine Turbo Pascal launch price: $49.95 - Low-cost product price that undercut competitors Competitor compiler price: $500 - Typical compiler price at the time Turbo Pascal competed C# design team size: 6-7 people - Small language design group at Microsoft Language design cadence: 3 meetings per week, 2 hours each - Regular technical design sessions for C# TypeScript adoption timeline: Moved to GitHub in 2014 - Open development became much more effective after the GitHub migration TypeScript/JS popularity ranking context: Number 10 then gradually climbed - He describes TypeScript’s rise on GitHub over time IDE responsiveness target: 200 milliseconds - Threshold for making editor feedback feel fast Career duration at Microsoft: 30 years - Length of his Microsoft tenure mentioned in the conversation Programming language work duration: 40 years - His long-term experience designing programming languages Version maturity cycle: 10-year cycles - His claim that programming languages take years and multiple versions to become great AI and language model behavior: Types, inference, and locality - Key characteristics he says matter for AI-friendly code and tooling

Pivotal Quotes: "The product is the whole edit, compile, run, debug cycle." — Anders Hejlsberg: He explains that a programming language is inseparable from the IDE and surrounding workflow. "Language design is 90% the same and 10% new for pretty much every language." — Anders Hejlsberg: He describes the repetitive but evolutionary nature of compiler and language construction. "You can't absolve yourself from understanding what's going on. That's not programming." — Anders Hejlsberg: He argues that AI can assist, but human responsibility and comprehension remain essential.

Implications: The episode suggests future language/tooling winners will combine strong types, locality, and interactive semantic services with AI-assisted workflows. Developers will spend more time reviewing, designing, and verifying than typing, while responsibility stays human.

🔓 Sign Up for Unlimited Episode Search

About The Pragmatic Engineer

View all episodes from The Pragmatic Engineer