The Department of Computer Science & Engineering
cse@buffalo

CSE 305
Programming Languages
Lecture Notes
Stuart C. Shapiro
Fall, 2003


Evolution of Programming Languages: A Personal View

Programming language evolution is the bottom-up approach to the goal of getting computers to understand natural language.

Fall, 1964: First programming course MAD (Michigan Algorithm Decoder), a version of ALGOL 58. Example:

WHENEVER condition1
   statments1
OR WHENEVER condition2
   statements2
...
OTHERWISE
   statementsn
END OF CONDITIONAL
instead of if then else
Used punched cards and the new batch operating system.
The only characters in the punched-card character set were upper-case letters, digits, and a few punctuation marks. That's why programming language names were always spelled with all caps. (Plus they are mostly acronyms.)

Spring, 1965: LISP, a functional (& recursive), interactive programming language used via a time-sharing terminal in an interactive debugging environment. Used for AI. Question: what is a LISP program anyway?

Late Spring, 1965: Read FORTRAN II manual in preparation for first programming job in summer. Ugh! No recursion. It's only conditional was the arithmetic IF:

IF (arithmetic expression) label1, label2, label3
However, FORTRAN's great strength is a multi-pass optimizing compiler.

Summer, 1965: Arrived at summer job and told to learn COBOL. Read manual for a few days. More ugh! No subroutines with separate variable environments. Instead of x = y + z, it's ADD Y Z GIVING X. Only later I get into COBOL's head as transforming input data files into output report files, and "programming in English." But that's more for reading than writing---many terms that make it readable are optional and ignored by the compiler. COBOL, however, has structures, the beginning of objects, but data only.
They relent and let me, and a couple of other student summer interns, use FORTRAN IV. Somewhat better than FORTRAN II, but still not as good as MAD. For example, it included a logical IF.

"FORTRAN and COBOL ... were being designed for use by mathematicians and business people who were not programmers." [Victor H. Yngve (2000), early computational linguist and developer of COMIT]

ca. 1966-68: Graduate school. Mostly used SNOBOL, a pattern-matching language derived from COMIT, similar to parts of Perl. Control structure based on success/fail rather than true/false. Dynamic subroutine bodies! One statement type, could end with a set of goto's. Theoretically, you could randomly shuffle the cards, and the program would run the same!

Department got a Burroughs stack machine. Used Burroughs Extended ALGOL, version of ALGOL 60. Elegant. Defined with a formal grammar. Had begin-end blocks with lexical scoping and recursion. ALGOL 60 becomes the official publication language of computer science.

Visiting speakers discussed ALGOL 68---too complicated for anyone to use.

1968: Edsger Dijkstra publishes "Goto Statement Considered Harmful" as letter to the editor of CACM. Launches structured programming movement.

1968-1971: Spend summers at the RAND Corp. They get an IBM 360. We program in PL/I. FORTRAN and COBOL mixed together. Optional recursion if the subroutine is declared as such. Many declarations. Defaults must be carefully remembered and considered. Arithmetic expression evaluation rules cause some literal expressions to evaluate to unexpected, and mathematically incorrect, results.

1970, Alan Perlis: "FORTRAN is the language of the streets and, like other languages of the streets, should be picked up in the gutter."
1970's, unremembered source: "I don't know what programming language will be used in the 90's, but it will be called FORTRAN."

1971: First faculty position. CS1 in FORTRAN. It is generally agreed that students who know BASIC are worse off than those who know no programming language.

Summer, 1975: Taught first course (CS2) in Pascal. An ALGOL-family language designed as a pedagogical language. One pass, quick compiler. Grammar specified by graphical syntax charts---easy to refer to, once learned. Nice, elegant, but with a few subtle design flaws. Pascal eventually spreads widely as the language for CS1 & 2, and even for production programming.

ca 1976: Back to using LISP for research. It remains my primary programming language through several implementations.

ca 1976: Study SIMULA 67. Has coroutines and structured data objects that contain procedures. The ancestor of Object-Oriented programming languages. With MS student, Howard Smith, use it to write first program that plays Scrabble.

1977: Come to UB. CS1 in Fortran.

1979: I publish Techniques of Artificial Intelligence, a collection of 7 AI programs, 5 in LISP, 1 in SNOBOL4, and 1 in MICROPLANNER, an AI language that features backtracking.

ca 1979: CS1 moves to Pascal.

1982: Teach CS505. Students use Pascal, SNOBOL4, LISP.

1984: Teach CS505. Students use Ada, C, Lisp, Pascal, Prolog, FP.
FP, invented by John Backus, is a functional programming language without variables!

1984: Common Lisp. Brings together the threads of various, competing Lisp implementations.

ca 1985: Ada compilers available. We don't move CS1 to Ada because its reputation is that it's so big that any error is likely to be a legal construct that does someting unexpected.

ca 1986: CS1 to Modula-2. Pascal with the design errors removed. Also contains modules, another step toward OO programming. We are one of the first, but it never spreads as widely as Pascal.

1988: I publish LISP: An Interactive Approach.

1990: Common Lisp, Second Edition. Introduces ANSI Common Lisp, "nearing completion". Contains CLOS, the Common Lisp Object System, "an object-oriented extension to Common Lisp." Has multiple inheritance.

ca 1990: CS1 to C at the urging of career-oriented students and sympathetic faculty. All faculty who are PL experts or near-experts are opposed.

1991: Teach CS505. Students use Ada, C, Common Lisp, FP, Prolog.

1992: I publish COMMON LISP: An Interactive Approach.

1993: Teach CS 305. Students use Ada, C, Common Lisp, Miranda, Modula-2, Prolog.
Miranda is a functional programming language with lazy evaluation, allowing literate programming (uncomment---all file is comment except for lines marked as program).

ca 1997: Dept. establishes a set of 1-credit langage courses, in Common Lisp, Prolog, etc. All are soon terminated, but Common Lisp, which lasts until Fall, 2000.

ca 1998: CS1 to C++. Notoriously difficult for CS1 students.

ca 1999: CS1 to Java.

Fall, 2000: CS1 to "Objects first".

I volunteer to teach CS1-2 to motivate myself to learn Java, and teach CS1 in Spring, 2001, and CS2 in Spring, 2003.

First Previous Next

Copyright © 2003 by Stuart C. Shapiro. All rights reserved.

Stuart C. Shapiro <shapiro@cse.buffalo.edu>