Why Some Devs Still Write Games in C (And No, They’re Not Crazy)

3 min read





Jonathan Whiting explains his language choice, and honestly, it makes more sense than you’d think


Everyone’s using Unity or Unreal these days. Or at least that’s what the discourse would have you believe. So when I came across Jonathan Whiting’s post about writing games in plain C—not C++, not Rust, just C—I had to dig in.

Turns out he’s not being contrarian for the sake of it. There’s actual method to this madness.

Flash Died, and It Took His Games With It

Here’s the thing that kicked this all off: Whiting had a bunch of games written in Flash. You remember Flash? Then Adobe killed it, and suddenly those games were orphans. Porting them is a nightmare. Hours spent resurrecting old work instead of making new stuff.

That’ll make you rethink your tech choices real quick.

So Why C?

Not for any single reason. It’s more like a checklist, and C happens to check all the boxes:

It’s predictable. People call C “dangerous,” and sure, you can shoot yourself in the foot. But once you understand it, it doesn’t surprise you. No garbage collector deciding now’s a good time to pause. No framework update breaking your code because someone deprecated an API.

It runs everywhere. Name a platform. C has a compiler for it. More importantly, C will still have compilers in twenty years. Can’t say that about most things.

It compiles fast. This one’s underrated. When your build takes seconds instead of minutes, you stay in flow. Whiting mentions that even a 10-second wait is enough to send you to Twitter, and then—poof—five minutes gone.

It fits in your head. You can actually learn all of C. The whole language. Try doing that with modern C++. I’ll wait.

What About the Alternatives?

Whiting thought about this:

C++ has the performance, but have you seen the spec lately? It’s basically three languages in a trenchcoat at this point. Compilation is slower too.

C# and Java want everything to be an object. Sometimes your problem isn’t object-shaped, and then you’re fighting the language instead of solving the problem.

Go almost works. It’s like someone redesigned C with modern eyes. But the garbage collector still stops the world sometimes, and games really hate frame hitches.

JavaScript? Whiting wants predictability. JS is the opposite of predictable.

The Sharp Knife Thing

There’s a metaphor Whiting uses that stuck with me: C is a sharp knife. Yeah, you can cut yourself. But a skilled cook doesn’t want a knife that won’t cut—they want one that cuts exactly where they point it.

Modern languages try to protect you from yourself. Sometimes that’s great. Sometimes it just gets in the way.

But It’s Not 1972 Anymore

Worth mentioning: writing C today is nothing like writing C in the 70s. We have:

  • Static analyzers that catch bugs before you run anything
  • Tools like AddressSanitizer that catch memory issues
  • Actually good debuggers
  • Compiler warnings that turn mistakes into errors

It’s still C, but the tooling has caught up.

The Real Point

Whiting’s explicit that he’s not evangelizing. “I absolutely DO NOT mean to say ‘hey, you should use C too.'” Fair enough.

The actual lesson is simpler: pick tools that match your constraints, not tools that look good on a resume. For a solo dev making original games, the math is different than for a AAA studio with hundreds of engineers.

Sometimes the boring choice is the right choice.


Source: Jonathan Whiting – Why I Write Games in C

Share this article

Related Articles