1. 6
  1. 4

    Very nice article. I think the last section, “Attack a Niche” is one of the most important important factors to programming language success, or to creating wide-spread solutions to problems in general whether it’s a code library, a service business, etc.

    Brief case study of successes:

    • Perl did a niche lightyears better than its competition – its niche was scripting Unix systems in the late 80’s and 90’s. Its competition was basically shell languages and Awk. It’s slooooooowly been eclipsed by Python, but it has taken a long time.
    • Go did a niche quite a bit better than its competition – its niche is writing backend web and RPC services in the 2010’s. Its competition was Perl, Python, Ruby, and PHP, which are all dynamically-typed languages with generally slower implementations, and things like ASP and JSP that are big chonker frameworks that are unappealing when you just need to do a few simple things. Go succeeded by being fast-by-default, and easy to get started with.
    • Rust is doing better than its competition – its niche is writing system-level things where control over time and memory can be critical. Its competition is C and C++, which are old-fashioned at best. But this is a niche where there did not seem to be much money to be had compared to others in the 90’s and 2000’s, and things like Java and C# and Go promised to be able to be good enough for most use cases. That still left all the other use cases really wanting something like Rust.

    Let’s also take a look at not-quite-successes:

    • Ruby spent the 2000’s fighting for a niche with Python, that of general-purpose duct-tape language. Python seems to have won, for whatever reason, but I personally think either language would fill the niche just fine. Ruby’s main success was with Rails, which was a different niche, competing with PHP and Python for web backend stuff. It seems to have lost its lead in that niche to Go, and Python and PHP still compete with it in that area.
    • Julia’s niche is scientific/numerical computation and exploration, a niche it also competes with Python for. However, numpy, scipy and pandas mean that Python can generally keep up with it, and so here the future has yet to be written. R is another language in this space, but its niche is more geared towards the statistician than general-purpose data-mangling. It’s easy to crunch a bunch of numbers and turn them into graphs with R, but less easy to set up a compute pipeline to download a bunch of images, reproject and transform them into a common format, run simulations on the data they contain, crunch those numbers in parallel on a cluster and email you when the job is done.
    • C#‘s niche was originally supposed to be Windows desktop applications. However that niche became less important over time, and and it apparently was never popular inside Microsoft itself for that purpose. Its other niche was supposed to be business logic and web backend stuff, where it competed mainly with Java, and occasionally with everything from C to Python. Against these it was always a tradeoff; C# had some advantages and some disadvantages. So it’s always remained a respectable jack-of-all-trades but undisputed master of none.

    Once a language has succeeded somewhere then it can branch out more, of course; it is not a binary process. Rust, Go, and Python are now used in many, many niches.

    1. 1

      If you use a popular language such as C, and a new networking protocol comes out, it is very likely that someone will create a library that “speaks” this protocol, and these days it’s quite possible that it will even be open source. On the other hand, if you are using an obscure language, you will have to write the support for this new protocol yourself, or hope someone in a more limited group will.

      This was a pretty sensible thing to say back in 2005 but it’s interesting to see how languages like Clojure, Elixir, and F# have shown to be counter-examples. There is a small nod to this in the “Compatibility” section but it uses C++ as its example, which … well, it’s not hard to understand why language developers don’t want to follow an example like that.