Skip to content
DevMeme
7287 of 7435
Calvin's Dad Explains: Every Language Is Either Lisp or C
Languages Post #7987, on May 10, 2026 in TG

Calvin's Dad Explains: Every Language Is Either Lisp or C

Why is this Languages meme funny?

Level 1: The Costume Party

A dad tells his kid there are only two kinds of anything in the world — say, cats and dogs — and starts sorting every animal into one of the two while the kid nods along nervously. Then he points at an animal everyone knows is a dog — it barks, it fetches, it has a dog costume on — and says, "Actually, that one's a cat." Final panel: the kid lying awake at night, staring at the ceiling, unable to unhear it. The joke is that feeling when someone confidently rewires how you see a familiar thing — and the scariest part is you can't find the flaw in their argument.

Level 2: The Two Family Trees

The terms doing the heavy lifting, defined:

  • Lisp — a 1958 language family (Common Lisp, Scheme, Clojure) where code is built from expressions and lists, functions are values you can pass around, and programs can manipulate their own structure.
  • C — the 1972 systems language whose { braces }, semicolons, and explicit step-by-step mutation became the visual template for Java, C++, C#, and JavaScript.
  • First-class functions — functions you can store in variables and hand to other functions. In JS: arr.map(x => x * 2). This is the most Lisp-ish thing JS does daily.
  • Closures — functions that remember the variables around them when created. The basis of practically every JS pattern from event handlers to React hooks.
  • C-like syntax — looking like C without behaving like it. JS borrowed Java's costume in 1995 to ride Java's hype wave.

The junior-developer rite of passage embedded here: the day you realize the language you learned for "making buttons work" secretly behaves like the weird academic one with all the parentheses — and that this is why callbacks ever made sense at all.

Level 3: Scheme in a Trench Coat

The reason this lands with senior engineers is that the JS claim is historically literal. Brendan Eich was hired by Netscape in 1995 explicitly to put Scheme in the browser; management then demanded the new language "look like Java" for marketing alignment, and the famous ten days of prototyping produced a Lisp-family core wearing C-family syntax. Every weird-beautiful part of JavaScript — closures over mutable bindings, functions as values you pass to addEventListener, the entire callback-then-Promise-then-async lineage — descends from that smuggled Scheme heritage. The meme's pairings encode the standard arguments people have in code review threads: Ruby? Lisp. (Matz openly cited Lisp; blocks are lambdas, everything is an expression) versus Python? C. (Guido's resistance to functional style is legendary — lambda is deliberately crippled to one expression, reduce was exiled to functools, and statements aren't expressions).

The deeper satire is about taxonomy itself as a developer pastime. Sorting languages into two buckets is the kind of confident reductionism that sounds profound at a whiteboard and collapses under any real example — where does Rust go? Prolog? SQL? — yet we keep doing it because dichotomies are how tribes form. The strip's structure mocks this perfectly: an authority figure delivering an unfalsifiable framework to a captive audience, with the final panel showing Calvin wide-eyed and sleepless in bed — the canonical closing frame Watterson used when the dad's "explanations" (wind is caused by trees sneezing) broke his son's model of reality. Replace "trees sneezing" with "JS is a Lisp" and the psychic damage is identical, except this time the dad is arguably right, which is worse.

Level 4: Lambda Calculus vs. the von Neumann Machine

The dad's taxonomy — "The two types of programming languages are Lisp and C" — is a child's bedtime version of a genuine theoretical divide. In 1936, two equivalent models of computation appeared: Church's lambda calculus (computation as function application and substitution) and Turing's machine (computation as state mutation on a tape). Lisp, born in McCarthy's 1958-1960 work, is lambda calculus with parentheses: programs are expressions, evaluation is reduction, code is data (homoiconicity), and lambda is right there in the language. C, by contrast, is the von Neumann architecture with portable syntax: programs are sequences of instructions mutating memory cells, and every construct maps within shouting distance of the hardware. Backus's 1977 Turing Award lecture famously asked whether we could be "liberated from the von Neumann style" — that lecture is essentially this comic strip with proofs.

