Live data from Hacker News

Java Turns 25 – Whats Next? [pdf]

oracle.com

261–270 of 286 posts

Re: Java Turns 25 – Whats Next? [pdf]

#261

Java 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…

Java is pretty solid, but not percieved as cutting edge anymore, even though they are still improving it. I think Oracle has done a better job then I originally expected. I think the ecosystem is by far it's biggest advantage. It's a integration target for many projects just because it has such wide adoption.

Re: Java Turns 25 – Whats Next? [pdf]

#262
post #172

Earlier quoted context omitted.

Is there any major player or project doing backends in JS?

Uber: https://eng.uber.com/uber-tech-stack-part-two/

There's a lot of Java in that article: Hive, Hadoop, Spark, Elasticsearch, Kafka, Cassandra...

Re: Java Turns 25 – Whats Next? [pdf]

#263

Everything 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 str…

I 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.

Re: Java Turns 25 – Whats Next? [pdf]

#264

Slightly 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.

Now 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/

[1] https://www.marcobehler.com/guides/a-guide-to-java-versions-...

[2] https://openjdk.java.net/faq/

Re: Java Turns 25 – Whats Next? [pdf]

#265

Earlier quoted context omitted.

There's a lot of enterprise data science being done with Java/Scala and the Hadoop/Spark ecosystem. MXNet also makes deep learning a first-class citizen in Java, but yes the research community is firmly entrenched in Python atm. I see JDK languages as being in a decent spot for deploying ML/DL, and maybe an "emerging" language for training DL models. Folks like Jeremy Howard have increasingly been expressing growing…

The Tensorflow Java project is alive and well. The next version of the API based on TF 2 is coming out soon. (Full disclosure, I'm a member of the SIG that's building it). I'm a firm believer in the utility of type systems for building machine learning projects. https://github.com/tensorflow/java

Can you train models with TF Java? I was under the impression it was for inference only

Re: Java Turns 25 – Whats Next? [pdf]

#266
post #254

Earlier quoted context omitted.

As a counterexample, springboot is the quickest thing to get start and yet allows you to do complex stuff. I for one, love it.

> springboot is the quickest thing to get start What do you mean by this? Startup times, or developer onboarding? Because I've had this conversation before if the latter. To me, Spring seems like the last gasp of "Enterprise" Java. Too much is implicit and obscure (aspect-oriented programming is an anti-pattern, IMHO), too much is configured (yuck, XML). Each to their own I guess.

Developer onboarding. Have not used XML for springboot in ages. And aspects - very very rarely if at all.

Re: Java Turns 25 – Whats Next? [pdf]

#267

Earlier quoted context omitted.

The Tensorflow Java project is alive and well. The next version of the API based on TF 2 is coming out soon. (Full disclosure, I'm a member of the SIG that's building it). I'm a firm believer in the utility of type systems for building machine learning projects. https://github.com/tensorflow/java

Can you train models with TF Java? I was under the impression it was for inference only

You can with some hoop jumping in the current release (e.g. using 1.14 you need to define the model and optimizer in Python - https://github.com/oracle/tribuo/blob/main/Interop/Tensorflo...). With the upcoming alpha release from the TF Java group you can train purely from Java without invoking any Python - https://github.com/tensorflow/java-models/blob/master/tensor...

Re: Java Turns 25 – Whats Next? [pdf]

#268

Earlier quoted context omitted.

I also wonder how much the difficulty of sharing files between different systems due to different disk formats played a role in its failure. You could run p-system on a lot of machines - Apple II, IBM PC, TI-99/4A, PDP11... but how would you (and why would you) distribute your code across machines with such different storage media?

Oh, people found ways to transfer files. BBSs were one way, the Kermit program another, NNTP newsgroups, etc. I transferred files from my PDP-11 (8" floppies) to my PC (5.25" floppies) using Kermit.

Maybe it was more of a problem of not being able to think of a use case for running a pCode program meant for a 512K PDP11 on a 48K Apple II+. A bit ahead of its time.

Re: Java Turns 25 – Whats Next? [pdf]

#269

Earlier quoted context omitted.

Oh, people found ways to transfer files. BBSs were one way, the Kermit program another, NNTP newsgroups, etc. I transferred files from my PDP-11 (8" floppies) to my PC (5.25" floppies) using Kermit.

Maybe it was more of a problem of not being able to think of a use case for running a pCode program meant for a 512K PDP11 on a 48K Apple II+. A bit ahead of its time.

It was definitely ahead of its time, but I and others tried to use it. It was just too slow, and you couldn't make competitive products with it.

Re: Java Turns 25 – Whats Next? [pdf]

#270

Earlier quoted context omitted.

In defence of Java, I read somewhere it's 25 years old ;-) Part of the reason for its success has been its strong commitment to backward compatibility, so it's to be expected that it might accumulate many ways of doing things. Python wisdom tells us this is often a Bad Thing. [0] I imagine Java's approach to concurrency and parallelism might be quite different if it were designed today. [0] https://wiki.python.org/mo…

I imagine Java's approach to concurrency and parallelism might be quite different if it were designed today. Probably not, actually. Project Loom's initial goal was to rethink concurrency on the JVM from scratch. What they came up with was: * Make threads really, really cheap * Make thread locals work better (as scoped locals) * Add a few Executor utilities to help you control sub-tasks better (structured concurrency…

Your characterization of Loom is, I think, pretty accurate.

There are, however, a few things in Java's early concurrency support that make various things harder, including Loom, and we're having to put some extra effort into grappling with them.

Probably the most obvious is the fact that the language and VM requires every object to have a monitor lock that can be synchronized and waited/notified. In 1996 this was viewed as "Ooooh, sophisticated, building locking and concurrency support into the platform!" In recent years this has started to get in the way. Really only a very few objects are used as locks, but the _potential_ for every object to be locked is paid by the JVM.

It also intrudes on Project Valhalla, which is trying to define "identity-less" inline types (formerly, "value types"). Ideally, we'd want all conventional objects and inline objects to be descendants of java.lang.Object. But Object has the locking APIs defined on it, and locking is intertwined with object identity. So, does Object have identity or not? There are some solutions, but they're kind of weird and special-cased.

Another issue is that the locks defined by the language/VM ("synchronized") are implemented differently from locks implemented by the library (in java.util.concurrent.locks). Loom supports virtual threads taking library-based locks, in that when a virtual thread blocks on a lock it will be dismounted from the real thread. This can't be done with language/VM locks, so there's an effort underway to migrate the those locks to delegate to library code for their implementation. This isn't an insurmountable problem, but it's yet more work to be done, and it's a consequence of some of the original designs of Java 1.0's concurrency model.

Post reply on HN