#set page(
  paper: "a5",
  margin: (x: 1.8cm, y: 1.5cm),
)
#set text(
  font: "Liberation Serif",
  size: 10pt,
  hyphenate: false
)
#set par(justify: true)
#set quote(block: true)

#v(10pt)
= What Languages Fix
#v(10pt)

<NAME> suggested an interesting way to compare programming languages: to describe each in terms of the problem it fixes. The surprising thing is how many, and how well, languages can be described this way.

- *Algol*: Assembly language is too low-level.
- *Pascal*: Algol doesn't have enough data types.
- *Modula*: Pascal is too wimpy for systems programming.
- *Simula*: Algol isn't good enough at simulations.
- *Smalltalk*: Not everything in Simula is an object.
- *Fortran*: Assembly language is too low-level.
- *Cobol*: Fortran is scary.
- *PL/1*: Fortran doesn't have enough data types.
- *Ada*: Every existing language is missing something.
- *Basic*: Fortran is scary.
- *APL*: Fortran isn't good enough at manipulating arrays.
- *J*: APL requires its own character set.
- *C*: Assembly language is too low-level.
- *C++*: C is too low-level.
- *Java*: C++ is a kludge. And Microsoft is going to crush us.
- *C\#*: Java is controlled by Sun.
- *Lisp*: Turing Machines are an awkward way to describe computation.
- *Scheme*: MacLisp is a kludge.
- *T*: Scheme has no libraries.
- *Common* Lisp: There are too many dialects of Lisp.
- *Dylan*: Scheme has no libraries, and Lisp syntax is scary.
- *Perl*: Shell scripts/awk/sed are not enough like programming languages.
- *Python*: Perl is a kludge.
- *Ruby*: Perl is a kludge, and Lisp syntax is scary.
- *Prolog*: Programming is not enough like logic.
