Lakshya

Software Engineering · Chapter 21 of 31

Which language, and what the interview actually tests in each

What 659 job descriptions actually name, why the usual percentages are wrong, and the trap each language sets in an interview.

8 min read1 diagramAll 31 chapters

Two thirds of the arguments about programming languages are really arguments about which industry someone works in. The corpus settles the frequency question; the more useful half of this chapter is what each language's interview actually tests, because that differs far more than the syntax does.

659 SOFTWARE ENGINEERING JOB DESCRIPTIONS, FULL BODY TEXT Python38.7%Go36.0%Java32.6%TypeScript22.0%C++18.5%Rust15.8%JavaScript14.1%SQL14.1%C9.1%Kotlin4.1%Ruby3.5%C#3.0%PHP2.3%Swift1.5%Scala1.2%Perl0.0%R0.0% THE SHORT NAMES CANNOT BE COUNTED NAIVELY — AND EVERY GUIDE QUOTING THEM HAS THIS BUG Gonaive 52.5% → in a language list 36.0%Cnaive 19.0% → in a language list 9.1%Rnaive 12.0% → in a language list 0.0% Every single “R” match was noise — a bullet marker, an initial, a unit. R is not a software engineering language and the corpus says so onceyou measure properly.
The measurement caveat is the finding. A naive keyword count puts Go at 52.5% and R at 12%. Requiring the name to appear near another language — i.e. in a skills list — puts Go at 36% and R at zero.

Why the short names break, and why it matters

“Go”, “C” and “R” are ordinary English. “go live”, “go to market”, a bullet labelled (c), an initial, a unit. A regular expression for \bGo\b matches all of them.

The correction is cheap: require the token to appear within about forty characters of another named language, which is what a skills list looks like. Go falls from 52.5% to 36.0%, C from 19% to 9.1%, and R falls to zero — every single match in 659 documents was noise.

Note what the undercount would have been too: searching only for “golang” gives 8.5%, which is just as wrong in the other direction. Most postings write “Go”.

This is the general lesson, not a language one: any percentage taken from job-posting text needs a check that the token means what you think it means. Guides that publish a “Go is in half of all postings” figure have not run that check.

How many languages a posting actually names

Languages namedPostingsShare
None at all11016.7% — the job is described by domain, not by stack
Exactly one22133.5%
Two18528.1%
Three or more14321.7%
Six or more50.8% — the “must know everything” posting is rarer than its reputation

Half the market names one language or none. That is the argument against collecting languages: the modal posting wants depth in one, and the second most common thing it wants is for you not to care. The 22% naming three or more are mostly platform, infrastructure and data roles where the languages do different jobs — Go for the service, Python for the tooling, SQL for the data — rather than employers wanting a polyglot.

What each one is actually hired for

LanguageThe segment that hires itWhat it is competing against
Python 38.7%Data, ML, platform tooling, automation, backend at startups. The default second language everywhereNothing, in its niches. It is the lingua franca and the interview rarely tests the language itself
Go 36.0%Infrastructure, networking, cloud-native services, anything CNCF-adjacent. Kubernetes is written in it, and that pulled an entire ecosystemRust for systems, Java for enterprise backend
Java 32.6%Enterprise backend, banking and BFSI, large-scale services, Android. Enormous installed base and a very long tail of maintenance workKotlin on the JVM (Java Virtual Machine), Go for new services
TypeScript 22.0%Frontend, full-stack, increasingly backend at product companies. Note it outranks JavaScript 22% to 14% — the untyped job is the smaller market nowJavaScript, which it has largely replaced in hiring language
C++ 18.5%Trading and low latency, games, embedded, browsers, databases, anything where a garbage collector is unacceptableRust, increasingly, and losing ground for new work
Rust 15.8%Systems, infrastructure internals, security-sensitive components, some blockchain. Higher than JavaScript in this corpusC++ for new systems work
C# 3.0%Microsoft-shop enterprise, Unity games. Under-represented here because this corpus skews to product companies and startupsJava, in practice

