A thesis about language niches
Here's a thesis: in the current environment, there are three significant ecological niches for general purpose languages. They can be expressed as combinations of features:
- low level, with strong control over what happens when you do things; such a language is above all predictable by default: C, C++
- loose control (with features such as garbage collection), but statically and strongly typed for compile-time assurance: Java, C#
- loose control and dynamically typed: Python, Ruby
(There is no 'strong control plus dynamic typing' niche partly because the two concepts more or less clash.)
To stereotype, the first niche is for low-level components, the second niche is for large systems, and the third niche is for rapid, flexible development of smaller systems.
I believe that there is only room for one or two really successful language in each niche, and also that only the loose plus dynamic niche is still open and being fought over; by now C is effectively an appendage of C++, and only Microsoft's power is getting C# traction against Java.
(This may be an unnecessarily non-Microsoft viewpoint, but that is the world I live in.)
One of the implications is that I am dubious about the chances of Haskell and other Functional Programming languages becoming the next big thing. All of them are attacking the loose plus static niche, where Java strikes me as very solidly established by now, which means they would have to offer really compelling benefits (especially because they lack many of the pragmatic benefits that Java has).