The classification game the dad plays is therefore a question about semantic core, not syntax. Haskell? Lisp. — typed lambda calculus (System F with extensions), where evaluation is reduction. Java? C. — statements, mutation, an abstract von Neumann machine with garbage collection bolted on. The punchline panel — "Despite having C-like syntax, JS is a Lisp." — is the strip's thesis: surface grammar is a costume; the evaluation model is the soul. JavaScript has closures capturing lexical environments, first-class functions, dynamic typing, and (post-ES6) proper tail-position semantics on paper — the Scheme genome expressed through curly-brace phenotype.

Description

A four-panel meme built from an edited 1990 Calvin and Hobbes strip (© Universal Press Syndicate). Panel 1: Calvin's dad walks toward Calvin, who sits by a record player, saying 'PLAYING with types? I'LL SHOW YOU SOMETHING INTERESTING.' Panel 2: the dad, spinning a record, declares 'The two types of programming languages are Lisp and C. All languages fall into these two categories.' with overlaid logo pairings: Haskell? Lisp. Java? C. Calvin replies 'YEAH...'. Panel 3: more pairings with logos - Ruby? Lisp. Python? C. - and the dad concludes 'Despite having C-like syntax, JS is a Lisp.' Panel 4: Calvin lies wide-eyed and traumatized in bed, the classic existential-dread closing frame. The meme plays on the real lineage argument that JavaScript was originally conceived as Scheme-in-the-browser (closures, first-class functions, dynamic typing) despite wearing Java/C syntax for marketing reasons

Comments

25
Anonymous ★ Top Pick JavaScript is a Lisp wearing C's clothes to get past Netscape marketing - and like all great disguises, we only noticed after it shipped to every device on Earth
  1. Anonymous ★ Top Pick

    JavaScript is a Lisp wearing C's clothes to get past Netscape marketing - and like all great disguises, we only noticed after it shipped to every device on Earth

  2. @mihanizzm 2mo

    ASM?💀

    1. @b7sum 2mo

      C

  3. @mihanizzm 2mo

    Prolog?💀

    1. @b7sum 2mo

      Lisp

      1. @mihanizzm 2mo

        Piet?😢

        1. @b7sum 2mo

          C

          1. @mihanizzm 2mo

            Whyyyy

            1. @b7sum 2mo

              you can pretty much call it visual asm

  4. @Daonifur 2mo

    They may be referring to functional vs (other) programming here

  5. @jooorn 2mo

    А чо насчёт 1С? (Wat ‘bout “Odin Ass”?!)

    1. @M4lenov 2mo

      It's kinda derivative of Java so C

  6. .same name 2mo

    why js text is not centred😡

    1. @kobe_koto 2mo

      because cSs is awes ome

  7. @Vlasoov 2mo

    HWND is not HANDLE🧐

    1. @deimossos 2mo

      I like your funny magic words

  8. @RiedleroD 2mo

    I'm sorry but python being C is the wrongest statement I've heard in a while

  9. @death_by_oom 2mo

    Many lisp implementations are also written in C

  10. @chupasaurus 2mo

    Technically it's undefined since dependent on implementation, nothing stops to make one in Lisp.

    1. @RiedleroD 2mo

      aye. there's plenty of python implementations, CPython is just the reference implementation.

    2. @sysoevyarik 2mo

      You are the reason why this emoji has widespread use -> 🤓

      1. @chupasaurus 2mo

        You are the reason why software goes to shit: you still haven't learned to understand what you're reading.

  11. @JackOhSheetImSorry 2mo

    Browser?

    1. @deimossos 2mo

      I think files, as browsers' primary purpose is to render files

  12. @LonelyGayTiger 1mo

    I think graphics could honestly go either way. Depends a lot on exactly what you're doing. Your 2D games are obviously files, but if you're working on full path tracing, that's obviously math.

Use J and K for navigation