Choosing a programming language for a system
Why 'most popular' is the wrong question, and the criteria that actually decide which language suits which part of a system.
On the roadmap:Beginner · step 5: Containers 101
Lesson 22 of 23 · 8 min read · quiz · exercise
"What is the most popular language?" is a moving target
Rankings such as the Stack Overflow Developer Survey, the TIOBE index and GitHub's Octoverse change every year and measure different things (what people use, search for, or commit). They are useful to understand the job market and ecosystem health, but popularity does not tell you which language fits your system. JavaScript/TypeScript, Python, Java, C#, C++, Go and others consistently rank high, and each is strong at different jobs.
Criteria that actually decide
- Team skills and hiring: productivity today and ability to hire later.
- Ecosystem: libraries, frameworks, tooling, community support for your problem (web, data, mobile, embedded).
- Performance profile: raw speed, memory use, and latency predictability (garbage-collection pauses matter for some systems).
- Concurrency model: threads, async/await, goroutines, actors. Fit with your workload (many connections versus heavy computation).
- Safety and correctness: static types, memory safety, null handling, how many bugs the language prevents.
- Deployment and operations: single binary or runtime, startup time (serverless!), container size, observability support.
- Interoperability and maturity: how well it talks to existing systems; long-term support.
- Cost of change: how easy it is to refactor and onboard people.
Where each family typically fits
| Language | Typical strengths | Common uses |
|---|---|---|
| JavaScript / TypeScript | Runs in browsers; huge ecosystem; one language front to back; async I/O | Web front ends, APIs, tooling, serverless |
| Python | Readable; vast data, science and ML libraries | Data pipelines, ML, scripting, automation, back ends |
| Java / Kotlin | Mature, fast JIT, rich enterprise ecosystem, strong tooling | Large back ends, Android (Kotlin), big-data systems |
| C# | Productive, strong tooling, good performance | Enterprise software, games (Unity), Windows and cloud services |
| Go | Simple, fast to compile, excellent concurrency, single binaries | Network services, infrastructure, cloud tooling |
| Rust | Memory safety without a garbage collector, high performance | Performance-critical services, systems, browsers, embedded |
| C / C++ | Maximum control and speed | Databases, game engines, operating systems, trading systems |
| Swift / Kotlin | First-class mobile platforms | iOS and Android apps |
| PHP / Ruby | Fast web development, large frameworks | Websites, content systems, rapid prototyping |
| SQL | Declarative data queries | Anywhere there is a relational database or warehouse |
Figure SDA-CORE-22-1 · Where each family typically fits · © forcsguy.com
Polyglot systems
Real systems usually mix languages: a TypeScript web tier, Go or Java services, Python for data and ML, SQL for analytics, and a systems language for the hottest path. This is healthy if boundaries are clean APIs and you accept the costs: more build systems, more skills, more security patching. Do not add a language for novelty.
Practical advice
- Start with what the team knows, unless the problem clearly demands otherwise.
- Benchmark your own workload before choosing on speed claims.
- Prefer boring, well-supported technology for the core, and experiment at the edges.
- Check the hiring market and operational maturity (profilers, debuggers, libraries) for the long term.
- Remember that architecture, data and algorithms usually affect performance far more than the language does.
Real-world reading
Related reading
- Performance Impact of Removing Out of Band Garbage Collector (OOBGC) at GithubGithub engineers · GithubCase Studies
- Performance Optimization by Tuning Garbage CollectionAtlassian engineers · AtlassianCase Studies
- Garbage Collection in Java Applications at LinkedInLinkedIn engineers · LinkedInCase Studies
- Fixing Linux filesystem performance regressions at LinkedInLinkedIn engineers · LinkedInCase Studies
Show 6 moreShow fewer
- Solr: Improving Performance for Batch Indexing at BoxBox engineers · BoxCase Studies
- Performance Optimization on OS, Storage, Database, NetworkStackify engineers · StackifyCase Studies
- Couchbase Ecosystem at LinkedInLinkedIn engineers · LinkedInCase Studies
- Amazon Redshift and the art of performance optimization in the cloudAllthingsdistributed engineers · AllthingsdistributedCase Studies
- Stack Overflow Architecture - High Scalability -High Scalability engineers · High ScalabilityCase Studies
- Systems Performance (2nd edition)Brendan Gregg · PearsonBooks
Check your understanding
Question 1 of 3
0 correct so far
Which factor usually matters most when choosing a language for a team's main product?
Go deeper
- Stack Overflow Developer Survey, TIOBE index, GitHub Octoverse by Stack Overflow, TIOBE, GitHub: search for the latest editions: three public views of language popularity, each measured differently
Practise it: One server is not enough
Everything below is already set up for this lesson: change the design, run the traffic, and see whether you meet the goal.
- 1The task
- 2Build and test
Your URL shortener went live on a single server that runs the app and the database. A newsletter just linked to it and traffic jumped to 900 requests per second.
Goal: Serve the traffic with under 1% errors and a 95th percentile under 300 ms.
One app server handles about 400 requests per second. Adding servers only helps if something spreads requests across them.
Try it yourself
A startup is building a web app with a small team that knows JavaScript, plus a nightly recommendation job and a real-time bidding component that must respond in under 5 ms. Suggest a language for each part and explain the trade-offs.
Click what a strong design here would need:
More in Building blocks
© 2026 forcsguy.com. Original lesson text and diagrams. Books and sites linked above belong to their authors.