What I'm wondering, however, is why most programmers that I've encountered on the internets hate Java?
Dunno, probably that it's interpretive language, thus it's a lot slower than compiled languages.
Two thoughts!
1 - God is just a name for the sum (past, present and future) of chance. It IS something that should inspire wonder, but I'm not entirely sure it should inspire faith?
2 - Java is a real mixed bag for experienced programmers. Some thoughts:
A - It is interpreted. However, the VM is so heavily optimized on most machines that once the language starts up, its really remarkably fast. So as long as you don't mind a delay when the VM itself actually launches the first time, it's really a fairly fast language.
B - Java does some things SO right that it is not even funny. The language itself, like the core language (not libraries, not APIs) includes proper support for strings, threading, and networking. This is not trivial, and it is completely Fing awesome.
C - As a language, however, it is deeply (IMO fatally) flawed. The exceptions system is bloated and disgusting, and most of the syntax and organization is so insanely arbitrary and retarded that it is impossible to ever GUESS how something might work. You HAVE to look it up; C and other fundamentally sound languages aren't really like this. In C, once you know the basics, you can begin to extend your capabilities by intuition because the language has some good basic rules (this isn't true for every feature of C, certainly, but even the basics of Java are arbitrary and annoying).
That's my take anyways! Java fits into my world for very specific applications, especially simple cross-platform clients for various network services or networked games. The combo of cross-platform compatibility, threading, and network support is just too good to pass up for certain projects.
3 - Yes people absolutely do think in words all the time! This is why it is so Fing hard to learn a new language