IQ bell curve meme on code comments vs self-explanatory code principles
Why is this CodeQuality meme funny?
Level 1: Show, Don’t Tell
Imagine you’re telling a joke to your friends. If the joke is really good and clear, everyone laughs immediately. You don’t have to say anything else – they just “get it.” But if the joke isn’t told well and nobody understands it, you might have to stop and explain why it was supposed to be funny. By the time you’re explaining the punchline, the joke isn’t fun anymore, right? Writing code is similar. A well-written story doesn’t need footnotes to explain the plot, and good code doesn’t need a lot of extra notes to explain what it’s doing. The meme is showing three people with different ideas: one doesn’t explain anything (maybe because he didn’t even try to make sense), one explains everything in a panic, and one doesn’t need to explain much because what he said was already clear. It’s funny because the simplest person and the wisest person both don’t use many explanations – one out of laziness and one out of skill – while the guy in the middle is freaking out. In everyday terms: it’s best when you make your message so clear that you don’t have to keep explaining it over and over. Just like a good joke, good code should mostly speak for itself.
Level 2: Comments vs Clarity
Let’s break down the joke for a less experienced developer. First, code comments are the notes a programmer leaves in the source code to explain or clarify what the code is doing. These notes are usually marked by special symbols so the computer ignores them (for example, in Python a # starts a comment, in Java/C++ it’s //, and for multiple lines you might see /* ... */). Comments are meant for other humans reading the code (or your future self) to understand tricky parts or the intent behind the code. They do not affect how the program runs.
Now, what do we mean by code that is “self-explanatory” or self_documenting_code? That’s a key idea from CleanCodePrinciples: it means writing your code in a way that its purpose is clear just by reading it, without needing a lot of extra explanation. Think of using descriptive names for variables and functions, and organizing the code logically. If your code is self-explanatory, someone else (or you in 6 months) can read it and quickly grasp what it’s doing or supposed to do, almost like reading well-written sentences.
For example, imagine we need to double a number and print it. A beginner might write code with comments for each step, like this:
# Example A: Code with trivial comments
x = 10 # assign 10 to x
y = x * 2 # multiply x by 2 and store in y
print(y) # print the result
Here, the comments (assign 10 to x, multiply x by 2...) are telling us exactly what the code on that line does. But notice: the code itself is pretty straightforward. Any programmer can see x = 10 and know it assigns 10 to x. Writing “assign 10 to x” as a comment doesn’t really add any new insight – it’s redundant. These are what we’d call unnecessary comments: they just restate the obvious. Over time, having a lot of comments like this can actually make code harder to read, because you’re wading through a bunch of noise that isn’t helping you understand the intent. Plus, if you change x = 10 to x = 12 later, but forget to update the comment, the comment becomes misleading. This is a maintainability problem.
Now compare with a more self-explanatory approach:
# Example B: Self-explanatory code without redundant comments
initial_value = 10
doubled_value = initial_value * 2
print(doubled_value)
In this version, we chose clear variable names like initial_value and doubled_value. The code almost reads like English: “initial value is 10, doubled value is initial value times 2, print doubled value.” We didn’t need any comments to understand that, because the code names communicate the intent. This is what people mean by CodeReadability or clarity.
So, the meme’s rightmost character saying “code should be self explanatory” is encouraging this style: use meaningful names and simple structures so that anyone reading the code can follow along without needing an explanation at every step. Meanwhile, the middle character yelling “you HAVE to use comment to explain your code” represents a more beginner or rigid view that every part of the code needs a written explanation (perhaps because the code itself might be written in a confusing way or because that person was taught to always heavily comment).
The leftmost character saying “comments are useless lol” is like a newbie who doesn’t document anything at all. Maybe they write sloppy code and just don’t care, or they think others should figure it out themselves. That approach can be trouble, because if their code is not as clear as they think, anyone else reading it will struggle. It’s like giving someone a puzzle with no hints – sometimes the puzzle is straightforward, but other times it’s just frustrating.
In real development, there’s a balance. Teams often establish CodingStandards about commenting. For instance, a common guideline is: “Don’t write a comment to explain what the code does if you can make the code itself clearer. But do write a comment to explain why the code does something non-obvious.” Good comments provide context or reasoning, not a transcript of the code. A comment like // Using formula from tax law 2021 to calculate tax is helpful, because it gives the reader a clue they wouldn’t get from code alone. On the other hand, a comment like // loop through list on a for loop is not adding value – any programmer knows a for loop goes through a list.
This meme is basically a joke about how developers approach writing comments:
- The “no comments at all” stance (left side) can lead to confusion if the code isn’t crystal clear.
- The “comment everything” stance (middle) can lead to clutter and sometimes useless or outdated info.
- The “minimal comments with self-explanatory code” stance (right side) tends to be what experienced developers aim for: write code so clean that few comments are needed, and use comments only when they truly help understanding.
As a newcomer, you might recall professors or online tutorials in early coding days telling you to write comments for practice – that’s the middle guy’s mentality. Over time, you’ll likely encounter the idea that better naming and structure can replace many comments, which is what that hooded character represents. And you might also meet folks who swing too far and do zero documentation (sometimes found in open-source projects or legacy codebases), which is like the left character. The humor and truth in this meme come from seeing all three viewpoints and recognizing that the sweet spot is to write code that’s clear and only add comments when they genuinely add understanding. It’s a commentary on DeveloperExperience too: reading code that’s well-written is much nicer than reading code littered with either baffling comments or none at all. Ultimately, the meme is reminding us (in a funny way) that writing readable code is as important as writing code that works – and that comments should be the cherry on top, not the whole cake.
Level 3: Zen of Self-Documenting Code
At the high end of this IQ bell curve meme, a hooded “code monk” echoes a core Clean Code philosophy: ideally, your code itself should tell the story. This meme humorously frames a long-running debate in software engineering: Code Comments versus self-documenting code. The twist is that the lowest IQ character and the highest IQ character oddly agree on skipping comments – but for very different reasons:
On the left tail (low IQ), the crudely drawn Wojak proclaims “COMENTS ARE USELESS LOL” (typo and all). This represents a certain ignorant confidence: the newbie or lazy coder who dismisses comments outright, perhaps not realizing the impact on CodeReadability or simply not wanting to bother. His code might be a mess of cryptic variable names (
x, y, temp) with zero explanation, yet he laughs off documentation because he doesn’t know what he doesn’t know. This is the no_comment_argument born from inexperience.In the middle of the bell curve (average IQ), an agitated Wojak with glasses screams “Nooo! You have to use comment to explain your code!”. This is the developer who’s been taught in school or by strict CodingStandards that every piece of logic must be meticulously commented. They’ll insist on things like:
i = i + 1; // increment i by 1They believe comments are a must for clarity, pointing to them as the primary way to achieve good CodeQuality. This perspective isn’t wrong – clear explanations do matter – but the meme portrays it as the panicked mid-tier stance. This dev probably had a professor or lead who hammered in “comment everything!” without mention of code clarity. So they fear that without comments, code will be impossible to understand. They’ve likely experienced confusing code and concluded the solution is more comments (the equivalent of putting band-aids on bad code). In our meme’s context, this is the mainstream shouting for documentation to save the day.
On the right tail (high IQ), the enlightened monk-like figure calmly states: “Code should be self-explanatory and comments should be reduced to minimal use.” This represents the seasoned senior developer mindset: strive to write self_documenting_code. This doesn’t mean no comments whatsoever; it means every comment is precious and should convey something the code itself can’t. Rather than writing a comment describing what the code does, these devs prefer to write the code in a way that makes its purpose obvious. They use meaningful variable names, clear function names, and simple, readable logic. For example, instead of writing:
# calculate user age in years def calcu(x): return x/365with a comment explaining a cryptic
calcufunction, they’d just name itcalculate_user_age(days). The code becomes the explanation. Comments then are only for context or rationale – the why behind a tricky implementation, references to a formula or a known bug workaround, etc. This high-IQ stance comes straight from CleanCodePrinciples and many experienced devs’ hard-earned wisdom: excessive comments can be a code smell. They know that comments can drift out-of-date (since the compiler or interpreter reads only the code, not the comments). Nothing is worse for DeveloperExperience than a misleading comment on top of code that changed months ago – it’s like a faulty map. The enlightened approach mitigates this by making the codebase as self-explanatory as possible, so future maintainers rely less on separate explanations and more on reading clean code.
The DeveloperHumor here comes from the bell-curve format: it suggests that the simplest thinker and the wisest thinker oddly reach a similar conclusion (“don’t heavily comment”) but for opposite reasons. The leftmost simply doesn’t value comments (possibly producing spaghetti code with no docs), whereas the rightmost values code clarity so highly that comments become almost redundant. Meanwhile, the poor soul in the middle is tearing his hair out, yelling about proper commenting because he hasn’t reached that zen balance yet. Every seasoned dev has seen this dynamic during code reviews or team debates about CodingStandards: one colleague says “comments are for the weak” (not realizing they themselves write inscrutable code), another says “every function must have a 5-line doc string”, and the senior engineer quietly refactors the code to be cleaner and adds one or two clarifying comments instead of ten. The humor is that both extremes (“no comments, LOL” and “code so good, no comments needed”) result in fewer comments, but one is due to negligence and the other due to enlightened best practice. It’s a satire of how a little knowledge can be a dangerous thing: the middle IQ guy knows just enough to insist on comments, but not enough to realize why or when comments are truly needed.
From an industry perspective, this meme highlights a key CodeQuality and maintenance concern. Excessive commenting (“please document everything!”) often stems from codebases that lack clarity – if variable names are meaningless or logic is convoluted, people feel forced to plaster comments everywhere as life rafts for readers. But ideally, we improve the code itself rather than drown it in explanations. There’s a famous saying in software:
“Code is like humor. If you have to explain it, it’s not that good.”
In practice, the CleanCode approach advocates: use comments sparingly to explain why something is done, not what the code is doing – because good code makes the “what” obvious. Good developers learn that a well-chosen function name or an extra line break can replace an entire comment. For instance, imagine encountering a function called doStuff() with a 3-line comment describing exactly what it does – a high-IQ dev would rather rename it to calculateInvoiceTotal() and remove those lines of comment. The code becomes self-descriptive.
Of course, the meme simplifies the spectrum for a laugh. In reality, CodeReadability and documentation exist in a balance. Completely skipping comments is usually bad – even our 145 IQ monk would agree some comments (or docstrings) are crucial for communicating intent, especially in tricky parts or public APIs. And writing a novel of comments for simple code is equally bad – it’s noise. The shared experience behind this joke is that every dev has walked that tightrope: How much should I comment? When you’re new, you either comment too little or overdo it. With experience, you learn to let the code do most of the talking. The bell curve exaggerates it: the DeveloperMemes format implies that after enough experience (i.e., reaching “galaxy brain” IQ), you circle back to a similar stance as the novice (“minimal comments”), but now it’s an informed stance called minimal_commenting. This resonates in engineering culture because we’ve all seen both extremes in action and probably cringe remembering when we ourselves were that middle Wojak, furiously insisting everyone comment everything.
In summary, this meme is a nod to developer culture wars over commenting. It playfully encourages writing self_documenting_code for better maintainability and pokes fun at the over-commenting zealots. It’s a tiny lesson in CodeQuality: the best code is clear enough that it feels obvious – so you don’t need a running commentary to understand it. And it’s a wink at the shared DeveloperExperience of evolving from “LOL, no comments” to “Ok, every line needs a comment” to finally “comments only where truly needed, let clarity reign.”
Description
The image is the classic IQ-bell-curve meme: a blue normal-distribution chart spans the width, annotated along the x-axis with IQ scores from 55 to 145 and percentage bands (0.1 %, 2 %, 14 %, 34 %, etc.). On the left low-IQ tail stands a crudely drawn Wojak saying, in all caps, "COMENTS ARE USELESS LOL." In the middle peak, an anxious Wojak with slicked-back hair shouts the header text placed above the chart: "NOOO! YOU HAVE TO USE COMMENT TO EXPLAIN YOUR CODE." On the right high-IQ tail, a hooded, monk-like Wojak states: "CODE SHOULD BE SELF EXPLANATORY AND COMMENTS SHOULD BE REDUCED TO MINIMAL USE." The meme humorously contrasts extremes of developer opinion about commenting practices, advocating clean, self-documenting code over excessive or zero comments - making it relevant to clean-code philosophy, code readability, and developer culture
Comments
6Comment deleted
After two decades I’ve learned: write code so clear it needs no comments - then add a single line, “// business said so,” so future-me remembers clarity has its limits
The guy on the right wrote self-documenting code so clean it got acquired, then spent six months explaining to the new team why calculateTaxes() doesn't actually calculate taxes anymore after the 2019 refactor
This meme perfectly captures the arc of every senior engineer's journey: starting with 'comments are waste of time,' evolving through the 'comment everything religiously' phase during code reviews, and finally achieving enlightenment where you realize the best comment is the one you didn't need to write because you renamed that function from 'processData()' to 'calculateMonthlyRecurringRevenueFromActiveSubscriptions()'. The real wisdom isn't in the comments - it's in making the code so obvious that future-you doesn't want to travel back in time to strangle past-you
After 15 years my comment policy is simple: delete anything that explains what the code does; keep the one that explains why Legal, an ancient vendor SDK, and an ADR forced it to do it that way
Right tail engineers: where variable names like 'computeDiscountedTotalAfterTaxForEligibleCartItems' make comments redundant - and grepable
Policy I push in reviews: comments document invariants and landmines - if a comment explains the code, the code needs a rename and a refactor PR