Java (and C# and C++) have become kitchen sink sink languages. Everything is just thrown in. That makes it less productive for me. I've decided I don't want to carry around that much in my head all the time in order to read somebody else's code. I switch languages a lot these days.
Go is getting generics in (hopefully) in a few months. Some features are missing but most don't cause much pain and can be either simulated or worked around. Error handling is its biggest failure, but outside of that I find is at least as productive as other compiled languages in the same space.
> Java (and C# and C++) have become kitchen sink sink languages. Everything is just thrown in.
This is far from the truth when it comes to Java. Java doesn't add features willy nilly. They are thought out, and in general implemented better than in other languages. Java's WHOLE philosophy is to move slow and let other languages experiment with features so the kitchen sink doesn't get thrown in because Java has _actual_ backwards compatibility promises and has to support those features for eternity.
Go is getting generics in (hopefully) in a few months. Some features are missing but most don't cause much pain and can be either simulated or worked around. Error handling is its biggest failure, but outside of that I find is at least as productive as other compiled languages in the same space.