Java is disliked because it’s designed around flawed OOP principles developed in the 80s and 90s. The code easily turn into a mess if you adhere to these principles, because they’re flawed. If you avoid using these principles, you will still get a mess, because that’s not how Java is supposed to be used.
Java was such a fractal of stupid design choices in its early years, and a lot of it is still there. OOP except when it’s not (int vs Integer, [] arrays but also List et al), no unsigned number types, initially no way to do closures or pass methods around so everything had to be wrapped in super verbose bullshit, initially absolutely dogshit multiparadigm support and very noun-oriented, initally no generics either meaning everything’s an Object, when it did get generics they had to do type erasure for backwards compatibility, etc etc etc
Great article, thanks for the link! It makes good points that I hadn’t really considered; I’ve probably just been cranky about it because I’ve preferred heterogenous translations
Java is disliked because it’s designed around flawed OOP principles developed in the 80s and 90s. The code easily turn into a mess if you adhere to these principles, because they’re flawed. If you avoid using these principles, you will still get a mess, because that’s not how Java is supposed to be used.
Java was such a fractal of stupid design choices in its early years, and a lot of it is still there. OOP except when it’s not (
int
vsInteger
,[]
arrays but alsoList
et al), no unsigned number types, initially no way to do closures or pass methods around so everything had to be wrapped in super verbose bullshit, initially absolutely dogshit multiparadigm support and very noun-oriented, initally no generics either meaning everything’s anObject
, when it did get generics they had to do type erasure for backwards compatibility, etc etc etcAlso: everything is nullable. There are no safety guarantees to ensure you’ve done the necessary null checks. And if you miss your program will crash.
Oh yeah how did I forget the billion dollar mistake, definitely one of the worst misfeatures of Java
Regarding erasure, this is a good read. https://cr.openjdk.org/~briangoetz/valhalla/erasure.html
Great article, thanks for the link! It makes good points that I hadn’t really considered; I’ve probably just been cranky about it because I’ve preferred heterogenous translations