Skip to content
DevMeme

Identifying C Programmers by Their Reaction to 'GOTO Considered Harmful' — Meme Explained

Identifying C Programmers by Their Reaction to 'GOTO Considered Harmful'
View this meme on DevMeme →

Level 1: The Magic Argument-Starting Words

Imagine a playground where one group of kids loves a certain old toy, and years ago a famous teacher once said "that toy is dangerous." If you ever shout the teacher's words near those kids — even kids who look fast asleep — they will leap up instantly yelling "It's fine!", "You just don't know how to use it!", "It's actually great!" And if some other kid says "just play with my newer toy instead," they all stop arguing with each other and chase him off the playground. The joke is that some arguments never really die; they just nap until someone says the magic words.

Level 2: The Words on the Battlefield

  • goto — a C statement that jumps execution directly to a labeled line. Powerful, unstructured, and historically blamed for "spaghetti code" where control flow tangles beyond comprehension.
  • "Considered harmful" — shorthand for Dijkstra's 1968 letter; now a meme-suffix for any strong technical condemnation.
  • Structured programming — the discipline of building programs only from sequences, conditionals, loops, and functions. It won so thoroughly that many newer languages (Python, Java) simply have no goto at all.
  • The cleanup pattern — the legitimate modern use:
int init(void) {
    if (!(a = alloc_a())) goto fail;
    if (!(b = alloc_b())) goto fail_a;
    return 0;
fail_a:
    free(a);
fail:
    return -1;  /* the kernel does this thousands of times */
}
  • "Skill issue" — gaming slang meaning "the problem is you, not the tool."

The early-career experience this maps onto: your first code review where you used something a linter forbids, cited a 50-year-old authority you hadn't read, and got a five-comment thread from a senior explaining the original paper's actual scope. Rules have contexts; slogans shed them.

Level 3: Fifty-Seven Years of Unstructured Grief

The four-panel comic (art credited to @SpaceboyCantLo and @THEFATBITCOIN) uses the "shout an insult to identify the fallen" battlefield template. Two spear-carrying Greek soldiers survey a hill of corpses. Panel one:

HOW DO WE KNOW IF THEY'RE C PROGRAMMERS?

Panel two, bellowed across the dead:

GOTO CONSIDERED HARMFUL

Panel three: the corpses rise, instantly mid-argument — skill issue, it's useful, it's clean, and one heckler offering "Stop crying, use Python instead." Panel four: that last soldier gets impaled by a freshly resurrected C programmer. Death is negotiable; language slander is not.

The incantation works because it references the most famous flame war in computing history. Edsger Dijkstra's 1968 letter to the Communications of the ACM — published under the editor-chosen title "Go To Statement Considered Harmful" — argued that unrestricted goto makes it impossible to reason about where a program is in its execution, and helped launch the structured programming movement that gave us the loops and functions everyone now takes for granted. The phrase "considered harmful" became such a cliché that essays titled "'Considered Harmful' Essays Considered Harmful" exist. It is computing's oldest still-warm casus belli.

The genius of the comic is that every resurrected rebuttal is a real position you will encounter verbatim:

  • "it's useful" — the technically strongest defense. C lacks exceptions, destructors, and defer, so the idiomatic way to unwind partially acquired resources is the forward-jumping cleanup pattern — goto out_free; — used pervasively in the Linux kernel, which would not pass review without goto. Dijkstra was condemning spaghetti back-jumps in 1960s BASIC and FORTRAN, not disciplined single-exit error handling; the meme war flattens that nuance, as wars do.
  • "it's clean" — the aesthetic escalation: nested if pyramids and flag variables are less readable than one well-named label.
  • "skill issue" — the modern all-purpose dismissal, asserting that goto only harms those too weak to wield it.
  • "use Python instead" — and here the comic lands its second satirical layer. The Python heckler isn't refuted; he's speared. Inter-language warfare outranks intra-language disagreement: C programmers may fight each other about control flow forever, but they unite instantly against the suggestion that the solution is leaving C. Tribal hierarchy in a single panel.

What's really being satirized is the immortality of settled-seeming debates. The industry "resolved" goto decades ago, yet the argument resurrects on schedule because the original context evaporated while the slogan survived. Most holy wars work this way: the citation outlives the claim, and each generation re-fights it with whatever new vocabulary ("skill issue") is fashionable.

Comments (8)

  1. Anonymous

    Dijkstra declared goto harmful in 1968; C programmers have spent the 57 years since jumping straight to the rebuttal - no intermediate control flow required

  2. Anonymous

    The guards didn't need a debugger; they just followed the unstructured control flow to the survivors.

  3. @Lyncore

    goto @ it's clean

  4. @tuguzT

    Just mention Rust, will be the same as on this picture

  5. @sysoevyarik

    bruh rust mentioned

  6. @agonyship

    HOLY SHIT!! IT'S RUST MENTIONED!! ... What does that even mean? I only know Java.

Join the discussion →

Related deep dives