It also relates to the work of evolutionary biologist Richard Dawkins in a fairly direct way. We are trying to create an ecology of abstractions. Abstraction is really the most powerful tool that we have in thinking about problems. An abstraction is a single thing, yet if it is a good one, it can have many applications, even an infinite number of them. So an abstraction may be looked at from one side as a compression of many instances into one generality or from the other side as a special purpose power tool that yields the solution for many problems.
Programming languages are really just vehicles to supply abstractions to programmers.
People think of programming languages as being good or bad for a given purpose, but they are really criticizing the abstractions that a language embodies. The progress in programming languages has been incredibly slow because new programming languages are difficult to create and even more difficult to get adopted. When you have a new programming language, the users have to rewrite their legacy code and change their skills to accommodate the language. So, basically, new programming languages can come about only when there is an independent revolution that justifies the waste of the legacy, such as Unix which gave rise to C, or the Web which gave rise to Java. Yet it's not the languages that are of value, but only the abstractions that the languages carry.