"I think it is inevitable that people program poorly. Training will not substantially help matters. We have to learn to live with it"
About this Quote
Perlis lands the punch with the calm fatalism of someone who’s watched too many “best practices” die in committee. Calling bad programming “inevitable” isn’t just cranky realism; it’s a rebuke to a recurring fantasy in tech culture: that the next course, the next methodology, the next certification will wash human fallibility out of software. He’s not denying skill matters. He’s rejecting the managerial idea that competence is a pipeline problem solvable by training budgets and compliance checklists.
The subtext is about scale and incentives. As software expands from craft to infrastructure, the average program is written under time pressure, shifting requirements, partial knowledge, and perverse rewards: shipping beats elegance, demos beat maintainability, and “works on my machine” beats “understands the system.” Training can polish individuals, but it can’t repeal complexity, ambiguity, or organizational politics. Perlis is implicitly pointing at error not as a moral failure but as a structural condition.
“We have to learn to live with it” is the real directive. It’s a design philosophy disguised as resignation: assume mistakes will happen, then build languages, tools, and processes that make errors harder to introduce and easier to detect. The line anticipates modern fault tolerance, defensive programming, testing culture, type systems, static analysis, and the push toward safer abstractions - not because programmers are lazy, but because they’re human.
Context matters: Perlis wrote from the era when software engineering was trying to professionalize itself, flirting with the dream of turning programming into predictable manufacturing. His quip punctures that dream and replaces it with a more mature one: engineering isn’t the elimination of failure; it’s the art of surviving it.
The subtext is about scale and incentives. As software expands from craft to infrastructure, the average program is written under time pressure, shifting requirements, partial knowledge, and perverse rewards: shipping beats elegance, demos beat maintainability, and “works on my machine” beats “understands the system.” Training can polish individuals, but it can’t repeal complexity, ambiguity, or organizational politics. Perlis is implicitly pointing at error not as a moral failure but as a structural condition.
“We have to learn to live with it” is the real directive. It’s a design philosophy disguised as resignation: assume mistakes will happen, then build languages, tools, and processes that make errors harder to introduce and easier to detect. The line anticipates modern fault tolerance, defensive programming, testing culture, type systems, static analysis, and the push toward safer abstractions - not because programmers are lazy, but because they’re human.
Context matters: Perlis wrote from the era when software engineering was trying to professionalize itself, flirting with the dream of turning programming into predictable manufacturing. His quip punctures that dream and replaces it with a more mature one: engineering isn’t the elimination of failure; it’s the art of surviving it.
Quote Details
| Topic | Coding & Programming |
|---|
More Quotes by Alan
Add to List







