Programming 2.0
For a few years now, Tim O'Reilly has been using the term "Architecture of Participation" for systems in which the user is not only allowed but expected to contribute in non-trivial ways. I've begun to consider the relevance to recent trends in programming and programming languages as well.
In the good ol' days of FORTRAN and COBOL, the wizards created compilers; the rest of us merely used the notation we were granted. With the C preprocessor, we were allowed some degree of participation, but it was limited and offered many foot-shooting opportunities. Yes, I know about macro assemblers, LISP, and lots of "extensible" language efforts (not to mention the jokes about Pascal programmers who defined BEGIN as "{", END as "}", THEN as "", etc.), but I'm talking about the mainstream application programming world.
By and large, you took the tools you were given and did your work.
But in these days of mashups, YouTube, and GarageBand, the role of passive consumer is less universally and quietly accepted as the only option, especially by generations whose members grew up with more powerful, participatory technology taken for granted. Is it any coincidence that DSLs, the meta-object protocol, and more malleable languages are getting so much attention?
Perhaps the most interesting and appealing characteristic of the so-called "dynamic" languages is not whether/when a variable is bound to a data type, nor whether the standard implementation uses a compiler, interpreter, virtual machine, or a combination of all three. Instead, the syntactic flexibility may be a more potent factor.
Shaping the notation in which you and your collaborators express your ideas is a powerful tool, and one which likely affects the set of ideas which are effectively thinkable. The roots of this idea are deep in computing science, but the acceptance (or even demand) for this power in the hands of the everyday developer seems to me more of a cultural than a technological phenomenon.

