Sunday, February 15, 2009

Do We Need a New Programming Language?

There is a plethora of new and emerging programming languages. Recently I have written about two: Scala and Groovy.

In many ways this era feels like the 1980's when we had a similar profusion of new programming languages. Then Niklaus Wirth seemed to come out with another new language every other year. Apart from those, there were plenty of other new languages to argue about. At the time, the language wars got so intense that most people retreated behind the shelter of a simple acronym. Their response was "JAFPL" (Just Another F-word Programming Language), where the F-word could be "Friendly" if you just wanted to dodge an excruciating time-wasting controversy.

In practice, Wirth's languages from the 80's along with many others have not survived. The reason is quite simple, these languages did not do anything more than other stronger languages of the time. Now we have the same situation. The new languages address the same problem space as better established languages. Why should we move to a new dynamic language like Groovy when we already have Perl, Python and Ruby? Likewise, is there anything of real value that Scala does that cannot already be done by Java?

In my opinion, there are two important issues in programming that current programming languages do not address well. They are:
  1. Concurrency
  2. Persistence
The popular programming languages handle concurrency with Threads which is an awful solution. I will rant another time about why Threads are so awful, but trust me they are awful, awful, awful and completely disastrously awful. Persistence is an area where we have a complete impedance mismatch between the programming languages and relational database persistence mechanism. There are all sorts of magic system that try to bridge the gap but they all have their own problems.

To breakout, the next big programming language needs to do something new, different and more than existing programming languages do. There are plenty of new problems to solve, concurrency and persistence seems like the most likely problem areas to address.

No comments: