46 ms·
Java Turns 25 – Whats Next? [pdf]
- mxschumacher 6y agoSlightly tangential, but due to a new job I'll have bite the bullet and learn Java. When googling tutorials, I see the same material I found 12 years ago. A lot must have happened since then. What's a good resource to learn Java for somebody who already knows how to program? I'm interested in ecosystem, tooling, best practices, common pitfalls etc.
- ivanr 6y agoHere you go: https://news.ycombinator.com/item?id=24142626 https://news.ycombinator.com/item?id=24142626
- krisgenre 6y agoTry https://www.baeldung.com/ https://www.baeldung.com/
- cordite 6y agoYou'll find many good resources on https://www.baeldung.com/ https://www.baeldung.com/ it regularly comes up in search results and pages appear maintained and for modern versions of libraries.
- chrisseaton 6y ago> A lot must have happened since then. Not really. That’s the point of Java. It’s stable. Check the Wikipedia page on Java history to see the handful of new features then just look for tutorials on those that you need to use. Most of these features are things you can pick up as you go.
- ptx 6y agoAt least two significant things happened: 1) It finally got anonymous functions in Java 8, so you no longer have to use anonymous classes and complicated design patterns as substitutes. 2) The distribution model changed from targeting a preinstalled JRE to bundling your own runtime with jlink and jpackage (i.e. the same as native applications and .NET Core).
- chrisseaton 6y agoRight, these are both one-day study exercises I think to come up to speed. Java's designed like this - almost everything is additive and builds on the same principles.
- saagarjha 6y agoI think it might take a little more than one day to fully understand Java 8's new features around lambdas and streams.
- _old_dude_ 6y agoI recommend Effective Java, the third edition is updated for Java 9 I believe and Java Concurrency in Practice for the core parts of the language. For Spring, Jakarta EE, Micronaut or Quarkus the docs of their respective websites is enough.
- gonzo41 6y agoEverything is OpenJDK now, forget oracle. AWS put out LTS JRE's etc. Try and get your employer to pay for a jetbrains IDE, IntelliJ IDEA. Use Maven for builds. It's simple-ish. Use Spring for frameworks. Everything's been done so you wont be first with any problems here. And all the stuff from 12 years ago is probably what people know and do, so it's still on point. No one does inheritance anymore composition's all the rage. Not passing judgement on that, it's just a thing.
- gengstrand 6y ago> Use Spring for frameworks. Or Dropwizard if you want microservices that are more light weight and performant than Spring. https://glennengstrand.info/software/performance/springboot/dropwizard https://glennengstrand.info/software/performance/springboot/... Or Vert.x or Play if you want to code reactive microservices. https://glennengstrand.info/software/architecture/microservice/vertx/play https://glennengstrand.info/software/architecture/microservi... > No one does inheritance anymore composition's all the rage. Hmmm, that is oversimplification IMHO. When OOP first gained popularity, there was a lot of emphasis on inheritance. Inheritance got misused resulting in systems that became too rigid to change over time. The proverbial pendulum has swung the other way resulting in this sentiment of "no one does inheritance anymore" but inheritance is still very powerful and productive provided that you learn how to use it correctly. Think of inheritance as an advanced feature best left for more senior engineers to use.
- vips7L 6y agoNever use Play imo. Especially if your focus is Java (the language). It doesn't offer a modern workflow or java idioms at all. Not to mention it's dependence on scala and sbt which is its own special hell. Reactive is probably a mistake with loom looming around the corner.
- jacques_chester 6y agoSpring Boot has historically been resource-hungry, but that's changing quite quickly. Modulo usual caveats about not promising anything and safe harbours and forward-looking statements, VMware is interested in Spring efficiency up to a very high level in the org chart. Watch this space. Disclosure: I work for VMware.
- ceronman 6y agoI was in a similar position a couple of years ago. I recommend the book "Core Java for the Impatient" by Cay Horstmann. The printed version is for Java 8 but there is a preview available for Java 11. It's a concise book but it covers all the important bits. Regarding the "bite the bullet". I was also a bit afraid, but Java is a great language. Yes, it's a bit verbose but that's compensated by its amazing tooling, specially IntelliJ IDEA.
- dunefox 6y agoTooling doesn't make the language great. Java is still objectively worse than many other languages, especially Kotlin.
- bluedevil2k 6y agoThere’s nothing that makes a programming language good or bad - they all can do the job. It’s a matter of personal preference - Java might be “objectively worse” for you, but it might the best language possible for thousands of other developers.
- pulse7 6y agoYour "objective" view is very subjective... A comment from above (yagodragon): "I think that Java is seriously being downplayed by HN crowd."
- nullspace 6y agoAs someone who recently did that after ~8 years, I found it useful to skim through Modern Java in Action. It should be pretty easy read if you've been doing more modern languages, but important to learn Java semantics and nuances. Also, I highly recommend Java Concurrency in Practice, but it's a tougher read. That said, for most orgs, the biggest changes you might see would be in libraries and frameworks used. There will most likely be less XML, better build tools and more modular library usage than 12 years ago.
- lchengify 6y agoOther than Effective Java, I recommend looking at some of the Google libraries, specifically Guava [1] and Guice [2] for dependency injection. Java is fundamentally a slow adopter of new techniques (it just got lambdas in JDK 8), but a lot of the Google libraries fill in the gaps. Note that if you are learning Java for Android development, that's a whole different sub-discipline. In that case I recommend the Android tutorials since most of the work is dealing with the Android SDK. [1] https://www.tutorialspoint.com/guava/index.htm https://www.tutorialspoint.com/guava/index.htm [2] https://www.baeldung.com/guice https://www.baeldung.com/guice
- dcminter 6y agoBroadly I agree, but JDK 8 was released in 2014, so while Java is certainly conservative you're overplaying it there. The relatively recent adoption of the 6 monthly release cadence is helping a lot - particularly with the small feature additions that used to get stuck behind the release train.
- rzwitserloot 6y ago> (it just got lambdas in JDK 8) Interesting use of the word 'just'. At the risk of making readers feel old... Java 8 was released _6 and a half years ago_.
- bird_monster 6y agoJava got lambdas in the most recent quarter of its development.
- ThePadawan 6y agoMaybe as a point of comparison (I wondered): C# got them in C# 3.0 in 2007.
- lchengify 6y agoPoint taken. For some reason, a lot of the code work i've encountered is tied to JDK 8. Might be due to it having LTS until 2018 [1]. It could be anecdotal, but I've found in practice vendors and companies are conservative about their JDK upgrades. I haven't seen anything prior to JDK 6 in a while, but I don't think the upgrade cycle is as fast as say, python minor version upgrades. [1] https://en.wikipedia.org/wiki/Java_version_history https://en.wikipedia.org/wiki/Java_version_history
- rzwitserloot 6y ago> A lot must have happened since then. Yes. As others have said, 'java is stable' which means the old stuff still works. Which in turn means that a lot of people are still using it and still writing blog posts about it. That still makes these old things often obsolete, or needlessly complex and just 'lesser than'. They don't support certain nice features or support them very badly, or have other significant downsides - 25 years of experience does lead to insights, after all. 20 years ago, you loaded your JDBC driver with `Class.forName`. You _STILL_ see this in many examples (and it hasn't been necessary for 15+ years). These days, you: * Use a load balancer like hikari * Consider raw JDBC as basically nuts as far as an API goes, and you use JOOQ or JDBI. Or JPA/Hibernate of course, if you don't want SQL/want DB independence and don't think you'll need to performance-tweak queries too much. * You use serializable transaction levels and toss _all_ the code that interacts with DBs into a lambda so that the framework can handle retries for you. And that's just DBs. As a general trend: Libraries tend to wax and wane. Right now spring is _very_ popular. JSP is the kind of outdated crud that is just a straight up 'do not use this right now' (even if it still kinda works). For date stuff, use java.time. Libraries in general are more focussed on configure-via-java-code, and dip more into code generation and annotations (example: JOOQ). You don't use The JSONObject API, you use jackson or gson. The list is very long. I have no particular advice on how to know all this stuff as someone not familiar with the (modern) java ecosystem, though. Just pointing out that 'stable' doesn't translate to 'not much new in the past 15 years'.
- scns 6y ago2 of 3 Gson maintaners say: "use Moshi". Source: Jake Wharton (1 of 3 Gson maintainers)
- pabl0rg 6y agoBaeldung has decently up-to-date tutorials. Try kotlin instead of Java, and if you must use java, read the book Effective Java. If you use kotlin, check out ktorm for db access, http4k for http api’s
- sk5t 6y agoBaeldung's content is IMO uniformly quite deficient. If you want examples of how to do things poorly, which examples may or may not compile, or if there's no other alternative, then I guess read the Baeldung article. Try Scala instead of Kotlin, it's much more powerful, and you can safely avoid the mad Scala libraries jam-packed with symbol infix notation.
- mxschumacher 6y agoNow that I have read all the responses in this thread (thank you!) and done some more digging of my own, here are a few more insights I have picked up as a Java-outsider / newbie: - The current release of Java Standard Edition (SE) is 15; but many applications are still using version 8 or something in between. - The enterprise version (EE) of Java is now called Jakarta and part of the Eclipse foundation [0] Focus on Cloud Native (Kubernetes, Docker ...) - naming schemes: Java 1.8 is just Java 8, Java 1.11 is Java 11 etc. - the versioning cadence of Java has changed with version 10 (in 2018) from "every few years" to "twice a year", that's how we got to version 15 in such a short period of time. - The officially recommend way to build Android apps today is in Kotlin, but there is still support for Java. - The JDK is used for developing apps in Java, the JRE just to run those apps. The two seem to be converging: everybody just downloads the JDK. The JDK contains a debugger, a shell, a document generator a compiler etc. - OpenJDK: the project containing the Java source, is available in two builds OpenJDK and OracleJDK (the difference seems to be in commercial support from Oracle, not in code / functionality). Oracle is the primary contributor to OpenJDK [1][2] [0] https://jakarta.ee/ https://jakarta.ee/ [1] https://www.marcobehler.com/guides/a-guide-to-java-versions-and-features#_java_distributions https://www.marcobehler.com/guides/a-guide-to-java-versions-... [2] https://openjdk.java.net/faq/ https://openjdk.java.net/faq/
- Irishsteve 6y agoTop point talks about targeting data scientists. It would be interesting seeing what that means in their mind. Based on the current state of affairs oracle and the jvm seem very far away from mainstream ML
- dunefox 6y agoNobody in their right mind would choose Java for anything ML-related.
- noworriesnate 6y agoUnless there were doing fairly simple ML that needed to be tightly integrated with a pre-existing Java codebase.
- itronitron 6y agoCan you elaborate on why you feel that way?
- snypox 6y agoI will risk that I get downvoted to hell. The data scientists in my company and pure geniuses. But. They can barely program. I wouldn’t trust them with Java, I’m sure they wouldn’t trust themselves either. Python is slow but at least it’s easy and fun. I don’t see anything else getting traction for long years.
- victor106 6y agoThat’s too broad a statement. Can you substantiate why you think so? The book below provides a nice overview of using Java for DS and ML https://learning.oreilly.com/library/view/data-science-with/9781491934104/ https://learning.oreilly.com/library/view/data-science-with/...
- zmmmmm 6y agoSeems a bit of an overstatement - there are huge production systems doing massive ML using Spark, Hadoop, Kafka etc. In some areas these are the defacto solutions. They can't all be "not in their right mind".
- yagodragon 6y agoJava might be the most successful programming language. It is a solid choice among many different fields. It is used on huge infrastructure projects (Apache Foundation), governments, big tech companies such as amazon, ibm, google, apple for many large scale services. It can do web, ml, GUIs, it's still strong among academics. On top of that it offers a great programming experience with excellent IDE support and it's ecosystem is huge. Even if you don't like the language itself , you can choose between Kotlin,Scala,Clojure that run on the JVM. I think that Java is seriously being downplayed by HN crowd.
- pkulak 6y agoI think it's the JVM that's the real win for Java. At my work we have a mix of Java, Kotlin and Scala and they all Just Work in our deployment pipeline that was built with just Java in mind.
- AnimalMuppet 6y agoI think it's the libraries. They're like Barbie - they have everything. You need, say, to store affine transforms in your SQL database? Java can bridge those very different worlds. (It literally has affine transforms in the library.)
- cesarb 6y ago> I think it's the libraries. [...] they have everything. On the other hand, they need to have everything. In many other languages, it's common to just use a library written in a different language. For some reason, the foreign function interface of Java seems to have been designed to be hard to use, so instead of using an already existing library, Java developers tend to go through the route of "Rewrite It In Java".
- marvy 6y agoWith Project Panama, they are finally trying to make calling non-Java code easy.
- soco 6y agoUnrelated to the real topic at hand: I find telling that an antiquated software company is choosing to publish stuff as PDF. I usually refuse to open such links - my personal choice of course - because I can't see any valid reason to use it in this context. Yeah PDF for printed forms, but anything else makes no sense to me, yet it's way more used that I could imagine.
- snazz 6y agoPDFs are a great file format for digitally viewing print-style publications. This document appears to be in the style of a print publication, not a web page. Here's an example of two far less antiquated technology companies using a PDF for something that could also have been a web page, but was found to make more sense as a print-style publication: https://blog.google/documents/73/Exposure_Notification_-_FAQ_v1.1.pdf https://blog.google/documents/73/Exposure_Notification_-_FAQ...
- jl6 6y agoBoy did that document header logo send a chill down my spine at the thought of the ultimate mega-merger of consumer tech.
- soco 6y agoOf course it is for printing, yet we are viewing it on the web. Is anybody actually printing any of those announcements? Or is the thought that a "printing look" would confer a document more weight in the eyes of some consumers?
- TheUndead96 6y agoI'm surprised that GraalVM is not mentioned. I have strong suspicions that Oracle is lining up Graal to become the next default JVM, after watching some talks from core developers describing how fragile the Hotspot codebase has become. Graal would be a good way to encourage ML, given it has language support for Python. Perhaps Graal is just not ready for Oracle to show all of their cards at this point. Or perhaps my theory is incorrect.
- pulse7 6y agoThey still need some more time with GraalVM. Currently you need Microsoft's C++ Compiler in order to use GraalVM on Windows. They will need time to polish these things... But GraalVM performance is already on par with HotSpot - with better startup times!
- e12e 6y ago> Currently you need Microsoft's C++ Compiler in order to use GraalVM on Windows No need for xcode on os x or gcc on Linux, or clang on bsds?
- pulse7 6y agoYou need xcode on OS/X and gcc on Linux. See here: https://www.graalvm.org/reference-manual/native-image/#prerequisites https://www.graalvm.org/reference-manual/native-image/#prere...
- e12e 6y agoMaybe I misunderstood your post then - why is needing the platform c++ compiler an issue on windows, but not mac/linux?
- pulse7 6y agoIt is an issue for all platforms - I just mentioned Windows, because I work on Windows. And the issue is: Why do I need a C++ compiler if I would like to develop in Java?
- kumarm 6y agoThe biggest mistake Oracle did with Java was being hostile to Android community with the goal to extract some money from Google. A significant reason for Java to be relevant even today is Android.
- est31 6y agoJava is still big in enterprise. Basically 70% of job ads in Germany mention Java in some form.
- pjmlp 6y agoThe biggest mistake Google did was to screw Sun and not buying it when they had the opportunity to do so, most likely hoping it would sink without a hiss.
- KptMarchewa 6y agoBoth comments are true.
- hota_mazi 6y agoAll Android did is make Java even more popular than it already was. But Java is the majority language on the back end too.
- jl6 6y agoIt's really interesting to think about what computing projects look like over timescales that are not normally encountered in the industry. It's rare for any software to achieve a kind of stable sustainability that allows it to continue development for as long as 25 years. It gives me hope for some of the big open source projects - hope that maybe, eventually, all the bugs will be fixed - even if it takes decades.
- wiradikusuma 6y agoMy comment is sexist, but culturally relevant from where I'm from. Java is like your old wife/husband/spouse. It's not sexy, you probably don't enjoy much when doing things with it. But it's dependable and reliable, And, aren't you where you are now thanks to it? Newer languages.. yeah they're sexier, more fun to play with, make people think you're cool when with them, but they might end up wasting your time :)
- eikenberry 6y ago> Java is like your old wife/husband/spouse. It's not sexy, you don't enjoy doing things with it. Sorry to hear about your marriage going bad. Maybe some counseling will help?
- saagarjha 6y agoPerhaps a psychiatrist if you've started referring to your spouse as "it" :/
- deleted 6y ago[deleted]
- topspin 6y agoOne thing that is hurting Java today is memory usage. Conventional JVMs use a lot of memory relative to essentially everything else and this is drives up cloud bills. There are alternative JVMs and other tools, some of which is embryonic at this point, but what the world wants and what Java really needs to continue thriving is efficient memory use by the bog standard JVMs that work with everything.
- klysm 6y agoYeah it’s especially painful once you near 32GiB
- apta 6y agoWith project Valhalla (value types), as well as the GC improvements in recent JDK releases (e.g. they are much more aggressive in releasing unused heap back to the OS), this should be a much smaller issue going forward. On another note, I'm not aware of other freely available GCs in other languages that are able to easily scale to multi-GB/TB scale memory usage. A while ago, I benchmarked an open source key/value golang project and it performed miserably when it reached GB level memory usage.
- vips7L 6y ago> e.g. they are much more aggressive in releasing unused heap back to the OS By aggressive you mean they actual do that now right? As far as I know before ZGC no gc did that and they're still back porting that feature to G1 right? Edit: I'm actually quite pleased with ZGC I have the eclipse language server use it and my editors memory usage on average is so much lower.
- apta 6y agoI believe it has been backported to JDK14 (and JDK15 was released this past week). Also Shenandoah should be production ready in JDK15, so you might want to give it a shot.
- sideeffffect 6y ago
- neovive 6y agoI fondly remember the excitement around Java when it was initially released in 1995. I was in college and the Mosaic browser only recently appeared on computers in the campus library. "Applets" were positioned as the next evolution of the "Information Superhighway"--the ability to write real applications and distribute them to anyone directly over the "World Wide Web" without the need for floppy disks. Although Java applets didn't pan out, it gave people a glimpse of the future; paving the way for Shockwave, Flash and the rich interactive web applications that dominated the 2000's. As Java pivoted to the server, it also ushered in the next generation of enterprise web applications. Happy 25th Java! From a language many first experienced via scrolling web tickers to a rock solid server-side platform that went on to dominate the enterprise. Java will remain ubiquitous for many years to come--even if many don't even know it's there.
- matt2000 6y agoI've been programming Java since 1998 or so, and this may be surprising to some on here - but I still like it! Here are the upsides in my mind, and as with all these things keep in mind - nothing's perfect! Everything has tradeoffs and I am making no absolute statements. Anyway, in no particular order: - Performance. It's possible for Java to be within 50-98% of the speed of even the most hand tuned native code, which is pretty remarkable considering the language comforts it provides. - Backwards compatibility. I have code that's 15 years old I still use. Programming hasn't fundamentally changed _that much_ in the past 20 years, but a lot of other languages act like it's changing by the year or even month. I deeply value not spending time fixing breaking language changes or dependency problems (for the most part). - OOP. I know we're in the cycle now where "OOP is a failure," but that's just wrong. Just like it was wrong when "OOP was the solution to everything." I don't go crazy with it, rarely use inheritance, use interfaces only occasionally, but do find it's nice to keep myself organized in terms of scope of code and responsibilities. - Typing. I know it's not perfect, but I really lean on the type system in Java. I think this might be because I'm a bit of a messy programmer to be honest, so this helps me keep a handle on things. When I work in Javascript I find things getting out of control quickly, whereas I can make statements about the entire codebase in Java that help me stay on track. - Tools. I've been using Idea as an IDE for 15 years or so and it feels like an extension of my mind. I can't even remember what the keyboard shortcuts are anymore, I just do them. It really helps keep the focus on the problem at hand rather than the details of implementation. We're finally coming out of the "IDEs are bad" cycle so I see more people using them again, that's good for everyone. - Simplicity. One major thing that people have forgotten with Java is that you can write simple code with it. It feels like the number one complaint is over engineered "AbstractFactoryImpl" codebases, and I hate those too. But it's also possible to write simple, easy to follow, understandable code. - Exceptions. I used to hate these too, then I had to write some code that _really had to work and handle everything_ and suddenly they were pretty nice. In terms of downsides: - It's pretty bad for scripting. A lot of that could be fixed with extensions to the standard library that provided easy helper methods. We shouldn't be constructing URL objects for anything, just do it. I'm very jealous when I see a nice Python script for doing something with data from an API. - It does tend to want a lot of memory. This isn't as much of a problem anymore thanks to Moore's law, etc. - Library support for new services. People tend to write a Javascript, Ruby and Python library for everything, which is super nice. Java is not as common these days. - Some other stuff I'm probably forgetting right now, I'll update this if I think of anything else. As I said, nothing's perfect. And in a general note: Don't underestimate the power of true expertise in a language. I find that in a lot of the cases when I'm reading about something new, it's hard for any upside to overcome deep experience. In that way, the best language for anyone is probably the one they know best, so maybe I'm biased.
- edem 6y agoWhat's next is called Kotlin.
- vmception 6y agoWhat's next? I propose an additional level of virtualization and abstraction to meet industry needs! The history of Java in a nutshell.
- deleted 6y ago[deleted]
- zeruch 6y agoWhat's next....can we EOL it? Disclosure: former SUN micro dude who was there at it's launch and just don't have any love for its use anymore.
- fortran77 6y agoI was at Adobe 25 years ago. And there were people running around saying "We need to re-write everything in Java! This way we can write it once, and it will run on Sun, Mac, Windows, SGI, everwhere!" Funny how that never worked out. Even the few Java desktop apps that don't look like 30 year old SunOS apps (IntellIJ is probably the best-looking Java app), have to have substantially different versions for each platform. A few people in the research groups tried re-writing a few apps in Java, like Acrobat Viewer, but nothing ever came of it.
- thu2111 6y agoI'm not sure IntelliJ is substantially different on each platform. It's basically the same app but bundled with a JVM. IntelliJ shows that Swing, even though it's old, is still a perfectly serviceable toolkit that can make competitively attractive apps in a cross platform way.
- mark_l_watson 6y agoWhile my career has mostly been as an AI practitioner, Java was also very good for my career. Sun had a link for a year on their Java home page to a blog article I wrote on the Java world tour so for about 10 years I was the first search hit for “Java consultant” which was nice enough. Except for periodically updating my Java AI book [1] (5th edition was released July 2020), I don’t much use Java because most of my customers want to use a Lisp language. Where should Java go now? I think both OpenJDK and also Oracle are doing a good job adding new features. I would vote for faster startup time; keep improving language conciseness; better data initialization literals. [1] https://leanpub.com/javaai https://leanpub.com/javaai
- TheUndead96 6y agoAre the customers demanding work in Lisp creating new systems, or maintaining mature systems? I had assumed that the use of Lisp for symbolic reasoning and AI had largely disappeared. Is it making a resurgence?
- mark_l_watson 6y agoCommon Lisp is used for quantum computing research, writing educational software, web programming, semantic web, etc. It is a very general purpose language. I have written a couple of Lisp books which is probably why I get Lisp work.
- pents90 6y agoI started learning Java in 1996 and it was a real revelation back then. Coming from very platform-specific C, everything felt comparatively easy. And Javadocs were amazing. Just a few months ago I dusted off an old project from 1997, loaded it up in IntelliJ IDEA, built it, and ran it. It worked! And that's Java's best feature, it's long-term language and library stability. I worry that it is at risk now with Oracle's new 6-month release cycle.
- bricss 6y agoNext stop is Node.js
- b20000 6y agowhat's next? deprecation
- trevorBelmont 6y agoPajeet poo in loo
- jimbob45 6y agoEverything Java does, C# does better. Java shouldn’t still struggle with generic arrays...but it does. Java should easily have first-class pointer support by now. C# does but Java doesn’t. Checked exceptions should have long been put to bed by now...but they haven’t. The only reason to use Java atm is interop with another JVM language (e.g. Clojure) or to not get locked into the MS ecosystem. C# is otherwise just streets ahead at this point.
- snypox 6y agoPeople might find you a bit offensive, but I’m really curious if anyone has a counterpoint to this.
- JohnL4 6y agoI don't see the argument for pointers. If you want C++, use C++. Re checked exceptions: they're great. Document how your code can go off the rails or prevent it.
- ptx 6y agoI prefer the JVM over .NET primarily for one reason: Microsoft's pervasive telemetry, i.e. exfiltration of my private data, which is now part of all of their tools and enabled by default. For each tool you have to research what the trick is to disable it (when at all possible), but even then the disabling mechanism is sometimes broken (e.g. for .NET Core) or supposedly local data is sometimes accidentally sent to Microsoft anyway (e.g. for the new terminal). Also, although C# is pretty nice, Kotlin is nicer.
- rpant99 6y agoThe guy who wrote the most lines of JVM code ever( Prof. Odersky) , who wrote the compiler that became the first javac compiler, who added generics to java5, himself moved away from java to create scala. Once you use something like scala or even kotlin,you never wanna go back- you realize java world is just playing catchup, They are now like a cola company advertising diet cola is healthy. The functional part of java is not really functional ( allows immutability). They just are trying to survive ,and are trying to add all kind of features to java, just to play catch up. I heard they are planning to add pattern matching in the latest version. The guys who make some excuse, like kotlin or scala is hard, can really be compared to an older car mechanic saying tesla is BS because their knowledge will become obsolete if it takes off. If you really think a language is hard , you are not supposed to be in the programming business. Also these same guys just use java to program the web. Heck, java is fast but the cost of lost developer productivity in waiting for compilation cant be justified cant be justified for the saved 100 millisecond of processing time. What matters on the internet is the perceived speed and the page load time, and there are so many other ways to achieve that. Like simply upgrading to http2. Or preloading html , js and then “hydrating” the page. The entire source code of the forum dev.to is opensource and you can visit the website to see how fast it is. And its not written in java. This is just an example. Facebooks wasnt written/ hosted on the “enterprise” java. While java is fast and is suited for low latency data processing ( like trading system, or big data), I hate that even with the love it receives, 98% of the so-called java guys just use it for web programming. - Also scala beats java at the thing java does best- fast processing. Ever heard big data processing with spArk.