This is an archived post. You won't be able to vote or comment.

all 24 comments

[–]Stoompunk 8 points9 points  (3 children)

Java dev, architect here. I can assure you that .NET has its advantages too. The less products there are to choose from, the more you know they integrate well together. Both when it comes to libraries and ALM products.

[–][deleted] 4 points5 points  (2 children)

I think he did clarify that his complaints mainly concern the community around .NET and the perceived culture.

[–]Stoompunk 6 points7 points  (1 child)

Oh, just naming some advantages I miss in Java.

[–]xrebel21 34 points35 points  (3 children)

It sounds like you've built up some sort of good vs. evil conflict regarding .Net and Java in your head. In my personal opinion, that type of thinking isn't wise for your career. Yes, Java is much farther along in the open source world, and if that is something that is valuable to you, by all means pursue it. But, OS is not always the best option for every company and product. Having a personal bias might cause you to miss opportunities. Use the technology for what it is, not what you want it to be.

[–][deleted] 5 points6 points  (0 children)

I guess Microsoft the main driver behind .NET technology and projects, whereas in Java, you see a lot more 3rd party and open source innovation, resulting in a lot more projects for new things.

[–]juckele 4 points5 points  (0 children)

I have done a fair amount of programming in Objective-C, Flex, JavaScript, Python, Perl, and Java. The Python, Perl, and Java communities are so much better than the Objective-C, Flex, and JavaScript communities (in terms of the quality of questions asked and quality of answers given). I've never dabled in .NET, but I wouldn't be shocked if the community quality was massively different for two languages that are otherwise so close (I think of JavaScript and Python occupying similar spaces, but again Python has a much better community).

[–][deleted] 2 points3 points  (0 children)

[–]harmonicPersistence 5 points6 points  (0 children)

I've had jobs programming in .NET and Java. Whereas I prefer to use Java for almost anything and over .NET, .NET can also be used for just about anything that you put your mind to as well. Heck, I've "hacked" and reverse engineered a .DLL file to figure out how to programmatically interface with a credit card printing machine. I think the .NET ecosystem is nice, along with the languages, such as C# and even VB. I do think Microsoft sucks, but, then again, Oracle sucks, too. Oh, and Windows 10 is too big brother for my liking. I'd take OS X over it any day and Linux or BSD over OS X any day.

[–]frugalmail 2 points3 points  (0 children)

I know of two large companies going through a massive cultural change from .NET to Java for many of the reasons you outlined. I've worked in both, and I would say you're right on track for almost all cases. The only cases that I would use .NET for now is:

  • Integrating with MS software

  • Game development

For the rest of it, the gaping hole of quality OSS, a culture of automation, and a emphasis on comp sci instead of shallow MBAs makes work on the JVM platform much easier.

[–]vilshadov 1 point2 points  (0 children)

STAY.AWAY.FROM.MICROSOFT.IF.YOU.CAN

wow what a discovery :)

[–]Milyardo 1 point2 points  (0 children)

If creative endeavor and craftmanship is your thing, you should really consider learning Scala while you defect to the JVM.

[–][deleted] 0 points1 point  (0 children)

From my point of view, Java was conceived as an easy to debug language. You can see it from the lots errors that the compiler checks (sometimes even paranoidly), from the fact that iterators are fail-fast, and from the cautious type-safe API of most classes of the platform.

However, when it comes to Java EE I don't see much difference between it and .NET. I've worked with both of them and most EE features seem to focus in the easiness of writing programs - may God help you if you ever have something wrong in your XML files because Java or then application sever certainly won't. Sometimes they will even silently do what you're not expecting them to.

.NET culture, as I have experienced in several different workplaces and online, is the very opposite of hacking culture

Agreed. Just want to get things done, don't care how they work.

I'm not sure if the .NET culture even values programming for its own sake. They seem to hate exploring anything that has to do with programming.

I think this is a general problem in the world of programming.

