Skip to content
DevMeme
6382 of 7435
When a Functional Programmer Explains Object-Oriented Programming
FunctionalProgramming Post #6996, on Aug 6, 2025 in TG

When a Functional Programmer Explains Object-Oriented Programming

Why is this FunctionalProgramming meme funny?

Level 1: Different Names, Same Thing

Imagine you have two groups of friends who speak different lingo. One group calls a certain snack “popcorn,” and another group from far away calls the exact same snack “puffed maize.” When they talk to each other, it’s funny because they’re referring to the same thing but with totally different words and attitudes. That’s what’s happening in this meme. In the movie scene it references, two characters joke about how a burger has one name in America and a funny different name in Europe – even though it’s just a burger with cheese! Similarly, in programming, we have two worlds: one loves objects (imagine objects like little machines or toys in your program that hold some data), and the other loves functions (like math problems that you solve, giving you an answer with no extra fuss). In that second world – the functional programming world – if you bring up an object (those little machines that can change their settings), they’ll react like, “Oh, those? We consider those just messy by-products, not the real thing we focus on.” They use the term “side effect” kind of like saying “making a mess.” It’s as if one friend said, “You know what they call your fancy toy in my super tidy house? A mess.” It’s a playful insult: one side’s prized possession is the other side’s trash!

So the meme is funny in a playful way because it’s showing this clash of perspectives. It’s like one kid proudly shows off a toy (object-oriented thinking), and another kid from a very strict household wrinkles their nose and says, “Ha, in my house we call that a mistake.” 😄 The big text “SIDE EFFECTS” is the punchline – it’s the second kid basically shouting their funny, exaggerated opinion. Even if you don’t know the technical details, you can sense the teasing tone. One world’s normal everyday thing has a totally different (and negative) name in the other world. Just like how calling a Quarter Pounder a “Royale with cheese” sounds amusingly fancy, calling objects “side effects” sounds humorously dismissive. In simple terms: different teams, different rules. One team thinks anything that isn’t a pure step-by-step calculation is an unwanted extra – a side effect. The other team is all about those objects and would probably roll their eyes at this joke. But for those in on it, it’s a fun way to poke at the endless debate of how to write code – with lots of little objects doing things, or with clean functions that avoid making a mess. In the end, it’s just good-natured nerd humor about calling the same burger two different names. 🍔💻

Level 2: Pure Functions Only

Let’s break down the terms and concepts for those newer to the OOP vs FP showdown. In object-oriented programming, an “object” usually means a bundle of related data and functions (methods) that operate on that data. For example, you might have an object car with data like color and speed and methods like accelerate() that changes the speed. The key idea in OOP is that objects maintain state (like the car’s current speed) internally, and that state can change over time when methods are called. When an object’s method updates some data inside the object, that’s a state change.

Now, in functional programming, the ideal is to avoid state changes altogether. Instead of objects with mutable state, FP works with pure functions and immutable data. A pure function is like a math function: given the same input, it always returns the same output and does not cause any side effects. Here, “side effect” means any observable change in the system apart from the function’s return value. This could be modifying a variable, printing to the screen, writing to a disk, or altering an object’s property – basically anything that makes a difference outside the function’s own scope. FP enthusiasts often use terms like immutable state (once a value is set, it never changes; if you need a new value, you create a new copy rather than update the original). They like this because it’s easier to predict what the code will do: you don’t have to worry that calling function f() secretly changed some globalVariable or tweaked your car object’s speed behind your back.

So why would a functional programmer jokingly call objects “side effects”? It’s a bit of tongue-in-cheek exaggeration. In the pure FP mindset (think Haskell, Elm, or functional subsets of Python/JavaScript), ideally everything is just inputs and outputs. You call a function, you get a return value, and nothing else in the world changes. If you want to do something like update a “state,” you’d actually return a new state rather than modify an existing one. By contrast, an object in OOP often does hide some internal state and can change it when you call its methods. To a strict functional programmer, that’s like sneaking around the rules. They’d say: “Your object’s method changed something beyond just returning a value – that’s a side effect!” In other words, in the “pure_functions_only” school of thought, an object’s very existence (with its own state that can change) is an impurity. It can make the program’s behavior depend on things other than function inputs and outputs, breaking the FP ideal. That’s why the meme’s answer is in bold SIDE EFFECTS – it implies ugh, objects… those are just unwanted side effects in our pristine functional world. It’s a playful way to push FP’s philosophy to an extreme for comedic effect.

