- Better Generics: Java lacks reified generics in that it discards type 
info at runtime. I agree that this is a deficiency of Java, but the 
practical consequences of this seem quite obscure. Sure C# can do List<int> 
faster than a Java List<Integer>, but int[] goes much faster in both 
languages, and most super performance sensitive code uses that. Other 
language features have more tangible benefits.

- Properties: The getter/setter practice of Java is horrendous. C# has 
first class properties which is better. Scala is even better, in that it 
eliminates the getter/setter boilerplate and doesn't even need a special 
property mechanism, you can just use val/var/def.

- Unsigned integers: I know there are some use cases, particularly in 
hashing and cryptography, where you really want a 32/64-bit unsigned int. 
Java 8 has library functions to address this which can hypothetically be 
properly optimized to give full performance benefit. It's still slightly 
nicer to have native unsigned primitives in C#, but practically Java 8 is 
fine.

The above three, to me feel like tired language wars points, by people who 
are already emotionally dead set of liking C# and hating Java, but in 
reality, these points don't have large practical implications and are 
trivial to work around.

- Tail Call Optimization: OK, this is important and Java is behind on this 
one. Scala has this however.

- Tuples: I looked at the new .NET 4.0 tuples in the standard library, and 
those aren't any different than any third party tuple library on Java. 
Scala and others have more native, language level tuples.

"On the Java side, we have bizarro bullshit approaches like JDBC, raw SQL, 
code generation, JPA, and a ton of other ugly, half-assed non-solutions to 
problems which shouldn't have existed in the first place."

Tons of Java technologies were terrible in hindsight or have been replaced 
by something much better. The .NET landscape is absolutely no different. In 
my personal experience, Java devs are more quick to say, the official 
product is bad, let's use something better, while .NET developers are more 
likely to stick with and defend the official product. For example, most 
Java devs rightfully hated JSF and used another alternative (Play looks 
great today). In the .NET world, tons of developers used and defended 
Visual SourceSafe until a few years ago: ugh!

- LINQ: I've used LINQ when I was doing C#, but I am no expert. Could you 
articulate what this does better than Java 8? Is it really years ahead? 
Most LINQ examples I see on the Internet can be translated into Java 8's 
functional collections (I'm not sure about join type operations) and the 
latter syntax is more intuitive/natural. Also, for external database 
access, typesafe's slick looked like a better solution at a superficial 
level (I haven't actually had the chance to use it yet).

- F#: I haven't used it, but I've heard great things about F#, and I 
suspect they are right. This sounds like a more academic, thinking man's 
programming language and that's not what the typical Joe C# dev wants. I've 
talked to several C# exclusive shops and interest in F# was very low. 
Secondly, I couldn't get this running on Mono on my Linux dev system and F# 
clearly isn't the Mono team's priority. On Microsoft forums, most people 
said to just use OCaml if you don't want to set up a Windows VM. Ocaml is 
on my todo list, along with deeper forays into Haskell, but if F# is just a 
.NET flavor of Ocaml, I can just stick with the latter.

"Maybe the Java community really needs some "the platform is burning" memo 
to wake up, stop their self-congratulatory circle-jerk..."

In my observations, even Java developers hate Java :) Or are at best luke 
warm about it. The last problem in the Java community is over-confidence :) 
There are several people in this Java forum who constantly talk about how 
terrible Java is. I don't see anything close to that type of self-loathing 
over on C# forums and I don't think that's due to product quality.

"Isn't it quite ironic that people claim that Java is the more "academic" 
ecosystem, when – as soon as some technical points are brought up – someone 
immediately attacks with the same, sore, old 
business-pov/popularity/from-authority response?"

That's not ironic at all. I use Python a lot because of all the great 
libraries and the community built up around it. I don't even think Python 
the language itself is terribly special. It's the same with Java. You have 
made some technical points against Java, several of which I agree with, but 
I still like the libraries, community, etc. I don't care about the TIOBE 
index or that kind of mass market.

BTW, I really like Java as a tool for some use cases, but I don't think I'm 
irrational about it. I use a lot of Python (numpy/scipy type stuff) and 
JavaScript for web stuff. I'm also trying to invest more learning energy on 
science/engineering knowledge rather than programming languages. I'd rather 
understand some new machine learning or data processing papers or 
engineering skills rather than learn a new programming language feature. 
However, the latter is more fun and entertaining. It's like a break from 
the hard stuff.


On Tuesday, October 2, 2012 3:11:19 PM UTC-5, Simon Ochsenreither wrote:
>
> *I first typed my response to your comments, but it looks that it became 
> more of a rant about the current state of the Java ecosystem. So nothing 
> against you, clay, your response just caused me to vent my deep frustration 
> about the willfull ignorance, the anti-intellectualism, and the denial of 
> reality which has spread through some parts of the Java ecosystem.*
>
>

-- 
You received this message because you are subscribed to the Google Groups "Java 
Posse" group.
To view this discussion on the web visit 
https://groups.google.com/d/msg/javaposse/-/NVYbE2hxl30J.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to 
[email protected].
For more options, visit this group at 
http://groups.google.com/group/javaposse?hl=en.

Reply via email to