pgstrata
What Languages Fix
2

Kevin Kelleher suggested an interesting way to compare programming languages: to describe each in terms of the problem it fixes.

3

The surprising thing is how many, and how well, languages can be described this way.

2–3

Compare languages by the problem each one fixes. Surprisingly many fit.

2–3

Kevin Kelleher's test: describe each language by the problem it fixes. Surprisingly many fit.

5

Algol: Assembly language is too low-level.

6

Pascal: Algol doesn't have enough data types.

7

Modula: Pascal is too wimpy for systems programming.

8

Simula: Algol isn't good enough at simulations.

9

Smalltalk: Not everything in Simula is an object.

5–9

Algol fixes low-level assembly; Pascal, Modula, Simula, and Smalltalk each patch the one before.

5–9

Algol fixes assembly being too low-level; Pascal, Modula, Simula, and Smalltalk each patch the language before it.

11

Fortran: Assembly language is too low-level.

12

Cobol: Fortran is scary.

13

PL/1: Fortran doesn't have enough data types.

14

Ada: Every existing language is missing something.

15

Basic: Fortran is scary.

16

APL: Fortran isn't good enough at manipulating arrays.

17

J: APL requires its own character set.

11–17

Fortran also fixes low-level assembly; Cobol and Basic exist because Fortran is scary.

11–17

Fortran also fixes low-level assembly; its heirs add data types, arrays, and friendliness for those who find Fortran scary.

19

C: Assembly language is too low-level.

20

C++: C is too low-level.

21

Java: C++ is a kludge.

22

And Microsoft is going to crush us.

23

C#: Java is controlled by Sun.

19–23

C fixes assembly, C++ fixes C, Java fixes C++ being a kludge (and Microsoft is going to crush us), C# fixes Sun's grip on Java.

19–23

C fixes low-level assembly; C++ fixes C; Java fixes C++ (and Microsoft); C# fixes Sun's grip on Java.

25

Lisp: Turing Machines are an awkward way to describe computation.

26

Scheme: MacLisp is a kludge.

27

T: Scheme has no libraries.

28

Common Lisp: There are too many dialects of Lisp.

29

Dylan: Scheme has no libraries, and Lisp syntax is scary.

25–29

Lisp fixes awkward Turing Machines; Scheme, T, Common Lisp, and Dylan fix a kludge, a gap, or scary syntax.

25–29

Lisp fixes Turing Machines; Scheme, T, Common Lisp, and Dylan each fix a kludge, a gap, or scary syntax.

31

Perl: Shell scripts/awk/sed are not enough like programming languages.

32

Python: Perl is a kludge.

33

Ruby: Perl is a kludge, and Lisp syntax is scary.

34

Prolog: Programming is not enough like logic.

31–34

Perl fixes weak shell tools; Python and Ruby fix Perl being a kludge; Prolog fixes unlogical programming.

31–34

Perl fixes weak shell tools; Python and Ruby fix Perl; Prolog fixes programming not being enough like logic.