Let’s illustrate the difference with a simple example in code:

// A pure function (no side effects):
function double(x) {
  return x * 2;  // It always returns double the input and nothing else happens.
}

let count = 0;    // a variable outside any function

// An impure function (has a side effect on external state):
function increment() {
  count += 1;     // This line changes the outside variable 'count' – that's a side effect!
  return count;
}

In the snippet above, double(5) will always give 10 and it won’t change anything else in the program. It doesn’t rely on or modify any external state – it’s self-contained. That’s a pure function. On the other hand, increment() looks simple, but it reaches out and modifies the count variable defined outside it. Calling increment() once, twice, three times will return different values and also change the count each time. That modification of a broader state (count) is a side effect. In a pure functional approach, we’d avoid writing increment() that way. Instead, we might have a function that takes in the current count and returns a new count, without touching any external variable.

The meme’s text references a scene from the movie Pulp Fiction. Imagine two characters chatting: “You know what they call a Quarter Pounder with Cheese in Paris?”“They call it a Royale with cheese.” It’s a fun way to highlight that different contexts use different terms for the same thing. Here, the context isn’t countries, but programming paradigms. In the land of functional programming, if you mention an OOP-style “object”, they act like they’ve never heard of a Quarter Pounder: “Object? What’s that? We only have side effects (and we try to avoid even those!).” Of course, this is a bit of an exaggeration – practical FP code still needs to deal with real-world interactions (you can’t write a useful program without any side effects, because at some point you need to affect the world, like displaying output or reading input). But FP folks structure their code so that the side effect parts are minimized and kept separate from the pure parts.

FunctionalProgrammingConcepts like immutability and pure functions are all about reliability and clarity: if nothing outside a function changes, you can understand the code much more easily. SideEffectsInProgramming are often the source of bugs (“Oops, calling this function also reset that global config, who knew?!”). By joking that objects are side effects, the meme is highlighting how LanguageComparison sometimes feels like cultural translation. One group’s basic unit of structure (objects for OOP) is, in another group’s view, an artifact to avoid (side effects for FP). It’s a classic LanguageWars ribbing – no one’s actually angry here, it’s more of a playful prodding. After all, many of us write code that mixes both paradigms. For example, in JavaScript or Python (which aren’t purely one paradigm), you might have objects but still try to write some functions purely for the parts that need clarity. The meme just takes the purist stance for the sake of the joke.

So if you’re a newer developer, don’t worry: an “object” isn’t literally a bad thing. 😉 This is humor born from experienced devs teasing each other’s preferred styles. DeveloperHumor often comes from these inside jokes. The key takeaway is understanding what a side effect means in programming and why functional programmers make such a big deal of avoiding them. Once you get that, the meme is basically saying: “In our pure function paradise, we don’t do objects – those are dirty side effects!” And that dramatic stance is what gives the joke its kick.

Level 3: Paradigm Fiction

For seasoned developers, this meme hits on a classic culture clash in programming: OOP vs FP, the eternal “paradigm war.” The image references Pulp Fiction’s famous “Royale with Cheese” scene – John Travolta’s character explains that in Europe, they don’t call it a Quarter Pounder (because of the metric system); “they got the metric system, they wouldn’t know what the heck a Quarter Pounder is.” Instead, “they call it a Royale with cheese.” Here, Samuel L. Jackson’s character (Jules) would nod knowingly. The meme mirrors that setup: “You know what they call objects in functional programming?” – setting us up for some cross-cultural terminology – and then delivers the punch: “SIDE EFFECTS.” It’s the same comedic formula: take something ordinary in one locale (objects in OOP), and reveal its exotic name in another locale (side effects in FP). For those of us who’ve been around the industry, it’s a witty callback not just to Tarantino’s dialogue, but to countless heated discussions about programming styles.

Why is this funny to an experienced dev? Because it’s snarky truth. In the world of FP enthusiasts, side effects are frowned upon. They advocate writing code where functions don’t depend on or alter hidden state. Meanwhile, object-oriented programming practically revolves around objects maintaining internal state and exposing methods to manipulate that state. So an FP guru might jokingly say, “Hah, an object? We call that a side effect around here.” It’s a jab implying OOP is just a bunch of sneaky state mutations in disguise. Seasoned engineers recognize this as a playful exaggeration of real debates – the kind you see in endless blog posts, conference talks, and yes, flame wars on programming forums (the classic LanguageWars). It distills the tension: one person’s core feature is another person’s unfortunate side effect.

