Topic: Software engineering
Programming language evolution is sometimes claimed to be a search for greater abstraction.
This is wrong, and mirrors the misunderstanding of biological evolution. There is no end-goal, no such thing as progress or improvement. It is about adaptation.
There are different kinds of models and different kinds of environmental factors, such as machine constraints, and how ignorant of mathematics and past programming languages the designers of a programming language are.
A good example of this is Google MapReduce. The programming paradigm goes back to APL. Limited support for parallelism was added in the form of vector co-processors on IBM mainframes. The first massively parallel implementation of the idea was StarLisp.
Another example is Objective C. Brad Cox claims that the only reason he developed Objective C was because at the time Xerox would not sell Smalltalk (Masterminds of Programming, p. 258).
In terms of parameters like dynamism and introspection, Lisp already had all the necessary features in 1958. From there the same basic idea of lambda abstraction has been applied to Actors and prototype-based languages like Self and JavaScript, but in terms of other "dynamic" programming languages, almost all of them are a step backward from 1958 Lisp.
The same thing can be said about C and Algol 68.