The number people misread is TypeScript against JavaScript.

22.0% versus 14.1%. Postings that say “JavaScript” without TypeScript are now the minority of the front-end market in this corpus — which means an untyped JavaScript portfolio reads as dated even to teams whose codebase is still untyped, because they are hiring for where they intend to be.

And Rust above JavaScript is a sampling artefact worth naming honestly: this corpus over-represents infrastructure and platform employers. It is evidence that Rust hiring is real, not that Rust is more in demand than JavaScript across the whole market.

What the interview actually tests, by language

This is the part that transfers. The coding round is nominally about algorithms, but the follow-up questions are language-specific and they are where people lose.

LanguageWhat the follow-ups actually probeThe common failure
PythonWhether you know where the abstraction leaks — the GIL and what it does and does not prevent, mutable default arguments, generators versus lists on memory, when NumPy is doing the work and when your loop isWriting Python that is correct and quadratic. Interviewers ask about the data volume for exactly this reason
GoConcurrency correctness, not concurrency syntax. Goroutine lifetime and leaks, context cancellation, channel closing rules, when a mutex beats a channel, and why the race detector existsSpawning goroutines with no path for them to stop. It is the single most common Go interview failure
JavaThe memory model and the collections you chose. Garbage-collection pauses and which collector, equals/hashCode contracts, why HashMap is not thread-safe, and streams versus loops on readability and costReciting design patterns. The JVM questions are the ones that separate candidates
TypeScriptWhether you use the type system or fight it. any as an escape hatch, structural typing, narrowing, and that types are erased at runtime — so validation at the boundary is still your jobBelieving a type annotation validates external data. It does not, and this becomes a security question
C++Ownership and lifetime. RAII, move semantics, where a copy happens that you did not intend, undefined behaviour, and which of the smart pointers costs whatManual new/delete in 2026, and not being able to say what UB means for the optimiser
RustWhether you can model the problem so the borrow checker agrees, rather than fighting it. Ownership, lifetimes, when Rc<RefCell<T>> is right and when it is a design smell, and what unsafe actually promisesReaching for clone everywhere, or for unsafe, to escape a design problem

Does the choice matter for your career?

Less than the arguments suggest, and not in the direction people assume. The language rarely decides whether you get hired; it decides which industries call you. Go and Rust route you toward infrastructure. Java routes you toward enterprise and BFSI, which in India is the largest employer segment by a wide margin. C++ routes you toward trading and embedded. Python routes you everywhere and therefore differentiates you nowhere.

The move that actually pays is depth in one plus fluency in a second that covers a different layer — a compiled service language and a scripting language, or a backend language and SQL. That is what the two-language postings, 28% of the corpus, are describing. Collecting a sixth language is not on the evidence a thing employers ask for: 0.8% of postings name six or more.

And 16.7% name no language at all. Those postings describe a domain, a scale or a system, and they are disproportionately the senior ones — which is the clearest signal in this data about what stops being interesting as you get more senior.

Check yourself

What share of SWE postings name no language at all?16.7% — and they skew senior. They describe a domain or a system instead. Half the corpus names one language or none.
Why is a naive 'Go' count wrong?'Go', 'C' and 'R' are ordinary English — 'go live', a bullet marked (c), an initial. Requiring the token near another language name drops Go from 52.5% to 36%, C from 19% to 9%, and R to zero.
Which is named more, TypeScript or JavaScript?TypeScript, 22.0% to 14.1%. An untyped JavaScript portfolio reads as dated even to teams whose codebase is still untyped.
What does a Go interview actually test?Goroutine lifetime and leaks, context cancellation, channel closing, when a mutex beats a channel. Spawning goroutines with no way to stop them is the classic failure.
What does a TypeScript interview probe?Whether you use the type system or fight it — and whether you know types are erased at runtime, so boundary validation is still your job.
Does collecting languages help?Not on this evidence. 0.8% of postings name six or more. Depth in one plus a second covering a different layer is what 28% of postings describe.
← Choosing a database, and the licence histories behind itGetting a password out of a vault, in code →