About every ten years, it seems, we're told that we're on the precipice of some revolutionary development in computing: The PC revolution. Ten years later, the networking and client/server revolution. Ten years on, the Internet revolution. Today, we're in the throes of the mobile and cloud revolutions. Authentic and important as these tides of change are, they do not greatly affect the way we approach programming. There, tides roll in more slowly. Object orientation in the 1990s, the subsequent rise of dynamic languages, and the emergence of parallel programming cover many of the important changes. (Arching over these is the magic dust of agile programming, which changed the coding experience by integrating tests and moving to a faster, leaner model.) And even these waves sweep over programming slowly note, for example, the snail's pace adoption of parallel programming.
The greatest effect these changes have had on software development is the requirement of multiple languages. Web apps, by definition, are multilanguage beasts. Many mobile apps require more than one language; and even if they can be written in one language, they often rely on a Web- or cloud-based back-end that's written in an entirely different language. And, of course, big data is written using all forms of specialized languages. We have had to become polyglots to develop almost any current application. As a result, when the research and analysis firm Forrester recently surveyed our readers about how much time they spend writing in any given language, the results (from 500 developers) looked like this:
Fraction of programmers (y-axis) who spend x amount of time coding in a given language in 2012.
If the previous chart looks unsurprising, consider how the responses looked when we asked the question in late 2010:
Fraction of programmers (y-axis) who spend x amount of time coding in a given language in 2010.
These charts are stunningly different when it comes to the right side. Two years ago, fully one-quarter of programmers wrote in just one language, and half wrote in only two languages. Today, such conservative use of languages looks like a luxury.
Even though these charts show only major languages, I believe a secondary development will reinforce the trend; namely, the use of embedded scripting languages. They have already become standard practice in game development, where Lua is frequently embedded for scripting UI components in C and C++ codebases. In Java, the proliferation of JSR-223 scripting engines that are callable from within Java applications foreshadows more of this activity on servers and desktops.
The movement from few to many languages has important ramifications. For example, it's now more difficult to find programmer talent that satisfies all the needs of a project; and it's more difficult as a programmer to be deeply fluent in all the necessary languages and idioms. These obstacles might suggest division of labor along the lines of programming languages (which likely reflect different concerns and separate components), but as the first chart shows, this is not happening. Rather, the traditional division of labor along domains appears to be the continuing norm. Because the trend is so new, it's hard to tell what the other repercussions of this shift are and will be. I'll cover them as they emerge. Meanwhile, all hail polyglots!