During my last post, I had a few thoughts on domain-specific languages, too. Languages like Ruby and Groovy have really led the way in the last few years in a renaissance for embedded domain-specific languages.
I think for certain problems, DSLs are a beautiful solution. I find it hard to get excited about the more model-y forms of this like Microsoft’s software factory stuff or really the whole term language oriented programming. Maybe that’s because I see DSLs as a tool to use, not a new way to program. I believe that the bulk of an application will be written with a general purpose language for a long time to come. DSLs are a great way to allow users to control parts of an application in terms they understand, without forcing them to also learn and use a general purpose language. They can also be useful within an application if you need a more succinct way to represent well-defined domains of knowledge, rules, etc, particularly if the details change frequently.
Some people have advocated radically different paradigms based on models or graphical programming techniques. Personally, I’m not buying it. I don’t think it’s an accident that we program in textual programming languages. Textual languages are the pinnacle of what humans have developed for symbol representation and manipulation. For programming, nothing beats text for its combination of information density, precision, input speed, human understanding, and machine understanding. I think programmers are going to be typing characters into text editors for a long, long time to come.