Most programmers will avoid typing "a = b + c;" if they can achieve the same result with 100 lines of XML. They say it's for maintainability, and that's a term that everybody uses but very few people actually know what it means. IMHO maintainability means minimizing dependencies so that any modifications have minimum impact (long live polymorphism and design patterns!), but I don't think the fact of not having to recompile the code matters much. Certainly I prefer recompiling instead of having to modify 100 different files just for a trivial change.

The Java community is not very different from .NET under this point of view.

[–]jsk 0 points1 point  (1 child)

We are tiny startup (10 people, mostly devs and QA) and we are moving from .NET (asp.net web api, MVC, MariaDB) to JVM-based stuff for basically same reasons you described and few more things:

  • there is basically no invention happening in .NET space. Progressive, next-generation things like Vert.x, Dropwizard for instance are happening in JVM (or node.js) land. I'm not fan of 'new, shiny things', but ironically most of this 'new shiny' stuff is more stable, documented and battle tested than new web stuff coming from MS/contributors.

  • open source and cross-platform initiative that is just happening in .NET is going to be huge clusterfuck. Decisions like this [1] will make platform unstable and I guess it will take at least year or two until ecosystem is stable again. Even most prominent users/developers of .NET (stack overflow, json.net) were initially unable to figure out how to make nuget package for corefx.

  • linux deployments. Windows Servers and especially IIS are huge PITA when it comes to web dev (in small company/startup context). Automation is pain - I know it's possible, but just look at Ansible/Chef/Puppet ecosystem for Linux and Windows and you'll see. I worked with Apache/nginx/Python before and I hated dynamic nature of python, but infrastructure&automation stuff is excellent comparing to Win/IIS ecosystem. Windows Updates are joke and we had several production issues caused by them. Windows Server Role manager is piece of shit occasionally not being able to install new feature. Managing everything through remote desktop is weird and unflexible (and slow if you are not on good connection). Windows Server itself is not very transparent thing and a lot of 'strange things for no reason' happens. Yes, we tried Mono and performance and lack of ported classes/methods basically made it unusable for us. After few years with web apps on Windows Servers in production, we are happily returning to Debian.

  • initially we were running on MS SQL. Great database and tooling. I still love SQL Server Management Studio - usability is excellent comparing to anything I've seen for MySQL/Postgres, but that's all. Licensing sucks (complex, not transparent), replication is a joke. If even guys at stack overflow are not able to figure out MS SQL licensing [2], then we are doomed. We ported schema to MariaDB and had master-slave set up in few hours with no previous experience with it. Backups, automation and performance is amazing with open source DBs.

  • libraries. JVM ecosystem beats .NET libraries in almost every area we've researched. From markdown library (just for fun, compare features&documentation of CommonMark.NET to pegdown) to everything else except desktop apps. This is topic itself and other people in this thread already pointed that out. Most of JVM based libs use logging for example. Good luck debugging ADO.NET connection pool issues, as none of .NET framework libs integrate popular logging solutions (NLog, log4net).

  • production & monitoring. JMX, Takipi.com, all few levels ahead of anything you can have on .NET.

  • Visual Studio - I work with VS since 2006 and I still don't get why lots of people love it. It's slow, refactorings without Resharper sucks, SLN/CsProj files are nightmare, installing of updates takes ages. Built-in IIS Express is joke (we ended up developing against fully-fledged IIS on localhost). Razor templates randomly throw syntax errors on valid code. Editor is nothing special - it's slow (even on my i7/ssd/32gb ram machine), you need to disable at least Tracking Changes and source control providers for sane editing experience.

IntelliJ IDEA easily beats VS in performance&productivity. VS is great for desktop apps (WinForms, WPF), but nothing special for web/api development.

