I suppose I could have entitled this A General Model for Progress In Adoption of Popular Programming Languages. What happened was, I was composing a rant intended for use in an internal discussion of developer futures, and it dawned on me that there’s a repeating pattern in the waves of programming languages that manage to succeed in finding broad usage.

The Procedural Wave · Once we staggered out of the Assembler swamps, there were FORTRAN, COBOL, and PL/1. They were all popular but all deeply flawed. Eventually C, with approximately similar capabilities but a much cleaner and better design, came to be the dominant player at that level.

The O-O Wave · The next big step up the ladder was the adoption of Object-Orientation, notably as popularized by C++. Once again, it became popular but its flaws were pretty in-your-face. Java has become dominant in this sector, largely due to superior language design.

The Higher-level Wave · Somewhat but not completely in parallel has been the rise of what I’ll call Higher-level languages. These grew out of scripting roots, but quickly became high-performance general-purpose tools; the genre was established by Perl.

These languages are distinguished by terseness and the use of built-in convenience features for things like regular expressions and content-addressable storage. For new development, Perl is being crowded out by languages with similar capabilities but better design, notably Python and Ruby.

Legacy and Energy · Of course, a programming language, once it’s become mainstream, almost never dies away. There’s lots of FORTRAN and COBOL being written to this day; also C and C++ and Java and Perl.

But I think it’s fair to say that the new-development energy moved from those other languages to C, then up-hill to C++ and then over to Java, and now I that energy shifting rapidly in the direction of Higher-level languages.

You could draw a picture:

Programming-language Waves
Higher-LevelPerl, TCLPython, Ruby

What I’m Ignoring · Lisp, Prolog, Ada, Smalltalk, ML, OCaml, Haskell, yadda yadda yadda. Yes, I know these have all been put to good use. But I’m trying to restrict the mainline discussion to things that are routinely and unsurprisingly used in boring commercial shops.

I suppose you could imagine another line in the graph if you step outside of languages per se into Web frameworks:

Web-CentricWebObjects, ColdFusion, ASP.Net, Struts, etc., etc., etc., PHPRails

Half-Tables · Of course, the fun tables are the ones where the right half isn’t filled in yet. For example:


I suppose ECMAScript is the obvious candidate to replace the question mark. Now here’s the one that really interests me:


What would be nice would be if both those question marks were replaced by the same name; especially if it were one of the ones already listed above.


Comment feed for ongoing:Comments feed

From: David Megginson (Oct 22 2007, at 06:06)

I'd put PHP with the higher-level languages like Perl, TCL, Python, and Ruby, not with the web frameworks. I know that Zend calls PHP a "framework" sometimes in marketing literature, but PHP has its own web frameworks (Smarty, Cake, etc.) just like the other higher-level languages.

Do you really see Ruby and Python being used much for boring corporate work? When I do system reviews/audits, I see a lot of C, C++, Java, and perl, as well as some of the MS .net stuff and some older IBM mainframe scripting languages. PHP shows up for web front-ends only (never on the back end or middleware), and then, only rarely -- big companies prefer Java or MS, and there's still a surprising amount of perl CGI stuff. I don't think I've ever stumbled a single line of Python or Ruby (or TCL) in the wild in the corporate world.


From: Ben Hutchings (Oct 22 2007, at 06:06)

C is based far more on ALGOL than on FORTRAN or COBOL. And PL/1 is, as I understand it, derived from all those three big languages (and postdates them by some way).

And while C++ is a big (too big) language, Java seems rather too small to me to be considered less flawed.


From: Kevin H (Oct 22 2007, at 10:27)

> I’m trying to restrict the mainline discussion to things that are routinely and unsurprisingly used in boring commercial shops.

Strange that Visual Basic and C# are overlooked, then.


I'm not sure I can agree with PHP being sidelined into the "afterthought" section, by the way. PHP has a strong relationship with Perl, as it replaced mod_perl as the dominant apache module several years ago. Python and Ruby are still a long way away from overtaking it.


From: James Justin Harrell (Oct 22 2007, at 11:08)

ECMAScript is just another name for JavaScript (although the concept of programming language vs. implementation is a bit screwy sometimes).

The fourth edition of ECMAScript, a.k.a. JavaScript 2.0, will add all kinds of things like classes and static typing, but they're still (mostly) the same language.


From: Pierre Phaneuf (Oct 22 2007, at 11:26)

Ok, I *really* don't mean to start a language war, but putting Java as a successor to C++ isn't really going to cut it. Java isn't half the systems programming language C++ is (come on, no pointers!)!

C++ is really meant (as the name would indicate) as a successor to C itself, but I'll agree that calling it more polished might be quite the stretch... Strictly speaking, it's a more capable language than C (just about anything you can do in C, you can do in C++, and quite possibly simpler), but I think C++ is stretched too thin when it's used for more generic application programming. When you're there, Java and C# rule the day, no doubt about it.

I'm pretty annoyed at Python, Ruby and JavaScript for ALL having crummy lexical scoping, something Perl5 has got just fine. Otherwise, I'd say Ruby and JavaScript are pretty sweet.


