Programming language popularity is a fascination of mine and has been since (at least) I joined “Computer Language” magazine “back in the day.” Note that this is a different fascination than programming language capability, which goes all the way back to the time I read my Dad’s copy of “Computer Lib/Dream Machines” because it had pictures.
My recent article on C#’s popularity on the CLR has brought some good commentary here and elsewhere, but one perspective really rankles. This is the dismissal of the popularity of the C language family as resulting from ignorance. Every programmer in the world knows that there are languages whose advocates claim significant productivity benefits over the C family. Yet in the past decade, we’ve seen two languages, Java and C#, come into existence and become very popular. Dismissing those millions of choices as “ignorant” is willfully … uh … not greatly insightful.
Bill Mill, a commentor who felt forced to move from VB to C#, says in email:
My most important point in C#’s favor was actually my third one: the third parties we work with want to use C#. They’ll use VB, but at higher cost, and they keep trying to push us to C# anyway. Why fight them when C# a) seems to be the only real first-class citizen of the CLR and b) has the most resources for learning?
Basically, VB.Net is enough of a new language for us that it’s not worth it to push against the grain to use it over C# – easier just to learn a (different) new language.
The centrality of network effects / peer pressure is the “stumbling into” argument made insightful. Historical contingency gave C an edge and resulted in a world where communication of programming pragmatics favors the forms in the C family. Okay, maybe.
But the implication is that language designers ought to create variations on C’s syntax. By this logic, a C-like LISP (Lots of Irritating Superfluous Curly Brackets?), a C-like Smalltalk, a C-like Ruby, etc. would succeed more than their current designs.
Now, I’m highly skeptical of that conclusion, but I think it follows from the premise, doesn’t it?
To anticipate at least one objection, there’s an argument about syntax complexity: at some point, the mainstream throws up its hands at the complexity that needs to be added to the C language family in order to achieve mainstream goals and turns to languages whose syntax can be described in a very concise manner. You can point to the crest of C++ popularity and the rise of Java and C# as, perhaps, a minor earthquake of this sort.
But then the question becomes, Is a Big One possible? Is a wholesale shift of the mainstream away from C-derived syntax going to happen? To me, the answer is undoubtedly “yes.” It’s only a question of how long the pressure will build and then what the trigger will be: a tool, a particular type of application, a new abstraction, a hardware shift? (I also don’t think that a “collapse” to a very concise syntax is necessarily inevitable or even likely. Look at the rise of C++: the coexistence of paradigms was more important than syntactical elegance)
I believe that the manycore era may well be a “window” in which there is an opportunity for a major shift in programming sensibilities (oh, what the heck, “paradigms”).