We have a pro-Java faction, because Java is easy to hire for, standard, rock-solid, great tooling, yadda yadda yadda.
We also have an anti-Java faction, because Java is bloated and verbose and unpleasant and not modern.
Did you regret choosing Java for a new project or startup? What went well? What went wrong?
It's a usable language, albeit unpleasant. Also the primitive type system meant we had the weirdest bugs uncaught in production which took forever to debug.
I recently had the chance to build games again and we picked Typescript (for a 3d game) and Rust (for a 2d game).
Typescript is okish, unfortunately most of the libraries we use have patchy type support which translates to a few errors at runtime - but we didn't have many problems.
Rust has been pretty amazing. We're using early stage software (bevy) but the codebase is a pleasure to work with and once it compiles, things really work. One great advantage is using ECS. I tried to prototype the 3d typescript game with and ECS library but, again, lack of typing support in the library meant a lot of pain.
I've been using Rust for pretty much everything lately (from videogames, to running tensorflow, to writing web servers) and I have to say the advantages of using the language shadow the OSS projects being early stage.
Not knowing the alternative languages proposed I can’t comment on their shortcomings in comparison to Java. I can’t think of anything that went wrong from using Java, it’s very performant and other than perhaps garbage collection or startup issues, you won’t find many shortcomings. If your alternative language is closer to the metal than Java, I do agree the hiring will be harder and development will be slower on most teams, because you have expanded what can possibly go wrong and broadened the range of skills.
As far as bloated - it’s that way so that the code you wrote doesn’t have to be.
Verbose - it’s evolved to allow lambdas, implicit casting, and improved case statements.
Unpleasant - Not in any IDE and not if your code quality enforces doc strings- which is one of the best things about Java.
Modern - I assume functional programming is what is asked for here? Java does support lambdas, and map,filter, etc. through the stream api.
Which is fine. There's every reason to think that Go and Rust will be in the "uncool" category rather than the "defunct" category. If they match your requirements and you can assemble the team to use them, they're both fine choices.
But "not modern" for Java also means "durable". It stands the test of time, just like your code will. (And don't kid yourself -- your "prototypes" will be operational code.)
A lot of the features that make Java "bloated and verbose" are also the ones that make it durable. It's a language designed for large projects -- heavyweight for "hello, world", but prized by coders who have experience in revisiting 10 year old software.
Or you could pick Kotlin, which is basically a cleansheeted Java. It uses all the same libraries and frameworks, which are actually more important. It's got some nice language features, most of which Java is also adopting. Either is a fine choice -- Kotlin is a bit cleaner, Java is a bit easier to hire for. The differences aren't all that big.
I've never regretted picking Java, even before modern tooling (I wrote my first Java with vi, and still do sometimes.) The tooling makes it excellent and keeps improving.
There are some frameworks I regret having forced on me, but they're not Java the language. People who can't tell the difference between the language and the framework are not going to advise you well.
No matter what you pick some things will be easier and some harder, and you won't know which. The worst case is that the language dries up. Avoid that case and the language won't be your worst problem.
Just tell them that whoever gets the prototype working first picks the tech stack.
Unless your product has some specific needs, Java is a good goto.
I've never seen a company fail because they picked the wrong language anyway.