- 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.
