As every Java developer knows, Oracle bought Sun and the future of java looks quite unclear, specially since Oracle wants to monetize the JVM. Java as a language has also been stale in the last few years, the non-inclusion of closures is one example (which might be included in java 1.8)At the same time, some new technologies such as Ruby, Scala and Groovy are being used to deliver complex sites.I'm wondering if there are companies or organizations which are talking, doing spikes or starting to use a different technology, with the idea to stop using java for green field projects, in the same way that 15 years ago companies migrated form C++, perl and other technologies to Java. I'm also interested to know what are the impressions of this happening, for example: planning to migrate to a different technology in 2 years.To be clear, I'm not asking which technology is better. I'm asking if your organization is thinking to leave Java for another technology.
Is your company thinking of transitioning from java to another technology?
java;java ee
Not at all - in fact I'm investing heavily in Java as a platform at my company (a startup developing SaaS applications and tools for data mining).Here are the reasons:Picking Java as a platform doesn't mean you have to use Java as a language. We use Clojure as the primary application development language, occasionally dropping into Java where needed. But other JVM languages like Scala and Groovy are great as well.I'm personally not worried about Oracle. The main implementation of Java will almost certainly continue to be open source (OpenJDK) and freely available. If Oracle did anything stupid then other big companies (I'm thinking IBM and Google in particular) have too much invested in Java to let the get away with it, and they could easily continue to develop Java without Oracle's help.The JVM is a great execution environment. Cross platform, very high performance, extremely good optimizing JIT technology. It's close enough to native speed that I don't care about the fractional amount that it is slower than C/C++, and this overhead is more than compensated by proper garbage collection and a managed bytecode execution environment etc.Java has a great ecosystem of open source libraries. In fact, I'd say it is the best ecosystem overall of any language. This means that most of the heavy lifting in terms of infrastructure has already been done, to an extremely high quality. And the fact that most things you need are open source means you don't have the cost (in terms of both money and management time) of obtaining licenses.Eclipse is a great IDE and provides a fantastic toolchain for the development of robust enterprise applications. We use Maven, JUnit, Git/SVN integration and a host of other tools that are available as Eclipse plugins. It all just works.Finally, what are the other options? .NET is the only platform with comparable capabilities and I personally like C#, but it locks you into Microsoft technologies (worse than Oracle/IBM IMHO) and doesn't have the same breadth of open-source ecosystem. Fine for Microsoft shops, but not if you want to control your own technological destiny. And yes, Mono is cute, but I can't afford to bet my business on a platform that may or may not be able to maintain a working level of compatibility with the .NET mainstream.Then there are all the other great language that are very good at what they do (e.g. Ruby, Python, PHP, Javascript) but don't offer a compelling, comprehensive equivalent to the Java platform. The risk is that you have to start gluing a lot of things together in a slightly-less-than-beautiful architecture. Not a problem for building websites, quick and dirty apps, but less appealing for long term product development.C/C++ is great for systems programming and games, but just too complex / costly / inflexible for modern web application development. And then there are the beautiful languages that I love like Haskell, which are fantastic from an academic perspective but just don't have the industry adoption / ecosystem necessary to make them a credible platform choice. Also I can get most of the benefits of modern functional programming by running Clojure on the JVM.....So yes, it's a complex decision. But I made the Java decision above all other options after a lot of considerable research and consideration. I'd still make the same decision today.UPDATEA few words about the choice of Clojure on the JVM as a language choice. Main motivations for this were:Concurrency - Clojure has a unique concurrency story, well work watching this video that describes some of the core concepts. It can scale reliably to massively multi-core architectures by using Software Transactional Memory. And it manages to do this without much overhead (lock-free!) which is quite a remarkable feat of engineering.Functional programming - Clojure is a functional language that emphasizes immutability and higher order functions. It's not as purely functional as Haskell, but it is first and foremost an FP language. Some people say this helps you write better programs.Programmer productivity - Clojure gets all the productivity benefits of the Lisp code-is-data philosophy. In practice this means incredibly powerful macro capabilities, and simple but extremely flexibly syntax that you can use to define your own DSLs for any problem you are dealing with.Need for a dynamic language suitable for rapid development and scripting - Clojure can be used in a standard build-test-deploy cycle but it's actually more natural to use a REPL to develop interactively, modifying the running code environment as you go. For example, I use Incanter to be able to plot graphs and visualise data on the fly as I develop to see the results of batch runs.Java interoperability - Clojure's Java interop in very effective. Clojure objects are Java objects and vice-versa, so it is trivial to call Java APIs and libraries whenever you need them. This gives you all the benefits of the whole Java ecosystem of libraries and tools.Good community - Clojure's community is small but dynamic, friendly and growing fast. Lots of great open source projects already, such as Incanter (statistical computing) or Ring/Compojure (web server framework) or Counterclockwise (Eclipse IDE plugin)