I’ve found good work with both. Java has been “dying” for decades according to people who have an irrational dislike for the language. I’m yet to see any evidence for it. The ecosystem of libraries there is huge and well maintained.
Frankly I’d learn both as well as Python and maybe rust and go. Once you become proficient in any language it’s easier to learn others. So start with Java if that calls to you but branch out as well.
reduce compilation times
They mention nothing about compile times. This is about allowing the compiler to automagically run your code in multiple threads on CPU and GPU.
It’s an interesting idea. I like the CPU/GPU abstraction but it’s going to have some learning curve to write code for it. I’m not in the niche it’s aimed at though so I can’t comment to it’s usefulness.
That’s what experience is for. Design patterns aren’t rules for a reason - they have a time and a place to apply them.
It’s difficult to say exactly when you should use any given pattern much less a pattern “generally.” Typically it’s when “it’s better to use it then when it’s not” which is very hand-wavy.
It takes experience to be able to say “ahh, what I’m doing here is a good match for a ______ pattern given what I want to accomplish”.
What I will say is that if you’re doing professional development (rather than something experimental or for personal use) then it’s likely you will want to at least consider using a pattern if one exists that matches your use-case. And understand why you do or don’t follow said pattern.