A thesis about language niches

August 17, 2007

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:

  1. low level, with strong control over what happens when you do things; such a language is above all predictable by default: C, C++
  2. loose control (with features such as garbage collection), but statically and strongly typed for compile-time assurance: Java, C#
  3. 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).

(In light of this, Google's decision to restrict production software to C++, Java, Python, and JavaScript looks less crazy, since they have effectively picked one language for each niche.)


Comments on this page:

From 86.121.194.201 at 2007-08-20 12:39:04:

Interesting.

Why do you consider Python suitable only for small-scale systems?

Do you consider an air ticket reservation system small scale? http://www.eweek.com/article2/0,1895,2100629,00.asp

From 76.102.131.84 at 2007-08-20 14:59:28:

Had the article been written in 1997, you would have probably said that only C and C++ are worthwhile niches, and maybe Java "because Sun has given it traction."

Computing environments change. Everyone's looking for better parallelism now; when that happens we'll see a new set of languages.

By cks at 2007-08-20 16:41:12:

The stereotypes are not necessarily my views; they are representative of the general things I hear. One of those is that there are still a lot of people who feel that dynamically typed languages will or do not scale to large systems, and that large systems need various sorts of static (compile-time) assurance. This may or may not be true, but given that it is perceptions that drive language choices I think that for the immediate future there is going to be a large niche for loose statically assured languages, precisely because there is a large enough group of people who want such languages to build their big systems (and to enable 'reliable' IDE based refactoring and so on).

Parallelism is another topic, and I am not sure that it is going to play out the way that the CPU vendors would like it to. If it does, I think that we will wind up with better primitives than threading, whether this is through new languages or extensions on existing ones.

From 64.128.222.7 at 2007-08-21 10:55:47:

I sort of secretly hope that functional programming languages become the next big thing, not because I actually know how to use them (I'm just starting to learn Erlang), but because from what I've read they are really well-suited for the multi-core and high-concurrency world we are going to see in the near future.

This is, however, pretty unlikely. I can foresee them getting a big 'market share' in terms of their popularity among developers, but the big enterprises are going to want to cling to their C++ / Java / .NET codebase and expertise as much as possible, and try as hard as possible to use some sort of new threading paradigm that makes it easier to use.

I also think your definition of 'niche' is a little too broad. My understanding of programming niches pertain more to how they are used rather than how they are structured. Thus, niches are a little different:

*Blazing fast systems / games : C/C++ *"Enterprisey" systems / webapps / mobile applications : Java *Web 2.0 / Whizbang Apps : Ruby *'Glue' code / hybrid code using C/C++ libs for heavy lifting : Python *Web 1.0 / HTML and/or text processing : Perl and PHP

Written on 17 August 2007.
« How not to set up your DNS (part 17)
Weekly spam summary on August 18th, 2007 »

Page tools: View Source, View Normal.
Search:
Login: Password:

Last modified: Fri Aug 17 23:09:47 2007
This dinky wiki is brought to you by the Insane Hackers Guild, Python sub-branch.