← Back to news

Perlisisms (1982)

cs.yale.edu|103 points|50 comments|by tosh|Jun 14, 2026

Reflections on Computing: The Perlisisms (1982)

Below is a reimagining of the philosophical observations on software, logic, and language originally penned by Alan Perlis.

🧩 On the Nature of Software and Complexity

  • No program exists in isolation; every piece of code is a component of a larger system, and it rarely fits perfectly.
  • When a program handles massive datasets, it typically does so using a very limited set of methods.
  • Symmetry is a powerful tool for reducing complexity (consider how subroutines are merely a subset of co-routines); search for it everywhere.
  • It is far simpler to produce a flawed program than it is to comprehend one that is flawless.
  • A language is considered "low-level" when it forces the developer to obsess over details that are irrelevant to the problem.
  • It is more efficient to have 100 functions\text{100 functions} acting upon 1 data structure\text{1 data structure} than 10 functions\text{10 functions} scattered across 10 different structures\text{10 different structures}.

"The only difference(!) between Shakespeare and you was the size of his idiom list—not the size of his vocabulary."

  • If your procedure requires ten different parameters, you have likely overlooked a necessary abstraction.
  • Recursion serves as the foundation of computation because it swaps descriptive brevity for execution time.
  • If two developers manage to write the exact same program, both should be converted into microcode; only then will they truly be different.
  • Every piece of software serves at least two roles: the purpose for which it was designed, and a secondary purpose it was never intended for.

🧠 The Psychology of the Programmer

  • If your audience is nodding while you explain your logic, they've fallen asleep; wake them up.
  • A program that lacks both a loop and a structured variable is not worth the effort of writing.
  • If a programming language doesn't fundamentally alter your mental model of how to code, it isn't worth learning.
  • Modularity always carries the risk of misconception: when you hide information, you create a requirement to verify communication.
  • To truly grasp a program, you must simultaneously embody the machine executing it and the logic of the program itself.
  • Perhaps if we were taught to code from early childhood, we would actually be capable of reading programs as adults.
  • Much like vision, the flow or transition of a view is more significant than any single static image, regardless of its beauty.
  • There will always be thoughts we wish to express in code that, in every existing language, can only be articulated clumsily.
  • Once you have mastered the logic of a program, find someone else to actually write the code.

⚙️ Systems and Logic

Around computers, it is nearly impossible to find a consistent unit of time to measure actual progress. Imagine the sheer scale of a program that would take as long as a human life to complete!

For system architecture, the equivalent of a "face-lift" is not adding a new node, but adding an edge to the control graph that introduces a cycle.

  • In the realm of programming, every action is a specific instance of a more general rule—though we often realize this too late.
  • A programmer's worth is not found in their logic or ingenuity, but in the thoroughness of their case analysis:
    • Edge case A handled?
    • Null pointer checked?
    • Buffer overflow prevented?
    • Race condition mitigated?
  • The eleventh commandment was either "Thou Shalt Compute" or "Thou Shalt Not Compute"—I can't quite remember which.
  • The string is a primitive data structure; whenever it is passed around, it results in a wasteful duplication of effort.
  • Anyone can be trained in the art of sculpting; Michelangelo would have had to be trained not to.

📐 Mathematics and Theory

The use of a computer to prove the 4-color theorem (where χ(G)4)\text{(where } \chi(G) \leq 4\text{)} does not advance mathematics; it simply suggests that a problem which challenged humans for a century was likely not mathematically significant.

  • The most powerful computer is the one firing in our own minds, forever searching for a digital emulator that can match it.
  • The standardization of hardware would be a catastrophe—fortunately, it probably won't happen.
  • Structured Programming is a manifestation of the law of the excluded middle.

The Word-Image Paradox

MediumValueLimitation
Graphics1 Picture \approx 10K WordsOnly if the words describe the picture.
Text10K WordsRarely can these be adequately captured by a picture.

Abstract representation of data

🛠️ Languages and Tools

There are three ways to write error-free programs:

  1. The first way.
  2. The second way.
  3. The third one is the only one that actually works.
  • Some languages are designed to absorb minor changes while simultaneously resisting actual progress.
  • You can gauge a programmer's worldview by their opinion on the continued relevance of FORTRAN.
  • In the world of software, the "early bird" is often the one who creates the "worm" (the bug).
  • I sometimes suspect the only universal constant in computing is the fetch-execute cycle:
LOOP:
    FETCH instruction
    DECODE instruction
    EXECUTE instruction
    JUMP to LOOP
  • The objective of computation is to emulate our synthetic capabilities, not to understand our