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 Turns 25 – Whats Next? [pdf]
261–270 of 286 posts
Re: Java Turns 25 – Whats Next? [pdf]
#262Re: Java Turns 25 – Whats Next? [pdf]
#263Everything 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…
Also, although C# is pretty nice, Kotlin is nicer.
Re: Java Turns 25 – Whats Next? [pdf]
#264Slightly 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.
- 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]
[1] https://www.marcobehler.com/guides/a-guide-to-java-versions-...
Re: Java Turns 25 – Whats Next? [pdf]
#265Earlier 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
Re: Java Turns 25 – Whats Next? [pdf]
#266Earlier 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.
Re: Java Turns 25 – Whats Next? [pdf]
#267Earlier 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
Re: Java Turns 25 – Whats Next? [pdf]
#268Earlier 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.
Re: Java Turns 25 – Whats Next? [pdf]
#269Earlier 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.
Re: Java Turns 25 – Whats Next? [pdf]
#270Earlier 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…
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.