106
General Discussion / Re: if self.isCoder(): post() #Programming Thread
« on: February 11, 2016, 09:23:47 pm »
I don't like Java overall, but the one really nice thing I've found has been Java 8's streaming API. It's a freaking pleasure to work with. Of course, you can't use methods that throw exceptions in lambdas, because checked exceptions are the devil that comes out to laugh at you when you attempt to write beautiful Java code.
In general, I feel like Java has always attempted to cater to the lowest common denominator, feature-wise, and has therefore acquired a set of weird, poorly-fitted features that fight with each other. Checked exceptions and lambdas are one example, and type inference along with type erasure is another one. The tooling is significantly more complicated than the equivalent .NET tooling (Maven is madness made manifest, and Gradle just barely covers over the trouble enough to be usable), the various framework APIs have very little in common (look at the JavaX Mail API, then at the Stream API, and tell me they were made by the same entity), and it's obvious to me that nobody has ever looked at the system as a whole and tried to streamline it. It's just a constant piling-on of features.
Backwards compatibility is important. It really is. But Java has gone about it in a way that pollutes future code with past mistakes, and that's just not acceptable.
In general, I feel like Java has always attempted to cater to the lowest common denominator, feature-wise, and has therefore acquired a set of weird, poorly-fitted features that fight with each other. Checked exceptions and lambdas are one example, and type inference along with type erasure is another one. The tooling is significantly more complicated than the equivalent .NET tooling (Maven is madness made manifest, and Gradle just barely covers over the trouble enough to be usable), the various framework APIs have very little in common (look at the JavaX Mail API, then at the Stream API, and tell me they were made by the same entity), and it's obvious to me that nobody has ever looked at the system as a whole and tried to streamline it. It's just a constant piling-on of features.
Backwards compatibility is important. It really is. But Java has gone about it in a way that pollutes future code with past mistakes, and that's just not acceptable.
