Programming Language Lifecycle

Programming languages emerge, thrive and then wilt.

This in an incomplete essay that’s being published to attract early feedback. Perhaps send me an email if you would like to provide a comment?

Emergence

Someone introduces a new programming language to the world. They’re unsatisfied with the status quo and believe that they owe it to the world–or at least themselves–to try to do better.

The book, Masterminds of Programming, is largely an edited transcription from interviews with 27 programming language designers, who were creators or formative figures of 17 languages. It’s really interesting to read some of their views. The dissatisfaction is palpable.

Tom Love, one of the creators of Objective-C:

We weren’t completely happy with any of the choices available in those days.

[…]

Brad basically said, “I think most of the capabilities that they’re talking about in Smalltalk I could figure out how to add to C.”

Bertrand Meyer, the creator of Effel, describes why he created his language:

Eiffel was born out of necessity. I designed a programming language because I needed to write software and everything I had was unsatisfactory.

Bjarne Stroustrup’s initial thoughts on C++ are similar:

No language that could do both existed in 1979, or I would have used it. I didn’t particularly want to design a programming language; I just wanted to help solve a few programs.

(Aside: Bertrand Meyer has recently made his own book. Introduction to the Theory of Programming Languages freely available for download from his website.)

At some point, the language is released. Larry Wall describes this tendency of programmers to believe that they can do better as hubris. Perhaps another view is willful ignorance.

The people attracted to the community are excited. They’re necessarily contrarian. They believe in the ideals of the language. Adopting a novel programming language is a process of curiosity and/or protest. The largest thing written in the language is the compiler.

Growth

There’s a wonderful phase of growth. Everyone knows each other. Everything is fresh. There is no legacy code. People talk about the potential. And yet, for most languages, there is no adoption.

Programming language ecosystems are social systems. While the compiler or interpreter works, you need to convince people to try it out. And perhaps more importantly, you need to convince people to help out.

There are packages to create, tutorials to write, and talks to give. Someone needs to maintain the package manager–your language does have package manager, right? Essentially, during this phase, things start to get boring.

Stability

At some point, stability becomes a feature and change becomes risky. Important programs are written in the language. The people who were attracted to the language because it was novel and interesting begin to leave.

Python was able to push through this. I believe that the Python 2 to Python 3 transition was (eventually) sucessful because Python (accidentially) attracted a new set of people—data scientists using pandas and interactive web notebooks—who were not interested in retaining backwards compatibility.

Perl could not bridge this gap. The gap between Perl 5 and Perl 6 was too vast. The people who programmed it Perl 5 wanted to program in Perl 5. There was no new tranche of fresh programmers who could embrace and

Death

In some sense, programming languages cannot die. Even if you are the last remaining SNOBOL4 programmer, the programs that have already been written will linger. As a form of written communication, software often outlives us.

And yet, they do die. This starts as soon as the number of programmers departing the community exceed the numbers of people joining. To avoid this, always foster a welcoming tone.

Projects started in the language are risky.


Photo by Raelle Gann-Owens on Unsplash, digitally altered to reduce footprint using Dither Me This.