The Department of Computer Science & Engineering
STUART C. SHAPIRO: CSE 305
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:
instead ofWHENEVER condition1 statments1 OR WHENEVER condition2 statements2 ... OTHERWISE statementsn END OF CONDITIONAL
if then else
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:
However, FORTRAN's great strength is a multi-pass optimizing compiler.IF (arithmetic expression) label1, label2, label3
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. One improvement over FORTRAN II was that 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! Only had one statement type, and it 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.
begin-end blocks with lexical scoping and recursion.
ALGOL 60 becomes the official publication language of computer
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
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, 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 CS305. Students use Ada, C, Common Lisp, Miranda,
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, except for 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.
2003: Teach CSE305. Students use C, C++, Common Lisp, Fortran77, Fortran90, Fortran, 95, Java, Perl, and Prolog.
Summer, 2004: With Dr. David Pierce, taught a non-credit Common Lisp short course.
2005: Teach CSE305. Students use Bash, C, C++, Common Lisp, Fortran77, Fortran90, Fortran, 95, Java, Perl, Prolog, and Python.
2007: Teach CS1 using Java and Eclipse.