The Pragmatic Engineer — Episode Summary
Episode Overview
Title: Python, Go, Rust, TypeScript and AI with Armin Ronacher
Date: October 8, 2025
Host: Gergely Orosz
Guest: Armin Ronacher
In this insightful episode, Gergely Orosz talks with Armin Ronacher, renowned open-source engineer (creator of Flask), first engineer at Sentry, and now startup founder, about the evolving landscape of programming languages—particularly Python, Go, Rust, and TypeScript. The conversation also delves deep into the impact of agentic AI coding tools, startup technology choices, error handling at scale, language ecosystems, and the shifting culture of software development.
Key Discussion Points and Insights
1. Perspectives on Programming Language Ecosystems
-
Python’s Journey & Migration Drama
- The Python 2 to 3 migration was monumental, took over 10 years, and nearly “killed” Python due to breaking changes and the challenge of Unicode handling.
- Importance of supporting both versions for years; highlighted by Ronacher’s effort to reintroduce the Unicode string prefix to ease this process.
- Quote (Armin, 02:30): "If people didn’t put a lot of energy in to actually make that migration work, it could have been quite problematic for the language."
-
Comparative Strengths & Roles
- Python: Ubiquitous in infrastructure and ML. Still great for scripting and glue code, though increased complexity has made alternatives (like Go) more attractive for new backends.
- Go: Praised for its pragmatism, simplicity, and how well it works with AI tools (“thin abstractions”). Especially favored for backend web services.
- Rust: Best for performance-critical, binary data, or system-level work (e.g., databases, browsers, extensions). High friction for startups due to steep learning and compile times.
- TypeScript/JavaScript: Dominant in frontend, but server-side use is hampered by the bloated NPM ecosystem.
Quote (Armin, 13:28): "Good luck not having JavaScript in a company. And if you have JavaScript, you have TypeScript... But I don't want to build backend services in either one."
-
Language and Ecosystem Trade-offs
- Introducing new languages at a company often dictated by integration needs, performance bottlenecks, or stability.
- Embedding Rust into Python at Sentry was a pragmatic choice due to ecosystem alignment with required tooling (e.g., debug files).
2. Startups: Choosing and Using Languages
-
Rapid Iteration vs. Code Craftsmanship
- There’s a split between writing high-quality open-source libraries (where Rust shines) and moving fast in a startup (“Swiss watchmaking vs. get-it-done”).
- Friction in Rust is significant for speed; Go wins on pragmatism and productivity, especially with a small team and AI integration.
- "I like building cool open source software...but when you build a company, none of that matters…it is the product that you're building." (Armin, 07:18)
-
Scaling and Ecosystem Choices
- At “company scale,” stability and fit with existing ecosystems sometimes trump pure performance.
- Python and JavaScript/TypeScript are almost unavoidable in any company, often for integration roles.
3. AI Agents and the Future of Coding
-
Working with AI Interns
- Armin describes working at his current startup as “me, a co-founder, and an army of claudes and codexes.”
- AI coding agents dramatically boost productivity, especially for boilerplate, visualization tools, and even for non-technical co-founders.
- Quote (Armin, 27:22): "I get this tool in 30 minutes from Claude…it's around 5,000 lines of code and it looks better and has pretty UI and everything."
-
Shift in Coding Practices
- What previously took weeks (bespoke internal tools, migrations) can be drafted in minutes by AI.
- Over 80% of new code for Armin’s startup is now “agentic”—generated and iterated upon by AI tools. The “human-in-the-loop” remains essential for critical pieces.
- Coding is no longer sequential: multiple tasks can be kicked off in parallel.
-
Why the Sudden Positivity around AI?
- The “big shift” happened when AI tools started doing hated but necessary work (debugging AWS permission chains, repro cases).
- “Staying in control” while delegating more of the rote work was the key mental unlock.
- Quote (Armin, 30:21): “The biggest thing is that it actually now starts doing work that I hated doing, but I know I had to do.”
-
Impact on the Definition of Programming
- AI tools are making programming more accessible; people with domain problems can code solutions with minimal prior skill.
- Noted rise of “new programmers” prompted by AI assistants.
4. Programming Languages and AI: The Road Ahead
-
Languages Still Matter—Sometimes More
- AI-driven coding can expose the trade-offs of languages even more; Go, for example, yields better AI-generated code due to its simplicity.
- There's a hypothesis that a new generation of languages may emerge, optimized for human+agent co-development.
- Languages’ runtime trade-offs and reviewability will only grow in importance as agentic development rises.
- Quote (Armin, 38:42): “The quality of what the agent is going to do will matter…programming language will continue to matter a lot, particularly the trade-offs that the programming language implies on the runtime environment.”
-
Will Code Remain Human?
- Despite advances, humans will “stay in the loop” longer than we might expect, especially for reviewing, innovating, and system architecture.
5. Culture and Work: 996, Startups, and Burnout
-
Rise of High-Energy, High-Hours Startups (996)
- AI’s promise of labor-saving has paradoxically increased hours worked. Intensified “FOMO” (fear of missing out on innovation).
- Caution against glorifying 996 (9am-9pm, 6 days/week) culture; it’s unsustainable for most, and often not rewarded for non-founders.
- Quote (Armin, 43:49): “The computer that does your work, you cannot sleep because of this. That’s kind of so amusing.”
-
Founding vs. Early Employee Experience
- Early roles at startups are fluid—titles rarely match responsibilities.
- Founding a company after years as an early employee brought new perspective—Armin stressed preparation around company values and structure, not just product/tech.
6. Error Handling: Hard-Learned Lessons (Sentry Perspective)
-
The Reality of Errors
- Most languages/ecosystems don’t provide rich enough error contexts, especially outside debug builds.
- Python’s strong introspection enabled Sentry’s usefulness but contributed to its slowness.
- Language and runtime designers often under-prioritize error reporting due to performance concerns.
Quote (Armin, 48:02):
“Many of the ways in which errors are worked with just don't carry enough information…as a language designer or VM creator, you should put a lot more emphasis on making sure that errors can carry really useful information rather cheaply, even in production runs.”
-
Error Rates: The TypeScript/Strong Typing Myth
- Contrary to assumptions, the rise of TypeScript didn’t measurably decrease error rates in Sentry’s data. Increased app complexity often introduces new categories of errors.
- React's rise, for instance, introduced “hydration errors” that previously didn’t exist.
Quote (Host, 53:21): “We know and I think it’s pretty commonly assumed…that type safe languages will reduce certain...errors.” Armin (53:51): “No, if there was an impact, it's unmeasurable...the increased complexity [offsets] whatever improvement.”
-
Deliberate vs. Default Error Handling
- Quality error and observability code is always a deliberate act—rarely prioritized unless forced.
- Tools like context locals/async context are critical for observability, but performance trade-offs impede adoption.
Notable Quotes & Memorable Moments
| Timestamp | Speaker | Quote/Insight | |-----------|--------------|-------------------------------------------------------------------------------------------------------------------| | 02:30 | Armin | "If people didn’t put a lot of energy in to actually make that migration work, it could have been quite problematic for the language." | | 07:18 | Armin | "When you build a company, when you build a product, none of that matters...it is the product that you're building." | | 13:28 | Armin | "Good luck not having JavaScript in a company. And if you have JavaScript, you have TypeScript..." | | 27:22 | Armin | "I get this tool in 30 minutes from Claude…it's around 5,000 lines of code and it looks better and has pretty UI and everything." | | 30:21 | Armin | “The biggest thing is that it actually now starts doing work that I hated doing, but I know I had to do.” | | 38:42 | Armin | "Programming language will continue to matter a lot, particularly the trade-offs that the programming language implies on the runtime environment."| | 43:49 | Armin | "The computer that does your work, you cannot sleep because of this. That’s kind of so amusing." | | 48:02 | Armin | “Many of the ways in which errors are worked with just don't carry enough information...” | | 53:51 | Armin | “No, if there was an impact [of TypeScript], it's unmeasurable...increased complexity offsets whatever improvement.”| | 65:35 | Armin | “I have a lot more respect now, I think, for language designers just because ...there is no real right or wrong, there's just a lot of trade offs.” | | 71:46 | Armin | "Python...is incredibly pragmatic and I just like that." |
Key Segment Timestamps
- 00:00–02:30: Python’s ecosystem and its 2→3 migration
- 06:50–12:27: Comparing Python, Rust, Go for startups and open source; trade-offs; what languages are good for
- 13:28–17:23: Why Go for Armin’s new startup; inevitability of Python and JavaScript in company codebases
- 24:39–30:06: How AI agentic coding tools change workflows; using Claude and Codex for rapid prototyping and non-coders
- 30:21–35:09: What made Armin flip from skeptical to bullish on AI tools
- 38:03–41:39: Will AI reduce the importance of programming languages?
- 43:08–47:39: Culture, working hours, energy in AI startups, and the “996” phenomenon
- 48:02–60:56: Error handling lessons from Sentry; myths around TypeScript/strong typing reducing errors
- 65:35–73:32: Pragmatism in language and tool choice, startup advice, final reflections
Final Takeaways & Practical Advice
- Programming Language Choices: Should be pragmatic, based on team, ecosystem, and open to future changes as needs evolve.
- Agentic AI Coding: Dramatically shifts what’s possible and who can program, but the “human in the loop” remains critical for design, review, and innovation.
- Error Handling: Extremely under-prioritized in most languages/environments—investing in better error context and observability pays dividends.
- Startup Culture: Don’t blindly follow grind culture; intense work is best paired with boundaries and long-term sustainability.
- Be Prepared for Trade-offs: Every language and tool brings compromises. Language designers and engineers alike must recognize these, frequently re-evaluating as circumstances and technology shift.
For full details and further reading, check out the Pragmatic Engineer newsletter and show notes.
