I only want to make the point that Programming Languages can and should be thought of as Development Tools just like your editor and your debugger, and that programmers ought give thought to whether or not a feature should be in a language, rather than just thinking of the languages they work in as immutable Constants Of The Universe that can never change. Thoughts?
-- Rus Heywood
Harold Abelson and Gerald Sussman, in Structure And Interpretation Of Computer Programs, and Paul Graham, in On Lisp, both strongly make the point that far from thinking of the language as immutable, you should think of all programming as language design. After designing the correct language, the solution to the original problem is usually clear, concise, and correct. Graham argues (convincingly) that Lisp is an ideal vehicle for designing such "embedded" languages.
This is in fact the way application development in Forth works. You start with the Forth language and then extend and modify the Forth language until the language is, essentially, your application. Those interactive languages (such as Lisp, Forth, Smalltalk, etc.) that let you create new defining words, control structures, and so on encourage this style of development, where the application domain being solved drives how the language is mutated. In contrast, programmers using non-extensible languages like C/C++ and such *are* using immutable languages. Development for them means translation of the application domain into the syntax of the language used. -- John Passaniti
Another useful source is the Lambda The Ultimate weblog.
Progopedia - encyclopedia of programming languages: progopedia.com
Programming Language Design
See original on c2.com