C/C++

In Praise of Benevolent Language Dictators

Writing new programming languages is a fun task, but dismally unsatisfying. The vast majority of languages that make it to a complete implementation are used primarily, if not exclusively, by their designers. If the designers are part of a company that hired them to write the language, then some cabal of employees or customers will compose the entire, quite-finite universe of users. Only the rare language breaks out into the Tiobe top 100 languages. And even among those victors, the greatest number will not ever enjoy usage above ¼ percent (as defined by Tiobe). Still, language creation is fun  a hotbed of interesting ideas  and is generally implemented by smart programmers who have a unique slant on the world.

The comparatively low rate of new language adoption is, in my view, not very different from the success rate of other software segments favored by many competing solutions: How many Web frameworks are there? Content management systems? Social networks?

The secret to language success is not easy to define and often relies more on luck than on quality of implementation. Luck being defined as the ability to tap into the zeitgeist and have the right product at the right time. Quality of implementation is typically not a decisive factor in achieving success. Many languages that are popular are no better than "good enough."

Quality of implementation, however, is critically important in the satisfaction enjoyed by users of the language. It is the experiential difference between writing Ruby and JavaScript. The factor that, in my view, most affects this quality of implementation is the vision of the original creator. Where the vision is maintained by a single individual, quality thrives. Where committees determine features, quality declines inexorably: Each new release saps vitality from the language even as it appears to remedy past faults or provide new, awaited capabilities.

It is hard to argue that C (and separately, C++) have become more vital since control of their design passed from the original creators to committees. Likewise, Java since it migrated from the original design group to the JCP process. Language extension by committee roll call tends to result in functional but not inspiring changes. So the language gets no new lease on life and simply lives inside its original skin getting progressively fatter, more complex, and dragged down by otiose features.

It's too easy to dismiss this process as the natural aging of all languages, but the success of the other model  the benevolent dictator  argues otherwise. Benevolent dictators make decisions about the language in consultation with the community of users. They are notable for being willing to extend the spirit of the language by making hard decisions that large committees almost always eschew. The best example of this is surely Guido van Rossum of Python fame. In 2008, after the language had become well established, Python 3, which was not backwards compatible with previous versions, was released. Over time, many of the features of the new release were back-ported to the old 2.x trunk. This invigoration of the language deepened the high esteem felt by Pythonistas for their language.

A similar benevolent dictatorship exists with C#. The language, as I have mentioned before, is remarkably well tended by a core group in Microsoft headed by Anders Hejlsberg. (Although there is an ECMA standard for C#, Microsoft is the reference implementation, and the company decides the new features.) The result is a language widely loved by its users (Miguel de Icaza: "It's a beautiful languages that is such a pleasure to program in") and admired by others. Lua, Ruby, D, and Perl are other successful instances of this model.

Fundamentally, a programming language is the product of a viewpoint on a specific problem domain. To keep the viewpoint sharp, rather than diffuse, the original vision has to be maintained, even if the implementation evolves. This is almost impossible for committees to do, as they are made up of members with differing agendas and a reluctance towards bold action.

As popular languages mature, they might be tempted to go the route of codification by committee. Codification is fine, but implementation of new features must remain the privilege of a benevolent dictator if the languages are to enjoy the continued love and trust of their users.

Dr. Dobb's encourages readers to engage in spirited, healthy debate, including taking us to task.
However, Dr. Dobb's moderates all comments posted to our site, and reserves the right to modify or remove any content that it determines to be derogatory, offensive, inflammatory, vulgar, irrelevant/off-topic, racist or obvious marketing or spam. Dr. Dobb's further reserves the right to disable the profile of any commenter participating in said activities.

Video

This month's Dr. Dobb's Journal

This month,
Dr. Dobb's Journal is devoted to mobile programming. We introduce you to Apple's new Swift programming language, discuss the perils of being the third-most-popular mobile platform, revisit SQLite on Android
, and much more!