I started programming in Java a few years after it was released. I had been doing C++ for a number of years and just come off a C++ project which failed because they (who were a pretty good team of programmers) couldn’t scale it because of the two common killers: Threads and Memory Management. Near the end I was reading James Gosling’s original paper on Java which addresses the major problems of C++ and explaining how Java addressed them. I was obviously quickly sold! As a result I spent over a decade programming in Java and J(2)EE, in the beginning implementing (mostly web) projects way faster than the “C++ laggards” could.
Now, I’ve been doing Solution and SOA Architecture, occasionally whipping up a prototype in Java, or doing some Perl but quite often working with WSDL, XSD’s and just plain models. Recently though, I’ve been playing around with Clojure in my own time and am amazed at how much fun it is. It really reminds me about my early experiences with Java, but that would be the subject of another blog post…
Recently it has struck me just how many languages have versions or been constructed to run on the Java JVM. A list from Wikipedia shows:
- Clojure, a functional Lisp dialect
- Processing, a visualization and animation language and framework based on Java with a Java-like syntax.
- Groovy, a scripting language
- Scala, an object-oriented and functional programming language
- Xtend, a statically-typed language sitting on top of Java
- Fantom, formerly known as Fan
- JavaFX Script, a scripting language targeting the Rich Internet Application domain (discontinued 2010)
- JRuby, an implementation of Ruby
- Jython, an implementation of Python
- Armed Bear Common Lisp, a full implementation of Common Lisp
That’s quite a few languages! What’s more, a number of them have plugins to an IDEs such as IntelliJ or more commonly eclipse. It struck me that these languages were effectively using Java and often IDE’s as a runtime / development platform, much like many high level languages used C.
Which begs the question – where is Java headed in the long-term? Yes, they’re adding Lamda’s in Java 8, but why would I want that when I can work with Clojure which has had this from the beginning and has a whole bunch of good extra stuff… Is it destined to become a “low level language and environment” upon which more sophisticated languages will be built?