What Languages Fix
Paul Graham’s essay What Languages Fix presents a framework for understanding programming languages through the problems they solve.
The Framework
Rather than analyzing languages by features alone, categorize each language by the specific limitation it was designed to fix.
Examples
Low-level abstraction problems:
- “Assembly language is too low-level” → Algol, Fortran, C
Insufficient features:
- “Algol doesn’t have enough data types” → Pascal
- “Fortran doesn’t have enough data types” → PL/1
Design philosophy:
- “Not everything in Simula is an object” → Smalltalk
- “Perl is a kludge” → Python, Ruby
Paradigm shifts:
- “Turing Machines are an awkward way to describe computation” → Lisp
- “Programming is not enough like logic” → Prolog
My Takeaway
Language evolution follows a pattern of incremental problem-solving. Each new language represents developers identifying genuine shortcomings and designing solutions. Practical frustrations drive progress.
What problems do you wish current languages would fix? I’d love to hear at persdre@gmail.com.