between starting with java by using forge to write a minecraft mod, and now dipping back in by using libgdx to make HELL FARM (thats not the actual title) my assessment of java is that it's a perfectly serviceable language that its users seem to love tying in absurd knots
it definitely has some warts (it's impossible to statically initialize, like, anything, which means doing something as simple as
one of the first things i remember reading about java was actually in eevee's post about stupid classes, where he points out that since java doesn't have first-class functions, the only way to have a mutable function member is to make a default class and then just
because of my HASKELL BACKGROUND i use a coding style that's let's say callback heavy; i've been using functions and lambdas all over the place, and i have yet to find a problem (save for the static initializing thing) that can't be solved in a fairly simple and straightforward fashion, with only a little wrestling with the language. wrestling with the libraries, though...
so idk it's been going well. for an ostensible game developer, basically none of the languages i know are super well-suited for actual games. java is definitely more mainstream, but it's still not the besttt for realtime stuff. but wow i don't think i'm ever gonna go back to a c-family, and rust sounds like a half-formed nightmare, so i guess it's java for this thing.
it definitely has some warts (it's impossible to statically initialize, like, anything, which means doing something as simple as
\x -> x `elem` [2,3,4,9] becomes an exercise in frustration), and the impression i get is that it's made a bunch of steps from ~1.6 onward to be less of a nightmare language, and that is just absolutely not reflected in the userbase or libraries.one of the first things i remember reading about java was actually in eevee's post about stupid classes, where he points out that since java doesn't have first-class functions, the only way to have a mutable function member is to make a default class and then just
extend it with a new subclass every time you want a different function. (this is no longer true; java 7 has semi-anonymous function class instances and java 8 has lambdas.) but that approach is endemic in minecraft/forge; i haven't dug into libgdx enough to tell if it's also true for it. the main libgdx issue i've been having is just that it's huge, and that a given feature's functionality is split up between a dozen different classes with no seeming rhyme or reason about it. that's enterprise engineering, i guess. i am absolutely having to make new objects to encapsulate the slurry of a half-dozen libgdx objects interacting under the surface.because of my HASKELL BACKGROUND i use a coding style that's let's say callback heavy; i've been using functions and lambdas all over the place, and i have yet to find a problem (save for the static initializing thing) that can't be solved in a fairly simple and straightforward fashion, with only a little wrestling with the language. wrestling with the libraries, though...
so idk it's been going well. for an ostensible game developer, basically none of the languages i know are super well-suited for actual games. java is definitely more mainstream, but it's still not the besttt for realtime stuff. but wow i don't think i'm ever gonna go back to a c-family, and rust sounds like a half-formed nightmare, so i guess it's java for this thing.