Inheritance instead of composition. Too much worry about security theater public/protected/default/private instead of actually reusing code. The inability to fake stuff for tests without designing ability to fake things into every class. Basically, you write the code, and that's what you have. If anything changes, it's basically a rewrite, even with Eclipse's "refactoring" features. Type erasure.
When all you have is Java-style OO, everything looks like an AbstractHammerFactoryInterface.
Yes! It's amazingly hard to do inheritance right. As a rule of thumb, if you can't prove that the inheritance doesn't violate the Liskov substitution principle, you shouldn't be allowed to do it. (It amazes me how many java 'programmers' have never heard of lsp or a refinement proof).
Ironically, Liskov is the exact opposite of how people do OOP. Most people subclass to add restrictions, where Liskov suggests that subtypes should relax restrictions.
This means your programs work better, but you have to plan ahead.
I know I'm not an average Java programmer (I hate IDE's, hate patterns for example), but I've never seen anything as an AbstractHammerFactoryInterface.
Seems like you're confusing Java the language, with how some people choose to use Java.
If you are going to use Java contrary to 90% of Java programmers, what's the point? You can't use any libraries and they won't understand your code. So you might as well use a good language instead.
I do not use languages just based on what other people use it for.
I completely agree, most people abuse Java using it in stupid ways, writing absolutely ridiculously verbose and complex needless code, using XML for everything etc etc. But that's not Java's fault. It's simply the fact that it looked attractive to Enterprise and they threw their crapstorm at it.
If <insert hip language here> suddenly looked attractive to corporate world, it'd get thrown a ton of crap as well and suddenly fall out of fashion with the people who choose languages based on fashion.
If you pick languages based on community / how most people use it, I think you're missing the point of languages.
The reason why you want popularity is because they write libraries for you. That means you can worry about something more interesting than an HTTP parser. Or, it means that if you want to write an HTTP parser, lots of people will help you.
If you are the only person in the world and refuse to collaborate with anyone, then it doesn't really matter what language you use. Except, of course, the compiler and runtime are libraries, and you had better be prepared to maintain those, too.
> If you are the only person in the world and refuse to collaborate with anyone, then it doesn't really matter what language you use.
Yup! And FWIW, I wrote an HTTP parser. And webserver. And DNS server. Amongst other bits and pieces I needed for Mibbit.
Programming isn't rocket science, I think more people should write everything themselves rather than rely on 3rd party libraries personally.
Yes, it's an investment to write your own libraries, but you end up knowing more, being able to maintain/fix bugs far easier, and often ending up with a far better solution.
When all you have is Java-style OO, everything looks like an AbstractHammerFactoryInterface.