---
title: "What Languages Fix"
---

Kevin Kelleher 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.