As an established programmer (in VB and Java) I have recently turned my attention to Python (mainly because it is being plugged so frequently by the Agile group, at the moment). This set me to looking also at Perl (a write only language) and Ruby (can't see what it's unique selling point is). This week I've downloaded versions of Smalltalk (seems to be of acedemic and historic interest only, no proper free Windows implementation to evaluate, home site can't decide whether it is selling ($) or advocating the language) and Squeak (still too soon to come to an wildly arbitrary conclusion)... I seem to be turning into a language geek in my old age!
Naturally, each language's home page insists that its language is the best thing since 'sliced bread' (and no doubt that's a language, too) and that it is also the fastest growing language on the internet and that it is the perfect language for everything.
This got me to thinking. There must be plenty of web sites, run by real language geeks, that are a) up to date, and b) (relatively) language neutral; and describe different languages, their pros and cons, unique selling points, popularity (high, low, rising, falling, etc), who uses them (acedemics, hobbyists, contractors, students, etc). I'm not having much luck finding any, though.
Not quite what you asked for, but you might be interested in "An empirical comparison of C, C++, Java, Perl, Python, Rexx, and Tcl" by Lutz Prechelt. It is an academic study of the performance of these different languages on a single task. Haven't found anything else quite so formal or so comprehensive in its approach.
That's interesting for two of its ten conclusions, which are largely identical and can be paraphrased as: - Performance difference due to programmer variability is greater than that due to language variability.
That appears to confirm similar statements I've seen in several books recently.
My suggestion: Experiment with languages that are _really_ different in concept. Not only they are good for some applications, as you get lots of mental exercise and mind opening experience that will be very useful even when approaching problems with typical imperative languages.
Also, the usual suggestions: Java/C# - typical "modern" OO Smalltalk - good OO experience Python - modern scripting with OO and a bit of functional approach Perl - Good for text processing and as a good example of a language NOT to use on big projects C - yes C, its good to have an idea of low level junk. At least you'll love to appreciate higher level languages. And it gives you an idea of how things might work, eg, in memory management. It could be worse, I could be recommending assembler ;-)
Check also the interesting ideas of domain/problem specific languages. A productivity boost in most cases if you ask me. BTW, prolog is amazing for doing language processors for languages that *you* invent. A 10 fold productivity increase compared to any other language that I know (for this end).
My take is: use the best tool suited for the job and strive to be as declarative as possible.
I tend to live with: Java, Python, Prolog, Perl AND invented languages (usually processed by a Prolog program). I don't use caml that much because its not my strong point (and Prolog and Python tend to cover for it).