Wilkes reviews the history of programming languages from the origins of a symbolic programming system through object-oriented languages. FORTRAN was introduced by IBM to help users go from assembly language programming to high-level language programming. ALGOL was the work of an international group to define numerical analysis algorithms. The streams of FORTRAN and ALGOL reflected practical and theoretical approaches, respectively. The formal definition of ALGOL with its stack gave a basis for language research over the following years.
The recursion developed for ALGOL was based on John McCarthy’s LISP definition and was not totally appreciated by his colleagues, although stacks were known to be inefficient. Another disadvantage was that recompilation was required when programs were changed, because of the block structure of the language. This compared badly to FORTRAN , which required only the segments that had been changed to be recompiled. ALGOL languages were used for nonnumerical work and medium-scale computations. FORTRAN continued to be used for large-scale number crunching.
ALGOL led to a disciplined study of programming languages with stacks, while flat languages like FORTRAN were ignored. Development of the heap led to modular structures and object-oriented programming techniques. It also led to languages with hidden structures, clear interfaces, and data manipulation.
LISP led to garbage collection, which was not required for heap processing. Heaps, garbage collection, and classes were found in Simula67.
Object-oriented languages are not fully developed. While Modula3 is a basis for research and teaching, C++ shows its practical non-object-oriented basis. Languages such as Fortran 90 show the strong desire for backward compatibility. Pascal, which has weaker compatibility with ALGOL 60, is a class of increasingly elegant languages developed by N. Wirth. B. Stroustrup generated C++ from C for practical reasons.
Wilkes believes that language theory is still immature and that programming languages can be small and lead to a natural method of programming.