From: Austin King (Oct 22 2007, at 11:29)

Mobile Code:

Flawed founders:

VBScript, JScript, browser specific JavaScript, Java Applets

Successor ECMAScript

It's possible that an entirely new mobile code format will arrive, but it is highly unlikely. Instead an evolution of the current "polished successor" will grow into ECMAScript Edition 4 and remain the dominant mobile code format.


From: CB (Oct 22 2007, at 11:53)

What languages do Ericsson already use in their mobile base stations? Java and C++. Erlang message passing is not the right solution enough for really concurrent apps. And the equivalent of Moore's law goes the opposite way for the number of processors. The more processors you have, the more your inefficient concurrent code becomes the bottleneck. So while Scala actors are nice, I don't think they will propel it to being a popular language for concurrency. It could overtake Erlang for the title of obscure hyped language though.

I think ECMAScript 2 will be a disaster. I favour static typing, but it is completely out of place in Javascript and most likely will be ignored. Layering complexity on a simple but flawed language will get you something like C++. People need to learn how to write it properly (e.g. more functional style). What we also need is a working security model, not a new language.


From: Rafael de F. Ferreira (Oct 22 2007, at 15:50)

I think it would be interesting to see a historical chart of the number of computer programmers as a backdrop for this kind of analysis. I suspect that market dynamics could be very different when the world had thousands of programmers from the current millions.

My hypothesis is that a larger "job market" allows for self-sustaining niches. Joel Spolsky's Five Worlds article (http://www.joelonsoftware.com/articles/FiveWorlds.html) illustrates this to a certain degree. If that is true then the idea of *mainstream* languages or tools can become a little weaker.


From: M. David Peterson (Oct 22 2007, at 20:36)

I'm with Kevin H.,

>> Strange that Visual Basic and C# are overlooked, then.

I can accept the fact that you chose to use Java instead of C#, but even Linus Torvalds has gone as far as stating Visual Basic has done more for programming than OO languages have,

@ http://www.codinghorror.com/blog/archives/000648.html

"For example, I personally believe that Visual Basic did more for programming than Object-Oriented Languages did. Yet people laugh at VB and say it’s a bad language, and they’ve been talking about OO languages for decades.

And no, Visual Basic wasn’t a great language, but I think the easy database interfaces in VB were fundamentally more important than object orientation is, for example."


From: Ali (Oct 22 2007, at 22:20)

I'm not the biggest fan of VB, but I agree with the commenters that it is (was?) very important. Still, I don't think it falls into any of Tim's categories very neatly. It really should be under something like RAD / GUI builder / Component based development.


From: robert (Oct 23 2007, at 09:14)

> But I’m trying to restrict the mainline discussion to things that are routinely and unsurprisingly used in boring commercial shops.

If so... Well, then you missed out the Elephant in the Room: the 4GL. Progress, UNIFACE, etc. emerged in the mid 80's (give or take a year) and continued strongly until Windoze finally took over (late 90's, call it).

The productivity one got from a unix (pre-linux, natch) database tied by RS-232 @14.4 to a VT-220 in character mode using one of these languages was/is awesome. Not been matched since. Although, the emergence of Framework Oriented Programming is a GUI attempt at this.

One need remember the prime directive of moving up the language trail: more syntax, each piece of which compiles down to increasing numbers of machine instructions. Thus, a High Level language might have 100 times the number of syntax elements as a Low Level language. C, IIRC, has 20 operators.

And in those boring commercial shops, it's almost always about transactional data; thus the database/4GL. The wars among the java partisans about which of the current Frameworks is *best* are amusing.


From: Pierre Phaneuf (Oct 23 2007, at 11:58)

A quick correction to what Kevin H said: mod_perl appeared after mod_php, not before. I don't think mod_perl ever was a "dominant Apache module". Perl CGI scripts were, but mod_perl was, ironically enough, way too powerful, and couldn't be used in an hosting environment safely, which pretty much killed it.


From: Robert Sayre (Oct 25 2007, at 00:37)

Hmm, not sure I would make Mobile-Code and Concurrent into separate categories.


From: Preston L. Bannister (Oct 27 2007, at 23:24)

Better to tag Lisp rather than Perl as "establishing" scripting languages. Using Lisp you could craft a domain-specific scripting language with ease. AutoCAD and Emacs are early and well-known examples (and there are surely many others).

As to the Javascript successor, the radical difference is mainly in usage. Almost all early examples of Javascript programming are crude attempts to write script as though it were a Java-like language. Of late increasing numbers of folk are making better use of the prototype-oriented and dynamic nature of Javascript. The difference in the programs written is dramatic.


author · Dad · software · colophon · rights
picture of the day
October 21, 2007
· Technology (77 fragments)
· · Coding (98 more)
· · Dynamic Languages (45 more)
· · Software (53 more)

By .

I am an employee
of Amazon.com, but
the opinions expressed here
are my own, and no other party
necessarily agrees with them.

A full disclosure of my
professional interests is
on the author page.