I only want to make the point that ProgrammingLanguages can and should be thought of as DevelopmentTools 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?
HaroldAbelson and GeraldSussman, in StructureAndInterpretationOfComputerPrograms, and PaulGraham, in OnLisp, 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. -- JohnPassaniti
A good overview over ProgrammingLanguages and concepts is http://wombat.doc.ic.ac.uk/foldoc/contents/programming.html
Another useful source is the LambdaTheUltimate weblog.
Progopedia - encyclopedia of programming languages: http://progopedia.com
Programming Language Design