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.