Wednesday 3 January 2018

Big Releases and Handovers in the JVM World

Happy New Year everyone! Hard to believe it's already 2018, and I'm already 4 months into my ThoughtWorks journey. As they say, time flies...

Anyway, the second half of 2017 saw several news I felt quite excited about in the JVM space:

August: Ceylon handed over to the Eclipse Foundation

The Ceylon programming language has intrigued me ever since I came across it several years ago: Compile-time nullsafe programming, union types, functions as first-class citizens, a thought-through module system, can be compiled for the JVM as well as different JavaScript runtimes and (for a little over a year now) native Android. It targets pretty much the same "demographic" as JetBrains' better known Kotlin. I'm hoping that this handover will help resolve what in my mind has been Ceylon's biggest issue over the years - the lack of marketing. Until this day, I cannot understand why RedHat have never given it a real commercial push.
Currently, the Ceylon community is mostly busy with reworking the codebase so that it aligns with the foundation's guidelines, but I'm looking forward to the opportunities that will arise once this phase is completed.

September: JUnit 5 officially released

I've been using the various JUnit 5 milestone releases in my projects for over a year now, and I must say I'm very happy. A revamped extension model, finally the use of Java 8's language features including the very intriguing Dynamic Test concept. If you've ever worked with JUnit's Theories: It's the same idea, but employing the full power of the JDK (and with the new extension model, you don't need to limit your test to a single runner anymore). I've used it with Maven and with Gradle, it works flawlessly. Also, Hamcrest matchers are no longer included in the standard JUnit library, acknowledging the fact that there are alternatives e.g. AssertJ (which is prominently featured in ThoughtWorks' latest Technology Radar) out there. The project has learned its lessons.
Oh, and did I mention? If you (rightfully) feel rewriting your existing tests in Java 5 style is a lot of work, you can leave them as they are - or apply some tooling help: My IDE of choice (Intellij IDEA) offers a refactoring/code inspection that will help with "simple" tests. There is also a Java-based tool on GitHub which I haven't tested myself.

September: Oracle to transfer ownership of Java EE to the Eclipse Foundation

Others must have suspected this much earlier, but I've got to admit that these news struck me out of nowhere. My beloved Java EE platform will be handed over to the Eclipse Foundation which rebrands it as Eclipse Enterprise for Java (EE4J). There has been increasing criticism of the platform in recent years: Too bulky, not enough innovation (or velocity in the same), not fit for the cloud etc. While I consider some of the arguments exaggerated, they're not totally off. There are reasons for things like the MicroProfile to emerge - which is (probably not at all coincidentally) run by the Eclipse Foundation as well. Having both of these under the same governance will hopefully benefit us guys in the trenches.

September: JDK 9 officially released

Only a year late compared to the original announcement. Well, at least we've finally got modularity that people have been talking about since IIRC Java 6 days. In fact, it's such an intriguing concept that there's actually a book only devoted to this topic. But there's more:
  • The JShell is a long overdue REPL tool which allows developers to quickly test code snippets without having to write a class wrapper. This will enable us dinosaurs to play around with statements and unfamiliar APIs much in a similar way to what JavaScript developers have been doing in the browser console for years.
  • The Collections API receives methods in the style of List.of("A", "B", "C") for creating immutable Lists/Sets/Maps/... on the fly. Until now, we had to rely on Google's Guava library for this feature.
  • I registered some excitement about the new Process API. Although I see no personal benefit on the horizon, I can imagine certain projects that will happily welcome these new capabilities.
  • The Javadoc tool can now generate HTML5 code. Starting with the next major version, this will be default behaviour.
These features are only the ones that I myself found particularly interesting. I know there's stuff "under the hood" (e.g. GC changes) and I'm also aware of the supposedly improved JavaScript support. However, I can't comment on either of these due to my lack of practical knowledge.
Compared to the Java 8 release, I feel a lot less excited. Nevertheless, it's great news that this release has been completed.

December: Effective Java, 3rd Edition published

I had been wondering about this since the Java 8 release: Will Josh Bloch go back to his invaluable piece of work one more time and incorporate the new features? Well, he did. Not only that, he even added Java 9 specific items. I haven't bought the new edition yet, but I will very likely do so pretty soon. Bloch's book should be standard material for any half-way serious Java developer. I remember reading the 2nd edition years back and experiencing quite a few "Aha" moments, and I'm expecting the same from this much-awaited update. Like only very few developer books, this is actually a good "read-only" piece - read the item and remember it when necessary. I found for myself that I didn't need to type the code examples in order to understand them.

That's all for this time. I'm wishing everyone a great start into 2018. May it be at least as good as (if not better than) 2017 for all of you!