A Brief History of Computing Languages
Family tree of important programming languages

Machine Code
A Binary representation of both instructions and data.
Problems:
- Difficult to write (human comprehension; no provision for code reuse)
- Error prone (particularly because data intermixed with code)
- Difficult to debug (particularly if code overwriting occurs)
- Difficult to alter (particularly because of absolute addressing)
Zuse's Plankalkuel
A very early (1945) attempt at a programming language, but lost for 25 years. Notable for supporting:
- a decent notion of a variable, and of the array data structure
- typing, including both integer and floating point types
- 'for' loops, but not 'goto's
- assertions regarding what would be true at certain points in the execution of code (cf axiomatic semantics)
Never implemented.
Pseudocodes
Very simplistic extensions to machine codes, intended to overcome particularly the absolute addressing problem and to provide extended repertoires of basic operators.
- Short Code (Mauchly, 1949) for the BINAC and UNIVAC
- Speedcode (Backus, 1954) for the IBM 701 (added floating point arithmetic and branching instructions).
Both the above were interpreted, not compiled.
- UNIVAC Compiling System (Hopper, 1951 - 53) (based on multiple passes of macro expansion the final code is directly executed, not interpreted).
Early:
- FORTRAN - Backus @ IBM, 1957, 18 person-years to write first compiler,
Goals & contributions: numerical problems, very efficient compiler, separate compilation
Many revisions FORTRAN II, IV, 66, 77, 9x
- ALGOL 60 - Committee, 1960
Goals & contributions: numeric, block structure, recursion, elegant, very influential
Ancestor of ALGOL W, ALGOL 68, Pascal, Modula, Ada, etc.
- COBOL - Committee, 1960
Goals & contributions: business data processing, records
Several revisions
Early Schisms:
- LISP - McCarthy @ MIT, 1962, core is functional
Goals & contributions: List processing and symbolic manipulation, AI
Scheme & Common LISP are modern descendents
- APL - Iverson @ Harvard, IBM, 1960 (for notation),
calculator language for array computations.
- SNOBOL 4 - Griswold @ Bell Labs, 1966 - string processing via pattern matching modern successor is ICON
- PL/I - IBM committee, 1967 - combine FORTRAN, COBOL, ALGOL 60 - but not integrated, now considered a failure.
Multipurpose - include ptrs, records, exceptions, etc.
Next Leap Forward:
- ALGOL 68 - Committee, "orthogonal" elements, elegant but very hard to understand
- Simula 67 - precursor of object-oriented languages - designed for simulation, coroutines
- Pascal - Wirth, ETH, 1971 - designed only as a teaching language to support structured programming, spare & elegant. It was
successful beyond expectations
Abstract Data Types:
- Clu, Mesa, Modula-2, Ada
Supports modules for encapsulation and information hiding
Other paradigms:
- Object-oriented: Smalltalk (1972), Eiffel, C++, Object Pascal, and now Java.
- Functional: Scheme (1985?), ML (1978), Miranda (1986) & Haskell (1991).
- Logic: PROLOG (1972), newer constraint programming languages.
4th generation languages:
- Important in business applications
- Specialized packages of powerful commands w/simplified "user-friendly" syntax.