…most people treat me like idiot for using my head instead of learning 3000 of them for each possible problem.
And you’ve hit the nail on the head right there! I concur.
The trouble is, almost all Java-related documentation, courses, guides, tutorials, and answers I see advocate certain design patterns, code snippets, and habits (a la “always use double no matter what!”…and yes, I’ve heard that multiple times). In that context, you really are not invited to think, much less to challenge, the Great Java Way Of Doing Things™.
I think Java has some neat features and ideas — it also has some horrifically terrible things, like boxing/unboxing and generics (a mal-implementation of C++’s templates) — but it all comes down to how you use it. Great software can be written in any language, Java notwithstanding!
And I’ve heard good things about Scala.
I think my main issue with Java, and the main reason I love Python, is the overarching culture surrounding the language. With Python, we’re always in pursuit of the One Obvious Way, which is not necessarily known for any given problem, but is discoverable through careful consideration. Pythonistas welcome challenges to the known One Obvious Way for anything, so long as you can prove why your way is better. If you can, then that is gradually shared and accepted as the new One Obvious Way. (In other words, we’re always looking for the optimal solution, but recognizing we’ll never really get there.)
I don’t see that attitude in Java. Most Java code, documentation, and courses I’ve seen are reminiscent to me of “eh, it works because I used the special magic patterns I was taught. Truuuuuuust meeeeeeee.” Perhaps that’s not the Java culture as a whole, but it’s been my rather discouraging experience over the past ten years. Maybe if I used it more…but then, after that experience, I really don’t want to have to use Java. Give me C++ or Python instead any day.