A universal language? No, thank you
I’m increasingly convinced that you can’t design one universal language for every programming domain and target environment and expect it to succeed. Java has been through a long development process, and I’m comfortable calling it mature. I’ve been saying for a long time that trying to extend it will ultimately do more harm than good, through loss of backward compatibility and greater complexity. Two things drive the effort. One is the desire to keep up with the times. The other is a stubborn determination to make Java a universal, multipurpose language.
Let’s assume for a moment that Java becomes multipurpose. We’ll use it for mobile applications, server or desktop software, and front ends for rich internet applications. Wait. We already do. Java isn’t the best fit everywhere. It has limits built into its design from its early days. Look around and you’ll find languages that are at least more agile in a given area and better meet developers’ needs. What should we do with ours? We can keep bending it to changing fashions and needs, risking a strange patchwork, or let go of the idea of a universal language.
A multipurpose language is a tempting idea, but whether it can be realized is very much in doubt. I don’t believe it can work in practice. I’m more drawn to the idea of several languages integrated at the level of a virtual machine or platform such as Java or .NET. If I’m writing code that needs to run efficiently in parallel, I’m likely to choose a language designed for that from the start, such as Erlang. The same goes for other domains. Pick a language for the purpose it was designed for. The payoff is higher productivity and more efficient development. The idea of using the right language for the job is also behind the growing trend toward domain-specific languages (DSLs).
A multilingual approach brings pitfalls that go all the way back to Babylon. We need to keep the proverbial confusion of tongues in mind. Instead of mastering a single universal language, you suddenly need several. Your managers are likely to raise this objection, and it’s worth taking seriously. That’s why the level of integration matters. The virtual machine is a great place for it because it lets you combine languages on a proven foundation. The operating principles stay sound. The icing on the cake is when the languages are similar or related, as Java and Groovy are.
Related articles
Related CZ Podcast episodes
- #261 · Leadership
On leading people and teams. · Czech audio
- #3 · Java 6 SE, Vývoj webových aplikací
Dagi and Filemon discuss Java 6 and web application frameworks. · Czech audio
- #1 · Vývojová prostředí v Javě
The first CZ Podcast episode looks at Java development environments. · Czech audio