top | item 45355580

(no title)

ppeetteerr | 5 months ago

Java is maturing into a syntactically nice language, albeit slowly, and it's the backbone of many medium and large companies.

You might have trouble finding small companies using anything but JS/Ruby/Python. These companies align more with velocity and cost of engineering, and not so much with performance. That's probably why the volume of interpreted languages is greater than that of "enterprisey" or "performance" languages.

discuss

order

xhevahir|5 months ago

Aren't a lot of those Java employers stuck on an old version of the language, one that's lacking most of those nice features?

vips7L|5 months ago

A lot are, but there is an equal amount that are of modern versions. It’s a big landscape of employers. I’ve already begun moving my team to Java 25 from 21.

ramblerman|5 months ago

less and less, with the new release cycles.

What you get is either really old (Java 8 stuck on something nasty like weblogic).

Or companies running either cutting edge or LTS.

ystvn|5 months ago

> Java is maturing into a syntactically nice language, albeit slowly, and it's the backbone of many medium and large companies.

I've heard about Java initiatives to improve it, but can you point to examples of how how Java "is maturing into a syntactically nice language"?

I'm tempted to learn it, but wonder whether it would really become nice enough to become a 'go-to' language (over TS in my case)

ppeetteerr|5 months ago

I've always felt it was verbose and the need for classes for everything was a bit of a overkill in 90% of circumstances (we're even seeing a pushback against OOP these days).

Here are some actual improvements:

- Record classes

public record Point(int x, int y) { }

- Record patterns

record Person(String name, int age) { }

if (obj instanceof Person(String name, int age)) { System.out.println(name + " is " + age); }

- No longer needing to import base Java types - Automatic casting

if (obj instanceof String s) { // use s directly }

Don't get me wrong, I still find some aspects of the language frustrating:

- all pointers are nullable with support from annotation to lessen the pain

- the use of builder class functions (instead of named parameters like in other languages)

- having to define a type for everything (probably the best part of TS is inlining type declarations!)

But these are minor gripes

gf000|5 months ago

It has virtual threads, that under most circumstances let you get away from the async model. It has records, that are data-first immutable classes, that can be defined in a single line, with sane equals toString and hash. It has sealed classes as well, the latter two giving you product and sum types, with proper pattern matching.

Also, a very wide-reaching standard library, good enough type system, and possibly the most advanced runtime with very good tooling.