Today is similar to the programming languages situation of twenty years ago.
When it comes to programming languages and programming technologies, I think we’re getting close to a point similar to that of twenty years ago. In 1987, many enterprise software systems were being written in languages like C, COBOL, and even PL/I at some shops. Some places were ahead of the curve, and were using Smalltalk.
Around that time, it became painfully obvious that we needed better technologies to allow for the larger and larger applications were we constructing. We had two schools of thought: 4GL programming languages, and object-oriented programming languages. While some of the 4GL technologies, like PowerBuilder, became widely used, in retrospect the OO languages were the real winners. We saw the rise of C++ in the late 1980s and early 1990s, the advent of Java in the mid-1990s, and the widespread usage of languages like Perl, Python and Ruby later on the 1990s and early 2000s.
But twenty years later, in 2007, we’re getting to the point where OO languages are reaching their limit. We’ve got new challenges on the horizon, namely the widespread usage of multicored systems. The most widely-used languages of today just don’t cope well with such systems. So we’ll need to look forwards to new languages, new technologies, and new techniques.
Again, we have two distinct camps when it comes to these new technologies. First we have the Web application folks. They’re the ones pushing JavaScript, AJAX, and so forth. Then we have those who suggest the use of functional programming languages like Common Lisp, Haskell, and Erlang, as well as the functional techniques they bring to the table.
My hope is that the functional programming folks win out. I’m thinking they might, as their technologies are better-prepared to handle the multicore systems that are even today becoming very prevalent. Even the simple concept of data immutability goes a long way when writing safe and efficient code for multicore or multiprocessor systems. It is my hope that we will soon see the day where even the average corporate developer is well-versed in the application of monads, lazy evaluation, and tail recursion.
One of the main benefits of the functional languages is that they’re built on a solid base of theory and mathematics. That just can’t be said about JavaScript, for instance. And it’s not a good idea to move into the future without the solid foundation that you can only really get from mathematics. Although it often isn’t the case in the world of computing, let us hope that most developers and managers will make the right call, and eschew JavaScript-based Web application development in favor of functional languages and techniques. It happened once before with the rise of OO, but it took a long time. I’m hoping it doesn’t take us as long to figure out the path we should be taking this time around.
September 24th, 2007 at 5:02 pm
A tangential point, but of all the mainstream languages today, Javascript is perhaps the most influenced by “a solid base of theory and mathematics”. Its functions are lexically nested, higher-order, and can be anonymous - IOW, Javascript “function” is a synonym for “lambda”.
Its object system is taken directly from academia, from the Self language.
That’s not to say that Javascript should be the language of choice for all future system development. Javascript was designed for a fairly specific purpose and wasn’t intended as a language for e.g. large-scale software engineering. However, from a theory and mathematics perspective, Javascript is on firmer ground than most languages. To quote from http://c2.com/cgi/wiki?SelfLanguage, “JavaScript is a very nice language that has been tainted by association with bad web code.”