How to Choose Python, Go, Rust, or TypeScript

TL;DR
Choose programming languages according to the work and the company stage: Python supports rapid iteration, Go fits web services, and Rust suits precise, performance-sensitive systems involving binary data. AI coding tools make ambitious internal software more practical, but language choice still matters because compile speed, type-system friction, code volume, and maintainability shape how quickly teams can build and change products.
Transcript
How do you think about Python ecosystem today? The Rust ecosystem and the Go ecosystem. The Python ecosystem is a lot of infrastructure, a lot of provisioning machines. Rust, I think if you work with binary data, if you build a load balancer, you build a database. Go in particular, I think it's just a good language for building web services and rea... Read More
Key Insights
- Python is well suited to startup iteration because its dynamic nature lets developers express many ideas without first resolving every type-level detail. That flexibility can reduce friction when a company is still changing its product rapidly and values experimentation more than carefully handcrafted infrastructure.
- Rust is particularly suitable for binary-data processing and systems such as load balancers or databases. Its precision and type system can support carefully engineered open source software, but slow compilation, greater code volume, and the effort required to express some designs can impede early-stage startup iteration.
- Go is described as a good language for building web services, with Ronacher characterizing that area as its particular strength. His comparison treats language selection as a workload decision, rather than presenting one language as the best choice for every product, service, or infrastructure component.
- The Python 2 to Python 3 migration was difficult because stricter Unicode goals collided with messy real-world environments, configuration problems, and enormous existing codebases. The initial expectation of a single clean migration proved unrealistic, and libraries ultimately needed to support both versions for many years.
- Simultaneous Python 2 and Python 3 library support was essential to the migration's eventual success. Proposals such as restoring the optional U prefix for Unicode strings helped developers write compatible code, despite early resistance from people who expected users and maintainers to switch immediately.
- Programming for open source infrastructure differs from programming for a startup product. Ronacher values precise APIs and handcrafted implementation when creating widely reused software, but argues that these qualities matter differently when a company must repeatedly rewrite and adjust code while discovering what customers need.
- AI coding tools can make highly customized internal systems practical for individual developers. Ronacher had Claude build a control system that collects logs and visualizes production activity, and he says he would not previously have attempted the project because he did not expect the development process to work.
- Static and dynamic languages have moved closer together through mechanisms that permit dynamic behavior inside otherwise statically compiled environments. Ronacher points to opt-in runtime typing as evidence that language categories are less rigid than before, even though their practical tradeoffs remain important.
Install to Summarize YouTube Videos and Get Transcripts
Explore YouTube Video Summarizer or Get YouTube Transcript Extractor
Questions & Answers
Q: How should startups choose between Python, Go, and Rust?
Startups should choose according to their workload and need for iteration. Python reduces friction when product ideas and implementations change quickly. Go is presented as a strong choice for web services. Rust fits binary processing and systems such as load balancers or databases, but its slow compilation, larger code requirements, and demanding type work can make rapid early-stage development harder.
Q: Why can Rust be a poor fit for an early-stage startup?
Rust can be a poor fit when a startup needs to change its product and code rapidly. Ronacher identifies extremely slow compilation, writing substantially more code than in Python, and spending significant time reasoning about types as major sources of friction. Those costs can be worthwhile for precise systems software, but they may slow experiments whose designs are still evolving.
Q: When is Rust a strong programming-language choice?
Rust is a strong choice for work involving binary data and performance-sensitive infrastructure. Ronacher specifically mentions building a load balancer or a database, and describes Rust as valuable for carefully crafted open source software. At Sentry, it offered a substantial improvement over the C++ alternative considered for binary file processing, while providing precision through its type system.
Q: What kinds of applications are a good fit for Go?
Go is presented as a good language for building web services. Ronacher describes web services as its particular area of strength, in contrast with Rust for binary-data systems and Python for infrastructure work or rapid product iteration. The broader lesson is to assess the application's dominant workload instead of choosing a language solely from general popularity or theoretical capabilities.
Q: Why was the Python 2 to Python 3 migration difficult?
The migration was difficult because Python 3 pursued stricter Unicode handling while existing software and operating environments contained far more complexity than the original design assumptions captured. Millions of lines of Python 2 code could not simply run on Python 3. Library maintainers also had to support both versions, turning an expected one-time conversion into a transition lasting 10 years or more.
Q: How did the Python community make the Python 3 migration work?
The community made the migration work through sustained effort, practical compatibility measures, and acceptance that Python 2 and Python 3 needed to coexist. Maintainers supported libraries on both versions for years. Ronacher also proposed restoring the optional U prefix for Unicode strings because it enabled shared code, despite resistance from advocates of an immediate, complete move to Python 3.
Q: How are AI coding agents changing what developers can build?
AI coding agents can reduce the effort required to create specialized tools that a developer would otherwise avoid. Ronacher used Claude to build his preferred control system for collecting logs and visualizing production activity. He says he would not previously have undertaken that project because he expected it would not work, illustrating how agents can expand the practical scope of individual development.
Q: Why does programming-language choice still matter with AI coding tools?
Programming-language choice still matters because generated code must compile, run, evolve, and fit the team's development pace. Rust's compilation time and type-system demands can introduce friction, while Python supports faster iteration and Go targets web services effectively. AI can make more projects feasible, but it does not remove the underlying tradeoffs in precision, code volume, expressiveness, or workload suitability.
Summary & Key Takeaways
-
Armin Ronacher compares programming languages through two different modes of software development. Carefully crafted open source infrastructure benefits from precision, stable APIs, and deliberate engineering. Startup product development instead rewards rapid iteration, making Python attractive and making Rust's slow compilation, additional code, and type-related friction potentially costly during early experimentation.
-
The Python 2 to Python 3 transition centered heavily on stricter Unicode handling, but real systems were more complicated than the original migration assumptions allowed. Millions of lines of Python 2 code could not immediately move, so libraries needed simultaneous compatibility for years. Sustained community effort and more realistic migration strategies eventually made the transition work.
-
AI coding tools changed Ronacher's expectations about what an individual developer can reasonably build. He used Claude to create a tailored production control system for collecting logs and visualizing operations, a project he previously would not have attempted. Agentic coding can expand ambition, while programming-language characteristics continue to affect iteration, reliability, and maintenance.
Read in Other Languages (beta)
Share This Summary 📚
Summarize YouTube Videos and Get Video Transcripts with 1-Click
Try YouTube Summary with ChatGPT & Claude or YouTube Transcript Generator
Explore More Summaries from The Pragmatic Engineer 📚
Summarize YouTube Videos and Get Video Transcripts with 1-Click
Try YouTube Summary with ChatGPT & Claude or YouTube Transcript Generator

