February 9, 2026
Type Wars: Safety vs Spicy Bugs
Clean Coder: The Dark Path (2017)
Swift vs Kotlin: Are safety rules saving us or suffocating us
TLDR: An influential coder warns that Swift and Kotlin’s strict safety features go too far. The comments clap back with elevator memes and pro-safety chants, while a few caution against rule overload; others note you can still bypass checks. It’s a snapshot of how coding languages balance safety and freedom.
Legendary “Clean Coder” Robert “Uncle Bob” Martin lit a match and tossed it into the comments section, arguing that Swift and Kotlin have gone too far with strict, computer-enforced safety rules (aka “static typing”). He asks: should the language babysit risk, or should the programmer? The crowd didn’t whisper—they roared.
One camp mocked the idea of trusting developers over guardrails. andrewjf torched the thesis as asking the same people who wrote the bugs to write even more buggy tests. kace91 rolled in with a viral elevator analogy: automatic doors exist for a reason. Meanwhile, ulrikrasmussen called foul on straw-men, noting Kotlin lets you slap “!!” to bypass checks and risk those infamous “empty value” crashes. raincole chimed in that a little academic thinking helps you see many errors are really the same category.
On the other side, meindnoch dropped a spicy “Uncle Bob is a bad programmer” grenade but nodded at a real fear: languages piling up rules until they read like law books. The memes flowed: “compile-time nanny vs cowboy coder,” “try! try? try again,” and jokes about escorting errors up the call stack. In short, Type Wars exploded—safety belts versus freedom to speed.
Key Points
- •Swift and Kotlin are described as adopting functional features (e.g., lambdas) while intensifying static typing.
- •The article contrasts Java’s relatively flexible static typing with Swift and Kotlin’s stricter enforcement.
- •Swift requires explicit error handling or propagation (do-try/try!/try?) for functions that throw, preventing silent exception propagation.
- •Kotlin makes classes and methods final by default, requiring explicit open and override keywords for inheritance and overriding.
- •Both languages incorporate nullable types, making nullability part of a variable’s type (e.g., a non-nullable String cannot be null).