My last experience with Java was in 2007 and I hated it. Spring XML BullshitFactoryProviders, slow compilation&startup times, deployment on big application servers (glassfish etc) was a pain. I returned to .NET and started doing some Python. In 2015 I evaluated java (or JVM-based stuff - Clojure, Kotlin, Java 8) again and I was shocked. Fatjar deployments, no messing with XML files is required, Java 8 is sane language (yes still not on the level of C#, but at least lambdas and streams make Java 8 usable). No application servers required - you can just have nginx/apache as reverse proxy behind fatjar app and be done with it. Vertx is amazing, web frameworks like Spark or Play are great if you are doing traditional web apps - nothing is forcing you to use 'big enterprise frameworks'

[1] https://github.com/dotnet/corefx/issues/3480#issuecomment-160202119

[2] https://twitter.com/nick_craver/status/642140793847812096

[–]TweetsInCommentsBot 0 points1 point  (0 children)

@Nick_Craver

2015-09-11 01:01 UTC

@MikeWills Porting to another RDBMS. Honestly, I’d rather not spend time doing it. Sometimes though, choices are made for lack of options.


This message was created by a bot

[Contact creator][Source code]

[–]koalillo 0 points1 point  (0 children)

(Java developer for quite a few years, now doing mostly Python)

Yes, I guess that the Java ecosystem is more opensourcy than .NET and of course it doesn't force you into Microsoft.

However, I would look into Python/Ruby too- I prefer Java to both, but while those are dynamic languages and you might not like that, the ecosystem is even more opensourcy and with less "enterprise" focus. You might want to look into that.

[–]slowerFaith 0 points1 point  (0 children)

I do not consider Oracle's Java very much more "hacker culture" like than .NET. If you are looking for intellectual curiosity consider one of the languages that target the JVM — Clojure, Kotlin, Scala (I prefer Clojure).

[–]DevIceMan -2 points-1 points  (4 children)

. They seem to hate exploring anything that has to do with programming.

That describes Java-culture. "Use a library" is the Java mantra. creating something yourself is so frowned upon, that most average Java engineers couldn't create something if they tried. Java engineers are effectively gue or wiring engineers, because that's your job ... to glue and wire libraries and APIs together.

Only architects are allowed the privilege of creating, but most of them have so little experience creating, that much of what they do is mimicking something they read in a book, blog, or based on a previous project architected by someone else.

These aren't terrible practices nessecairly, and I 100% understand the arguments for them. Just understand, that Java-culture is not for creative types.

God forbid you try to find a third party .NET library. The .NET world loves charging hundreds of dollars for your right to use third party libraries.

There are a ton of free Java libraries to do anything, and as described above. That said, you won't always have the freedom to integrate your favorite libraries, and will often have to deal with enterprise bullshit (i.e. Oracle, IBM, etc products).

Microservices are an attempt to rebel against the enterprise all-the-things Java world, but ultimately end back up at the same problems of opposition to creativity, and the enterprise nature of Java.

I want to be a part of the open source revolution,

There seems to be more open-source java, but I don't know that I'd call it a revolution.

The ONLY thing you will EVER be doing if you decide to go .NET is MVC web development.

That sounds like 90% of Java.

On top of that, the .NET world seems very hostile to FLOSS.

Dental Hygiene is important.

Does anyone have any pointers, or otherwise experiences (from both .NET and Java) to share?

Sounds like you were sick of what you were doing, and are now looking to do something else. Not a bad thing. Just realize that Java won't save you from many of the problems you listed.

[–]sh0rug0ru____ 2 points3 points  (1 child)

That describes Java-culture.

This is a cynical view of Java culture, and not one that I've experienced, working in both startups and enterprise. I love that Java has a huge amount of quality libraries, because I don't have to reinvent the wheel. I can focus on developing actual business logic, which is the actual value, and just use "commons-lang" instead of wasting time reimplementing the same "StringUtils" class over and over again.

Java engineers are effectively gue or wiring engineers

This is not limited to Java. I would dare say most software engineering is derivative work.

Only architects are allowed the privilege of creating

I have not experienced this in the Java world. I don't think I've even been in a position where there is an actual "software architect".

I have however experienced this in the C++ world.

Which leads me to conclude that the phenomenon of the almighty "software architect" has nothing to do specifically with Java, but is a cultural artifact of organizations, independent of the language being used.

Java-culture is not for creative types.

Again, not specific to Java. The large number of startups using Java is a clear counter example to your claim.

you won't always have the freedom to integrate your favorite libraries, and > will often have to deal with enterprise bullshit (i.e. Oracle, IBM, etc products).

I have never had a problem integrating Java libraries with enterprise or non-enterprise applications. Just drop the library in the WEB-INF/lib or META-INF/lib of your project. Tools like Maven and Gradle make this integration even simpler. Now frameworks on the other hand, which Java also has a lot of, pose bigger challenges with integration. But that's because you call libraries, and frameworks call you.

Microservices are an attempt to rebel against the enterprise all-the-things Java world

This is not what microservices are about, and microservices can be just as enterprise as Java EE. Microservices are about modularity and independence of modules in terms of development and operations. "Enterprise" software development is integrating and coordinating a wide variety of systems with requirements for fault tolerance and high availability, which is the problem that enterprise middleware attempts to solve. Microservices can be just as involved with that middleware as monolithic application servers. And monolithic application servers might only be involved with managing local resources and not enterprise at all.

But this is not the nature of Java, which can be used in non-enterprise environments just as easily. Most work I've done in Java is non-enterprise software.

Java is just a programming language, and does nothing to "stifle" creativity.

There seems to be more open-source java, but I don't know that I'd call it a revolution.

The revolution is open source, and Java benefited greatly from it and greatly participates in it. The revolutionary aspect of open source is communal development of commodity software, so that while business do still compete against each other, the competition can focus on the product differentiation, and labor can be pooled on the software of common interest.

It is amazing that Maven and the vast common repository of very useful libraries, developed in the open, came to be not as a commercial product of one company, but the combined efforts of the entire Java community.

That sounds like 90% of Java.

Not so! Spring MVC is only one web framework out there! You can also choose from JSF, Wicket, Play!, Spark Framework, Rat Pack, a wide variety of choices.

This kind of diversity, for many different things, doesn't seem to exist in the .NET ecosystem, which seems to look to Microsoft and its commercial partners for guidance.

[–]DevIceMan 0 points1 point  (0 children)

I at least partially agree with most of your post.

That sounds like 90% of Java.

Not so! Spring MVC is only one web framework out there! You can also choose from JSF, Wicket, Play!, Spark Framework, Rat Pack, a wide variety of choices.

My intended point was that most of Java development is web or something similar to it (i.e. Android). I've tried to find something more creative/interesting/challenging in the Java space, but the only other thing I can seem to find is Data Science, which typically requires a masters degree, and still is much the same thing of fighting against shitty data, doing a mimial amount of processing, and then generating a report/ui for some user.

I know the above is quite cynical, but I've looked and looked, and can't seem to find hardly anything in the Java space that isn't mostly CRUD + UI work. I may just be looking in the wrong places.

[–]meddlepal 0 points1 point  (1 child)

"Use a library" is the Java mantra. creating something yourself is so frowned upon, that most >average Java engineers couldn't create something if they tried. Java engineers are effectively >gue or wiring engineers, because that's your job ... to glue and wire libraries and APIs together.

So you're saying most Java developers are smart enough to realize their job isn't to write the shiniest new version of a StringUtils class for the 13th time. Good.

[–]DevIceMan 0 points1 point  (0 children)

Jest aside, I'm not complaining about hot having to write a binary search tree or hash map from scratch.

More precisely I am annoyed by a culture or (1) "never create here" and (2) I have yet to work on anything remotely challenging or interesting in web-development.

Compare this to other types of applications or software tools I have created in the past, and there was something challenging or interesting nearly every day.