November 24, 2025
Code or kink? Pick a side
Fifty Shades of OOP
From Java’s ‘B&D’ joke to live-coding dreams, coders clash
TLDR: The article argues OOP is a mix of ideas, not a single truth. Comments erupt with Java “B&D” jokes, Smalltalk nostalgia vs modern deployment reality, and warnings that frameworks make objects hollow—turning a technical overview into a culture war over what OOP even means.
“Fifty Shades of OOP” tries to calm the chaos by saying object‑oriented programming (OOP) is a mixed bag—classes, methods, and “this” all tangled together. But the community shows up with popcorn and opinions. Some say OOP is just a way to bundle data and actions, others argue it’s become a confusing umbrella with too many meanings. One commenter even reduces it to “data with identity,” and calls everything else add‑ons.
The funniest moment? A classic zinger about Java being designed for folks into “B&D” — yes, bondage and discipline — which instantly turned the thread into meme city. Meanwhile, Smalltalk nostalgics remind everyone that OOP’s magic was built for live, editable systems you could change while they ran. In today’s world of build‑and‑deploy pipelines, they say those “message passing” dreams don’t quite land. A grizzled Java veteran drops a bomb: the dreaded Anemic Domain Model, where objects become lifeless data and frameworks like Spring do all the thinking.
Others push back: classes vs prototypes (like in JavaScript), or skip both and use plain records—pick your poison. The article nods to method chaining and the messy “implicit this,” with shout‑outs to Python, Rust, and even C++ trying to fix it. Verdict: OOP isn’t one thing—it’s a fandom with factions and punchlines. Read the guide, stay for the drama.
Key Points
- •The author frames OOP as a collection of related ideas rather than a single, agreed definition, noting divergence between formal definitions and industry practice.
- •Classes are described as extending structs/records with methods, information hiding, and inheritance, and contrasted with prototype-based approaches (e.g., Self, JavaScript).
- •Method syntax is presented as a practical pattern for operations on a subject, aiding IDE autocompletion and enabling method chaining similar to functional pipe operators.
- •Many languages restrict methods to classes; exceptions include Rust, Scala, Kotlin, and C# (extension methods), offering more flexible method definition.
- •Implicit this/self provides concise syntax but can cause confusion, performance indirection, and limits on receiver typing; Python and Rust use explicit receivers, and C++ addressed issues in C++23.