A question has erected for me:
How do you people decide what language is better for what job when you know a few?
Good question that deserves a new thread imho.
Usually a language is good at the things it was initially designed for (unless the design is pretty bad, but in this case the language won't be good in other things as well). I am very interested in how languages where created, what the designers had in mind with it, what they tried to overcome, and how the language evolved over time. Sometimes a language also gets good in stuff, it wasn't made for.
But of course you have to look at the time it was created. Sometimes the initial purpose isn't valid anymore. Examples:
Perl was made for text processing.
Basic was made to teach programming.
FORTRAN was made to reduce costs in producing software. As it was the first high level language at all (everything was coded in assembly by then), that worked well. The real strengh it has up until now is performance, because the FORTRAN inventors had to convince the assembly programmers that a machine was able to write code, that is almost as fast as the human made code.
Next thing you can measure it are the usual applications this language is used for.
There are lots of games, game tutorials and game programming books written for C++.
There are lots of operating systems, interpreters and compilers written in C.
There are lots of libraries for web programming for JavaEE and they are used a lot for server side programming of business applications.
Haskell is most often used in universities and less in the world outside. The reasons for that show what it is good for: You can easily prove things written in Haskell, which is something that you need often when you do research for new algorithms etc. Implementing a formula is also pretty easy in Haskell compared to imperative languages.
Last but not least: Programming paradigms, the low or high-level ness and the typing discipline and the supported platforms of the common language implementation also tell what a language is good for.
Low level language: Good at writing drivers,good for system programming, good for every device thst has not much resources and where you need every tiny bit of performance
High level language: Faster and safer in producing software than low level ones
Functional programming: Good for parallel programming
...