Programming language evolution and selection

For non-web-based programming where performance is of paramount concern C and Fortran are the natural choice. However, they both suffer from a lack of features designed to simplify working with large codebases. C++ performance has improved dramatically to today, putting it not far behind C and Fortran, and it is more suitable for working with larger codebases. All three languages focus programmer effort on issues that were important when they were created, but that in more recent languages are automated in favour focusing effort on other issues. Java and C# shifted the focus further toward managing larger codebases and code reuse. They also began simplifying development of web-based systems and multi-threading. More recent languages like Scala take that focus further and recognise that changes in hardware and usage patterns require more focus on scalability and concurrency. This trend of automation to refocus programmer effort inevitably reduces performance, but that is compensated for by improvements in hardware performance. It seems that Scala or languages like it will soon supplant the currently ubiquitous Java and C#.

For web-based systems the server side is best implemented, depending on criteria, in Scala with Lift, or Ruby on Rails, or PHP. Scala syntax is concise, which can make the intent of code easier to see by reducing the statements that need to be read. Some say that cumulatively this improves working with large codebases. Its performance is fairly good and it is designed to scale well, so it is good for serving high demands. Its main problems are use of the less familiar functional programming style, although this is not mandated, and the latitude the language affords programmers making it less team friendly and more complex to look at. Importantly the Lift web application framework makes Scala web-friendly. There is an active community developing this language, so it will probably see some useful improvements. It runs on the JVM and a version of it runs on .Net. Unfortunately most low cost web-hosting companies will not support Java and .Net on their servers because they are too resource intensive. So my next choice is Ruby which is available on cheap web hosting. Like Lift for Scala, the Rails web application framework makes Ruby web-friendly. Ruby performance is competitive with languages that have similar objectives and has a nice clean syntax that should be easy to learn for anyone familiar with OO languages. It is popular among web developers looking for an alternative to PHP for managing medium sized and larger projects. It is good for light to moderate demand but is not as good as Scala for high demand. PHP is ubiquitous in web hosting, has slightly better performance than Ruby – especially for best cases – and is adequate for simple web form solutions. However, its style makes it less helpful for anything but simple projects and its lower performance makes it suboptimal for high demand scenarios. Python is popular in academic circles, but I see no compelling reason to recommend it. It has a marginal performance advantage over Ruby, especially in best and worst cases, but it is less commonly available. Perl is widely available, but slower than its competitors and suffers from the same unhelpful features as PHP.

Client side behavioural support for web-based systems on browsers is still dominated by ECMAScript (JavaScript/JScript). HTML5 and CSS3 have added a lot of features that are reducing some of the need to use ECMAScript and the browser makers seem keen to get their browsers compliant.

Client side support for web-based systems in applications is bifurcated. The popularity of Apple products means that Objective-C is widely used. However, the continuing rise of the Android OS by Google means that Java is the language of choice for most handheld devices. In theory, as Android has a JVM and Scala is JVM based it should be able to run Scala programmes.

I feel that the issues that will increasingly be of concern to language development are simplifying concurrency, and web-distributed processing as networks and internet connections have higher bandwidth, reduced latency, and become more reliable. Performance of a system will become less constrained by the device one is using and more limited by how much one is prepared to pay for the required processing. Inevitably, these trends will lead to new languages that address them.

Here is a performance comparison of the languages discussed above.