Historically, this paradigm skirmish goes back decades. In the late 1980s and 1990s, object-oriented programming (thanks to languages like C++, Java, Python) was sold as the silver bullet for managing complexity – “everything is an object!” was the rallying cry. Meanwhile, the more academic functional programming camp (with languages like Lisp, ML, and later Haskell) quietly espoused purity and elegance – “no state, just functions!” was their mantra. For a long time, OOP dominated industry practice, and FP was seen as niche or overly theoretical. Fast forward to the 2010s and beyond, and FP concepts made a big comeback (partly because managing concurrency and state in huge systems turned out to be really hard – surprise, side effects can bite!). Suddenly, immutable data and pure functions became hot topics even in mainstream circles. Seasoned devs who lived through this shift can’t help but smirk at the meme: it succinctly captures that reversal of perspective. It’s like Jules and Vincent discussing metric vs imperial, except here it’s two senior devs bantering: “You know what they call our beloved objects in the land of Haskell and Lisp?…”

The inside joke layer here is rich. If you know Pulp Fiction, you hear Travolta’s voice in your head reading that top caption. If you know programming paradigms, you recognize the dig at OOP. It’s essentially mixing pop culture with tech culture – a classic formula in DeveloperHumor. The meme text even uses the same font style and positioning as a typical subtitles meme, mimicking the movie scene’s energy. Jules (Samuel L. Jackson) is presumably the one dropping the verdict “SIDE EFFECTS” – in the film he delivered the punchline “Royale with cheese” with amused authority. Imagining him pronouncing judgment on objects, as if objects were as out-of-place in FP-land as imperial measurements in Europe, is hilariously apt to a senior dev. There’s a bit of senior_dev_sarcasm here too: experienced programmers often develop a tongue-in-cheek cynicism about “the One True Way™” in programming. Today’s best practice (OOP everything!) can become tomorrow’s bad practice (ugh, OOP means mutability). We’ve seen fads come and go, so calling objects “side effects” is an exaggerated smackdown that we find funny precisely because we know real life is more nuanced. It’s the absurd reduction of a complex debate into a single zinger – that’s the joke.

On a practical level, we also relate to the underlying truth: side effects in programming can cause headaches. Any senior engineer who’s chased a nasty bug at 3 AM knows that unintended state changes (an object being modified in one corner of the code causing chaos in another) are like the surprise “gotchas.” FP’s discipline of isolating or eliminating side effects does lead to code that’s easier to test and maintain, at least in many cases. So there’s genuine wisdom beneath the humor. But of course, real-world code usually ends up a mix – even hardcore FP folks acknowledge you need some side effects eventually (your program has to do something: read input, write output, change something in the world). Meanwhile, OOP folks have adopted more FP habits over time (immutable classes, pure functions within methods, etc.). In fact, many modern languages and frameworks encourage blending paradigms. A seasoned dev sees the meme and laughs, knowing full well that in practice you often need a balanced diet of paradigms. But hey, it’s more fun if we pretend there’s a pure FP world out there where an object is as taboo as saying “Quarter Pounder” at a Paris McDonald’s. 🍟

Level 4: Monads with Cheese

At the most theoretical end of this joke, we’re essentially comparing two very different models of computation. Functional programming (FP) is grounded in mathematical purity – think of Alonzo Church’s λ-calculus where computation is just function application with no side effects. In a purely functional world, everything is an expression to be evaluated, and if something isn’t part of that expression’s result, it doesn’t exist. An Object, by contrast, is a construct from object-oriented programming (OOP) that packages state and behavior together. From a hardcore FP perspective, an object is an impurity – it encapsulates mutable state that can change over time, which you cannot easily reason about with simple equations. In the realm of FP theory, modifying state or an object is an extraneous action, akin to a by-product of computation. We have a formal term for those by-products: side effects.

Why the bold punchline "SIDE EFFECTS"? In FP semantics, a side effect is any interaction with the outside world or hidden state during computation. This includes updating a variable, altering an object’s field, printing to a console, or writing to a file – basically anything beyond returning a value. FP purists strive for referential transparency: a function call can be replaced by its result without changing the program’s behavior (meaning f(x) is as good as the value it returns, with no sneaky state changes). Objects with internal state spectacularly violate this principle – calling a method on an object might change its internals or global state, so you can’t just swap the call with a precomputed result. In the mathematical model, that’s heresy! It’s as if in the church of FP, mutating an object is a sinful act that must be banished or isolated.

How to isolate sins of state? Enter the monad. In advanced FP (Haskell being a famous example), a monad is a design that allows side effects to be threaded through computations in a controlled way. Instead of letting you poke at an object’s field willy-nilly, a monadic structure (like Haskell’s IO or State monad) will carry that state change explicitly through function calls. It’s a bit like saying: “Alright, you can have your object or state change, but you have to wrap it in this special box and pass the box around.” This is why seasoned Haskell devs chuckle at the meme – in their world, an object with mutable fields would indeed be an awkward thing that you’d handle as an effect, not a fundamental building block. To paraphrase a classic FP in-joke, “a monad is just a monoid in the category of endofunctors, what’s the problem?” 😉 In other words, FP has a whole abstract algebraic way to deal with effects, treating them as second-class citizens that need extra machinery. So calling objects “side effects” isn’t just a casual burn – it reflects the deep theoretical stance that stateful objects lie outside the pure core of computation.

This high-level view harkens back to foundational debates in computer science. Church’s λ-calculus (pure functions) vs. Turing’s stateful machine tape is an ancient duel. Both are equally powerful in theory (thanks to Church-Turing thesis), but they shape how we think about programs. Functional programming’s lineage says functions and immutable data are the way to enlightenment, whereas OOP’s lineage (think Alan Kay and the folks who invented Smalltalk) says objects modelling real-world entities are the path. The meme cheekily implies that, to the FP faithful, OOP’s treasured “object” is nothing more than a messy implementation detail – a byproduct you’d eliminate if you were truly enlightened. It’s a hyperbolic way to echo the FP mantra: “No mutable objects, no problems.” Or in Tarantino terms, a world without Quarter Pounders, only Royales.

Description

This meme uses a well-known still from the movie 'Pulp Fiction,' featuring characters Vincent Vega (John Travolta) and Jules Winnfield (Samuel L. Jackson) driving in a car. Vincent is in the foreground, smiling slyly, while Jules is in the passenger seat. White, all-caps text is overlaid on the image. The top text poses a question: 'YOU KNOW WHAT THEY CALL OBJECTS IN FUNCTIONAL PROGRAMMING?'. The punchline at the bottom of the image is 'SIDE EFFECTS'. The humor is rooted in the fundamental differences between programming paradigms. In functional programming (FP), the ideal is to use 'pure functions' which avoid changing state or having observable interactions with the outside world, collectively known as side effects. Object-Oriented Programming (OOP), in contrast, is built upon objects that encapsulate both state and behavior. From a purist FP perspective, the mutation of an object's state is a classic example of a side effect, making the meme a clever jab at how FP devotees view the core construct of OOP

Comments

10
Anonymous ★ Top Pick The main difference is that in OOP, you encapsulate state in objects to control side effects, whereas in FP, you encapsulate side effects in monads to control your sanity
  1. Anonymous ★ Top Pick

    The main difference is that in OOP, you encapsulate state in objects to control side effects, whereas in FP, you encapsulate side effects in monads to control your sanity

  2. Anonymous

    If your junior insists objects belong in your Haskell module, just remind them that’s what the IO monad is already apologising for

  3. Anonymous

    After 15 years of explaining to junior devs why their singleton pattern is actually a monad in disguise, you realize the real side effect was the friends we mutated along the way

  4. Anonymous

    In functional programming, we don't have objects - we have 'unfortunate necessities' that violate referential transparency. It's like showing up to a Haskell conference with a mutable variable: technically possible, but everyone knows you're breaking the social contract. The real joke? After 20 years of OOP, senior engineers finally understand why Lisp developers were smirking at us the whole time

  5. Anonymous

    In FP they’re “side effects”; in the boardroom they’re “metrics” - congrats, your pure function now returns IO[Unit]

  6. Anonymous

    In FP, an “object” is just state you forgot to quarantine - IO[SideEffect] is the witness protection program

  7. Anonymous

    FP purists calling OOP objects 'side effects' - like blaming divine intervention for every impure monad in prod

  8. @coodi 11mo

    You know how they call the procedural programming? - Functional programming

  9. @deadgnom32 11mo

    you know how they call higher order functions in OOP? design patterns

  10. @Azure_Developer 11mo

    Royal with cheese

Use J and K for navigation