what will be the dominant tool for the next ten years?

There's a lot happening in programming languages in 2013. I believe we are approaching an inflection point that will see a major rotation in the tool of choice for service platforms. This post is a biased opinion piece detailing where I think things are headed.

"the end of the free lunch"

Herb Sutter summarized the ongoing implications of systems design trends for tools in his memorable posts the free lunch is over and welcome to the jungle. tl; dr - moore's law will not save us. But it did, for a while. In the 90s, we witnessed incredible, seemingly monthly upgrades in cpu capabilities, network capacity and storage technology. and our problems were still small - most of us were content to merely drive our stake into the internet and begin to build out basic services. Given small problems and fast systems, we defaulted to tools that excelled at producing working code quickly - namely the big dynamic/scripting languages of the 90s: perl,python,ruby and php. Of course all the databases were written in c so it wasn't a complete win for the dynamic languages, but they dominated the application stack.

At about the time intel introduced its "i" line of cpus (i{3,5,7}) it became clear that the curve was flattening and clock rates increases were topping out. More-cores was going to be the way forward. the dynamic languages had never been designed to exploit multicore - their syntax was lacking concurrency primitives, and they tended to rely on compiled native libraries to deliver performance-sensitive features. Meanwhile, our goals became much more ambitious and our userbases scaled into the tens of millions. tools started to fail.

our present situation

The only meaningful systems innovation in recent years has been the rise of ssd. CPU and network systems continue to evolve meaningfully but aren't providing fundamental enhancements as were common and expected in the 90s. And our problems continue to become more complex. the tools of the 90s are being squeezed out by diminishing returns in system performance, the reality of multicore, and the rapid increase in the complexity of the problems we are trying to solve...literally the end of "the free lunch"! Of course the dynamic language stacks won't completely vanish - there will always be legacy code, trivial problems, and the desire to prototype...but I suggest that these tools will no longer support the application stack in production.

requirements for a successful tool as of 2013

At a minimum, a viable tool must now support:

  1. strong static typing
  2. concurrency
  3. unicode
  4. separate compilation (including the ability to separate interface from implementation)

with the following as "nice to haves":

  1. "batteries included"
  2. community
  3. low cognitive overhead

If I were to name this category of tool, it would be the "high level systems language". meaning a tool that provides for a meaningful set of abstractions and features, but the ability to model systems in a way that tends to produce high-performance programs.

assessing some current contenders and a highly biased scoring

imho, the winners

the maybes

the losers

last update 2013-09-02