Perlisisms (1982)
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 acting upon than scattered across .
"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
stringis 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 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
| Medium | Value | Limitation |
|---|---|---|
| Graphics | 1 Picture 10K Words | Only if the words describe the picture. |
| Text | 10K Words | Rarely can these be adequately captured by a picture. |
🛠️ Languages and Tools
There are three ways to write error-free programs:
The first way.The second way.- 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-executecycle:
LOOP:
FETCH instruction
DECODE instruction
EXECUTE instruction
JUMP to LOOP
- The objective of computation is to emulate our synthetic capabilities, not to understand our