In order to begin building "little languages" and DSLs, software engineering needed an attitude change. Many of the great language design projects had been Modernist monoliths, architecturally pure languages that stood alone. Larry Wall, a linguist, missionary and open-source hacker, would seek to change that by creating Perl. Perl, he claims, is the world's first postmodern programming language. It tries to put the focus on the person solving the problem, rather than the problem to be solved. To that end, it embraces eclectic influences, providing several different ways of doing any particular thing. His background in linguistics serves as a major influence, causing some to refer to Perl variables and functions as nouns and verbs. The success of any new little polyglot language owes many debts to Perl. Larry Wall has written extensively about the philosophy that goes into the design of Perl:
"Modernism was based on a kind of arrogance, a set of
monocultural blinders that elevated originality above all else, and
led designers to believe that if they thought of something cool, it
must be considered universally cool. That is, if something's worth
doing, it's worth driving into the ground to the exclusion of all
other approaches. Look at the use of parentheses in Lisp or the use
of white space as syntax in Python. Or the mandatory use of objects
in many languages, including Java. All of these are ways of taking
freedom away from the end user “for their own good”. They're just
versions of Orwell's Newspeak, in which it's impossible to think
bad thoughts. We escaped from the fashion police in the 1970s, but
many programmers are still slaves of the cyber police."
So here's how Perl is different:
It's optimized for expressive power, not for ease of learning. ("It's easy to learn how to drive a golf cart, but it's hard to express yourself in one.")
You don't have to master it to start using it — you can begin right away, and learn as you go. There are many acceptable levels of competence.
There's more than one way to do it. (A philosophy frequently abbreviated to TMTOWTDI, say "tim toady.")
There's no shame in borrowing from other languages.
Style is unenforced except by peer pressure.
This last one is interesting because it's one of the topics on which language designers have wildly varying opinions. It's also an area which has significant consequences for the development of idiom. It's difficult for a programming language to grow literary forms if the style is strictly constrained to a single paradigm. Python is a great example of this. It's stylistic straitjacket is so tight, determining word-choice and whitespace, that outsiders joke about Python programmers being into BDSM. Whereas a functionally-equivalent but much more flexible language, Ruby, has encouraged the development of many idioms that have folded back into the core language, and been successfully adapted into DSLs.
The postmodern turn has more recently been taken up by James Noble and Robert Biddle with their essay "Notes on Postmodern Programming." They argue that the new dynamic languages, especially multi-paradigm ones (like Ruby, where you are object-oriented,
and functional,
and declarative,
and imperative,
and meta, all at once) are evidence of this development. They make a rather convincing argument about the nature of the "Software Crisis" — the anguish over so many software projects being large, expensive and buggy, if they ever manage to work at all. They argue that the "Software Crisis" is really just the breakdown of the modernist master narrative in disguise. They quote from Lyotard: "Incredulity towards meta-narratives," instead, "small narratives." Which leads directly to DSLs and site-specificity in language design. However, as exemplified by Python, there are significant backlashes against the postmodern turn. They postulate Neoclassical programming,such as Java and C#, building a classic C facade over modern Smalltalk roots. They also imagine Hypermodernism as the exaggeration of modern design and aesthetics, often by way of minimalism, basing the architecture on a single language idea. Modern Lisps and Schemes are good examples of this.
Postmodern programming tends to lead to "Scrap Heap" programming, where the amount of original code is tiny compared to the amount of code in the libraries and frameworks that are being used. (Which is true of this website.) Dynamic languages are the glue that holds the structure together. Components are scavenged from Google searches and open source software. (Like this website.)