Hacker News new | ask | show | jobs
by caustic 6417 days ago
From my experience of working with both Java and .NET I can say that: the weakest part of the .NET technology stack is community, and the strongest part of the Java world is community which produced the huge pool of quality, free and open-source frameworks. Currently Maven repositories count for more than 14,000 unique artifacts and almost 60,000 versions (http://www.mvnbrowser.com/faq.html).

C# is a nice language, but when you have to develop a real-world application, it does not help much. .NET simply lacks too many essential tools and frameworks. You can do basic things with it, but when you have a non-standard task at hand, you are alone to implement the solution by yourself or pay for crappy third-party closed-source component. Even for trivial tasks. Want a decent HTML parser to sanitize HTML documents? Write it by yourself or pay for crappy third-party closed-source component. Want to read email messages from the server? ... you got the idea. The list goes on and on. I am currently working on a C# project which has integration with source control systems. We had to invest a lot of time to write our own framework and providers for several most widely adopted tools, such as Subversion and Perforce. If we based our project on Java, we would saved lot of time on development by choosing Maven SCM providers, which are free and open-source. Another example is that we needed a decent audit history for the documents in the database. Again, we had to develop somewhat working home-grown solution. If we based our project on Java, we would simply pick open-source Envers framework (http://www.jboss.org/envers/) which does exactly what we need for free.

And I hate Visual Studio. It offers a little more than a notepad with syntax coloring and debugger. It is horrible for coding and those variegated wizards and diagramming tools don't make me productive either. Being unable to attach third-party source codes is a huge PITA. Eclipse in size is just a fraction of the VS installer, but still is feature-packed, better for refactoring and has a plenty of plugins. Speaking of IntelliJ Idea, it's simply the best IDE ever.

.NET build and CI tools suck, there is nothing to compare with Maven.

If you like to learn new languages, I think there is nothing to beat JVM in terms of variety programming languages running on top of it. Just for example, the most notable ones are JavaScript, Python, Ruby, Groovy (Python-like language with Java-friendly syntax), Scala, Clojure (Lisp-like), CAL Language (Haskell-like) and many more. By the way, JVM by itself is quite a decent piece of engineering.

My experience makes me think that Microsoft is trying to be popular at any cost, targeting inexperienced programmers, intentionally oversimplifying their solutions, making simple things trivial, complex things impossible. The Microsoft culture is to give you a big bright flashy button, which does a lot of things under the hood, but when accidentally it breaks, you are unable to guess what is going on and how to fix it. Living in the world of closed-source .NET code makes me cry.

So the conclusion is: choose Java over .NET, but learn more uncommon programming languages as well. Haskell, Lisp and Prolog were huge "brain-washers" for me.

3 comments

Want a decent HTML parser to sanitize HTML documents? Write it by yourself or pay for crappy third-party closed-source component.

Sounds like a fantastic platform/market, if you want to write great components and sell them.

To add to the list of examples of places where you have to roll your own:

At my company we needed a simple CSV reader for a file submission. That's it--just something that could read CSV files. We figured that had to be available in classic .NET We look around, dug into forums, and finally got in touch with the local .NET user group guru. The ideal solution? Use MS's communication tools to open the CSV file in excel and read it there. Or? Roll your own.

We ended up doing the thing in python and imported the csv lib.

To be honest, you didn't look hard enough. There are multiple, mature OSS projects to handle this.

Where should the framework end? People complain all the time about the size of the framework, but then when their pet feature is missing, they cry foul.

So, uhm, to bring that back to the OP's question:

I would go with Java, out of the two. It's as verbose as C#, but has, in my experience, much better support for pretty much everything.

What if you want to sell software components/libraries? Which platform would you choose?
From my experience - Java will get you a much larger audience, but .Net audience is more happy to pay for tools/libs. In .Net pay-for is the norm, in Java open source is the norm. Opportunities on both sides.

The main other issue on the .Net side is if you get in the way of MS - the will just run over you and make you irrelevant.

Do you have examples of MS running over companies that got in the way? What should I avoid to prevent that?

I am thinking of selling a somewhat unconventional and new (for the mainstream, like Lisp) programming tool. I thought that the .NET community will be less reluctant to try such a thing because MS is pushing new things like F# too. What do you think?

Microsoft is pushing (relatively) fresh ideas into the mainstream, but in my experience the overwhelming majority of .NET programmers aren't interested in new things that don't come from Redmond. caustic said it more generally: C# has some nice language features, but Java has a more sophisticated and open-minded community.
I think you'll find an equal portion of developers on any platform are eager to try new things.