Java was designed to support 80s style OOP. While many mainstream languages do the same, it isn't particularly modern. I haven't followed Java's evolution in the recent years but as I recall it is the last language to adopt anything new.
> Lambdas, Streams… Java is far from "80s style OOP" today.
Streams are a library feature. At a cursory look Boost seems to have had something similar since 2003: range adaptors[0].
Moreover lambdas have existed since 70s. They are modern only in the sense that Java got them in 2016 or so.
> It steals the best from the more avant-garde languages and builds it in coherently. That's no small task, so it takes few years.
That's a nice way to say that it gets new features only when they are undeniably useful.
> Therefore I wouldn't call Java "cutting-edge", but "modern" easily.
If Java is modern, C++ is cutting edge. It got the syntactic sugar for lambdas in 2011 - five years before Java.
However I may have put too much weight on "modern" in the question title. The demand for Java coders is going to be higher than the supply not unlike COBOL.
If you can live with its limitations, you can make a living maintaining Java codebases for decades to come.
I wouldn't say it's lacking modern features; Java 8 introduced closures, for example. Oracle also increased the pace of Java releases to once every 6 months since Java 9 and generally the features added have been significant improvements.
Tomte|4 years ago
It steals the best from the more avant-garde languages and builds it in coherently. That's no small task, so it takes few years.
Therefore I wouldn't call Java "cutting-edge", but "modern" easily.
TheMonarchist|4 years ago
Streams are a library feature. At a cursory look Boost seems to have had something similar since 2003: range adaptors[0].
Moreover lambdas have existed since 70s. They are modern only in the sense that Java got them in 2016 or so.
> It steals the best from the more avant-garde languages and builds it in coherently. That's no small task, so it takes few years.
That's a nice way to say that it gets new features only when they are undeniably useful.
> Therefore I wouldn't call Java "cutting-edge", but "modern" easily.
If Java is modern, C++ is cutting edge. It got the syntactic sugar for lambdas in 2011 - five years before Java.
However I may have put too much weight on "modern" in the question title. The demand for Java coders is going to be higher than the supply not unlike COBOL. If you can live with its limitations, you can make a living maintaining Java codebases for decades to come.
[0]: https://www.boost.org/doc/libs/1_78_0/libs/range/doc/html/ra... (Nowadays you would use Eric Niebler's Ranges-v3 when C++20 Ranges aren't available.)
ThrowawayR2|4 years ago