This is a work in progress. It’s bogged down because I had a neat idea of the evolution of structure in programming methodologies, which probably bears little resemblance to the real history of programming.
Computer programs have been required to do increasingly more varied things, with the result that their code has become increasingly complex. Consequently, the code has become very hard to maintain: a second programmer can’t understand what the first programmer was doing with their code; the first programmer can’t understand their own code a year later.
The conceptual development of programming languages followed this thread, to bring the code the programmer writes more in line with the concepts that are being modelled within the program.
“Intellectual manageablility” (Djikstra)
Code reusability
Heirarchical systems
Top-down design
Human-readable. Extreme examples: COBOL, AppleScript.
Von Neumann—idea of putting program into memory rather than hard-wiring. (Babbage’s machine took programs on cards; equivalent of memory was a mechanical state of the machine.)
The lowest-level instructions the the CPU is to execute at each step can be thought of as integer numbers. Assembler languages simply re-codes these numbers into mnemonics.
Typically, a new assembler language is developed for each CPU architecture.
Break complex program into a set of simple tasks, or procedures.
Procedures may be thought of linguistically as verbs.
Algol, FORTRAN, LISP, COBOL, BASIC
Think of associated data as a single structure.
For instance, a rectangle might be modelled in a program as
four numbers, top, left,
bottom, right.
Rather than storing these numbers at random in memory, in
structured programming, they are stored together as a
structure, which might be named rect. The
structure rect can then be handled as though it
were a single entity, which is the way we were thinking of
the rectagle to begin with.
The interpetation of the data is thus represented in the code. The code refers to the structures as individual things, as nouns.
Dijkstra, E. W., “Go To Statement Considered Harmful”, Comm ACM, Vol. 11, No. 3, March 1968, pp. 147-148
Dijkstra, E. W., Structured Programming, 1969
From: Federal Standard 1037C: Glossary of Telecommunications Terms
structured programming:
A technique for organizing and coding computer programs in which a hierarchy of modules is used, each having a single entry and a single exit point, and in which control is passed downward through the structure without unconditional branches to higher levels of the structure. Three types of control flow are used: sequential, test, and iteration.
Pascal, C
Extension of the procedural programming idea, with the capacity of a procedure to call itself from within itself.
Lisp, Pascal
Recursive Functions of Symbolic Expressions and Their Computation by Machine, Part I , John McCarthy
Rather than doing things to data entities, think of data
entities as having behaviors. For instance, rather
than changing all the numbers in the rect
structure in order to move the conceptual rectangle, you call
on the move behavior of the rect
module.
Linguistically, the modules, as nouns, are now active. Rather than always being the object of the verbs (the data that procedures act upon), they can be the subject of a phrase.
In the modular programming methodology, one of the most important principles is encapsulation, whereby the data contained within a module is accessible from the rest of the program only via behaviors of the module. This makes it much easier to control what happens when data is modified.
D.L. Parnas, On the Criteria To Be Used in Decomposing Systems into Modules Commun ACM, Vol. 15, No. 12, December 1972 pp. 1053-1058
In this context “module” is considered to be a responsibility assignment rather than a subprogram
Modula
Think of program as a the composition of a set of mathematical functions on some data. Data represented as local variables of functions. Assignment replaced with recursion.
Proceedings of the 1981 Conference on Functional Programming Languages and Computer Architecture, Portsmouth, NH, October 1981
Haskell, Caml,
We naturally arrange the things in our universe into classes, such as the class of all people. These classes can have sub-classes: the class of people contains the sub-class of all women. Classes may be said to inherit properties and behaviours. Women have hearts because people have hearts; women cry because people cry (and people cry because primates cry, etc.)
Object-oriented methodologies are an extension of modular ones, the additional ingredient being inheritance. With this ingredient, the code can refer directly ot kinds of interactive things.
In object-oriented programming, concepts are modelled in code directly using the ideas of classes and inheritance. A particular member of a class is called an object.
Booch, G. “Object-Oriented Development.”
IEEE Trans Software Eng 12 (2 1986): 211-221.
Proceedings of the ACM Conference on Object-Oriented Programming Systems, Languages, and Applications, October 1986
C++, Python, Java
Introduction to Programming Languages by Anthony A. Aaby