Warning: serious programming geekery ahead.
With the release of Java 8 back in March 2014, the developer community was primarily excited about two things. One was support for lambda expressions, also known as anonymous functions, which (in Cay Horstmann’s admirably simple definition) are blocks of code you can pass around in a program for later execution—or, if you prefer more formal terms, “a way to represent one method interface using an expression.” Second was Java 8’s embrace of the multicore world.
Functional programmers viewed the new directions that Oracle was steering Java 8 as a strong validation of core principles in languages like Scala, Erlang and Haskell. Detractors suggested the new directions of Java 8 were potentially a threat to supplant those languages. (I covered the implications of Java 8 for other languages back in February).
Six months after the release of Java 8, San Francisco-based Typesafe—the commercial backers of Scala, Play Framework, and Akka—has released a follow-up survey of Java developers. A hefty sample size of 3,000 Java developers not only updates our data on Java 8 adoption, it highlights other trends driving enterprise application development today.
ReadWrite: So tell us where Java developers are with Java 8 and what the survey data suggests.
Jonas Bonér: In our original Java 8 adoption survey six months ago, we found that two thirds of Java developers planned to upgrade within two years, which is really aggressive. So we were surprised to learn with this new survey that two-thirds now have actually already upgraded or plan to upgrade within a year—the adopters are six months ahead of what was already a fast pace.
When you think about how much Java is running in production, you just don’t expect to see this much of the market move that quickly.
Of the excitement around Java 8 for those who have adopted it already, lambdas continue to be at the top of their list of things they’re enjoying. Eighty percent called “lambdas with expressions and virtual extension models” the feature they cared about the most. With Java 8’s support of lambda expressions, type inference, syntactic sugar for static methods, and new APIs like Stream and CompletableFuture, Oracle has basically taken 9 million Java developers back to the future with a renaissance around functional programming.
The Lambda Lies Down On Broadway
RW: Why the major interest in lambdas?
JB: Well, first it simplifies traditional callback-driven programming by adding syntactic sugar on top of anonymous classes. Lots of Java APIs are making use of this callback style and all of these libraries will be able to make direct use of lambdas, enabling its users to write more fluent and less verbose code.
This is great, but the biggest benefit in my opinion is that it enables a functional style of programming, which has a lot of advantages, but primarily delivers more succinct and expressive code that is easier to compose and reuse. But perhaps most importantly, code that allows you to work with state, safely, in a concurrent environment.
In the single-threaded world of the 80s and 90s, dealing with state in applications was a lot easier. But, as we all know, the multicore world of distributed computing today has opened up a Pandora’s box and made it much harder for Java developers to shoehorn all of this state into a perceived reality of running in a single core.
Technically it is possible, through mutexes and other blocking primitives, but it just doesn’t scale.
In Java the default is mutable state, but a functional approach to programming—which can be simplified as composition of functions operating on immutable state—can make the design of concurrent and asynchronous (event-driven) applications so much easier, allowing us to take full advantage of all the exciting new multicore hardware on the market.
Examples of this include the JDK itself with its Stream and CompletableFuture libraries. Event-driven programming also opens up for a more loosely coupled architecture, with isolated components communicating in a non-blocking fashion, and forms the basis for the principles defined in the Reactive Manifesto.
RW: What about those that do not have plans to upgrade, what’s the holdup?
JB: Of Java 8 holdouts, 69% are running Java 7, and 26% are running Java 6. For the majority of the Java 8 holdouts, their decision has nothing to do with Java 8 and more to do with how their businesses operate. Among those shying away from Java 8, 37% said their non-adoption was related to “hurdles with legacy infrastructure” and 19% said “organizational obstacles/red tape.”
However, it would be a mistake to call organizations that don’t upgrade to the latest versions of software “laggards.” Sometimes I think that analysis of market adoption of new versions overlooks the legacy infrastructure and existing libraries that organizations have to upgrade—where the cost of upgrading may not make financial sense, and it has nothing to do with the merits of the new version itself.
Java’s footprint in production is so massive, there are just a lot of moving parts at most enterprises when thinking about upgrading a language that touches so much of its infrastructure.
Apache Spark Is On The Move; Docker, Not So Much
RW: You polled those 3,000 Java developers on their use of other technologies. Given the large sample size, I’d be interested to hear about other surprise findings that came up.
JB: Amazon EC2 is used by more than half of respondents (57%), making it the most common cloud technology used by Java developers. Apache Hadoop ranked second in popularity at 30% and Big Data newcomer Apache Spark is being used in production by 17% of respondents.
Given that Spark was only introduced to the market in June of 2013, we think that’s really an incredible production usage statistic, and a sign of just how much mindshare Spark is capturing in the Big Data world.
One of the head scratchers was around Linux containers, where the data didn’t really line up. While 60% of respondents claimed to be investigating Linux containers, and 23% said they use Docker, only 13% said they are actually using Linux containers in production.
There were really no surprises where application server adoption was concerned. The latest findings confirm that adoption of lightweight, open source Java Web servers like Tomcat and Jetty are far and away more popular than traditional heavyweight JEE application servers like WebLogic or WebSphere, which are nearly tied in popularity.
I was also surprised about the Internet of Things adoption: 21% claimed to be running networked devices/M2M/IoT in production, with 22% “planning for future deployments.” That’s way out ahead of the IoT adoption curve for the rest of the industry.
Lead photo courtesy of Shutterstock