Java EE or .NET - An Almost Unbiased Opinion

Arguments pro Java EE:

  1. Java EE has better OR-support than .NET. JPA, Hibernate etc. .NET comes with Entity Framework, but it isn't as lean as JPA. In .NET land there are some ports from Java available like e.g. NHibernate. .NET seems to more rely on stored procedures, whereby in Java we prefer (sometimes are obsessed) to keep everything in domain objects outside the DB.
  2. Build systems and CI tools in Java are more advanced. Hudson + Maven / ANT is a really nice and lean solution. On .Net side you can use NAnt or a proprietary MS tool.
  3. Community: Java community rocks - in .NET you have to rely on MSDN. However - this can be considered as advantage and disadvantage as well. You will (always) find an answer for your question for free.
  4. Java is the most popular language #1.
  5. Java IDEs: If you are thinking about .NET vs. Java EE you have already allocated some budget for tooling (otherwise the choice would be obvious). In that case you should look at IntelliJ first. It is the best, commercial IDE. If you are looking for free IDEs, start with NetBeans (best out-of-the-box experience) and Eclipse (the most popular one). Java tool ecosystem is remarkable. 
  6. Integration: Java integration story is excellent. You get connectors for SAP, AS400, files etc. for free. ESBs, LDAP servers are free.
  7. Framework / Libraries: If you need a specific library - you will find everything in Java. Before you are going to write a single line of code you should do some research first.
  8. Strategic consideration: with Java EE you are truly vendor-neutral. This is very handy in the price-negotiation phase. You can even go into production without any costs (subscriptions, licenses etc). Java EE apps are very portable. Java EE is not even dependent on Sun - it was developed by all major vendors.
  9. Stability: Java language is stable for ages. There are no breaking changes. Java EE 5 and 6 platform is backward compatible as well. So you can deploy your legacy J2EE 1.X app to a Java EE environment and smooth-migrate it (if you like to).
  10. Best practices: Java EE / J2EE are about 10 years on the market. There are many applications out there. The most mistakes are already made - the best practices / patterns are very mature.
  11. In most of the .NET projects you will find opensource extensions, as well as, commercial .NET tools. Such a mixture can be very "interesting" (regarding support issues)
  12. Operating System: you can choose whatever operating system you want to for production and development.
  13. Opensource: 80% of Java applications in production are built on opensource tools. This is your ultimate insurance.

Pro .NET:

  1. You get everything from one vendor.
  2. C# develops very fast. It has nicer features, than Java. C# shines in the DSL area. LINQ is very nice for database (and tree-like) queries (however you should look at Scala and Groovy if you need similar features).
  3. You don't have to search for a given solution. The choice is clear. It can save you a considerable amount of time.
  4. You will find most of the tools at MSDN - there is no need to evaluate tools and IDEs in advance.
  5. Visual Studio .NET is a very good environment with very good DB and team extensions. With a commercial plugin (like e.g. Resharper), it gets a good, as IntelliJ.
  6. The UI best practices are more consistent, than in Java. ASP.NET MVC is e.g. the way to go in .NET. In Java EE you will have to choose between JSF, Wicket, GWT, Struts 2....
  7. The language integration in .NET is seamless. You can easily call methods from C# to VB.NET. In Java it is hard to call Scala functions from Groovy.
  8. SharePoint, Exchange and Office Products are very well integrated with .NET. You can access them with Java, but will need third-party libraries.
  9. Continuous Integration comes already with Visual Studio Team System.
I forgot some arguments for sure - what is your opinion?

Comments:

Pro Java: Frameworks from large companies like the Webdynpro Framework from SAP (and the whole SAP SOA Solution) or the Webtop and DFC Solution from EMC Documentum are based on Java EE. As a Java developer you can learn such frameworks really fast an integrate them well with other (open source) libraries like reporting tools (Jasper reports)

Posted by Jens on September 10, 2009 at 12:48 PM CEST #

Nice post! I just wandering whether it will trigger 'religious' discussions :)

Anways, I would split the #2 item in pro .net in several liners - makes it easier to read.

Posted by Siarhei on September 10, 2009 at 12:58 PM CEST #

Hi Adam

I find that the biggest stumbling block in the Java EE vs .Net debate is that Java is seen as being slow, and not having the performance to be able to cope with large enterprise applications.

It is very difficult to move forward in discussions when this is constantly brought up.

I suppose the simple question is this - Is Java EE slower than .Net?

Having asked the question, I'm pretty sure there isn't a simple answer, but i would like to hear opinions & thoughts on the matter

Posted by Tim on September 10, 2009 at 01:57 PM CEST #

Tim,

Java is faster, than C# - I will try to find some links again.

It doesn't matter whether Java EE is going to be slower or faster than .NET.

In all of my past projects the problem was not the platform, rather than the application design. A single bottleneck or DB-lock can take down the performance of the whole application.

E.g. the overhead of transactionality, security etc. in EJB 3 is only few millis: http://www.adam-bien.com/roller/abien/entry/is_it_worth_using_pojos And this doesn't matter in the practice.

thanks!,

adam

Posted by Adam Bien on September 10, 2009 at 02:25 PM CEST #

Thanks Adam,

The links and just this blog alone will be very helpful

Posted by Tim on September 10, 2009 at 04:07 PM CEST #

@Tim some low level java vs. c benchmarks (via azul systems blog):
http://blogs.azulsystems.com/cliff/2009/09/java-vs-c-performance-again.html

Posted by michael bien on September 10, 2009 at 05:04 PM CEST #

Great comparison Adam!
Having developed in both, I really agree with the number of frameworks/solutions in JEE vs. limited selection/straight forward .NET. I find as a consultant getting started in a new client's Java stack can be a challenge, where I basically know what I'm getting on a .NET project. However, later on in the project when we're running into complex issues on the .NET project I find myself "wistfully" looking at all the Java Community solutions I could've used.

Posted by Wes on September 10, 2009 at 06:02 PM CEST #

I pretty much agree with Adam in that when I do .Net, I end up hogtied because I can never stay in the Microsoft predefined happy path. In the long run it doesn't save time.

Some other notes. VS.Net, even with addins - is not as good as Eclipse, let alone IntelliJ. ASP.Net MVC is still in infancy and even when mature is not the "way to go" for all things. You also don't get everything from Microsoft. Otherwise there would not be such a large third party market. I hardly find anything in MSDN.

Posted by Mark on September 11, 2009 at 04:56 AM CEST #

Both platforms are comparable but the only problems is of standards.

If stick with something that is built on standard and there are competitors working on those standards and then everybody is kept in check.

If you invest in .NET and tomorrow MS got a fancy idea, it won't give a damn about your investment and implement it just to look it nice against Java.

There're broader things to think about than some language esoteric being introduced in C# everyday.

Posted by ranjan on September 11, 2009 at 09:04 AM CEST #

Pro Java: In .Net the unit of dynamic loading is the .DLL - need upfront decision to get them right. In Java Every class can be dynamically loaded - no foresight is needed

Posted by Itay Maman on September 11, 2009 at 09:56 PM CEST #

Pro Java: EMF and the tight integration of MDSD/MDA concepts in Eclipse.

Pro .Net: If you are interested in game development, then you should stick with XNA. That was the way I got in touch with C# :-)

Posted by Thomas on September 12, 2009 at 01:44 AM CEST #

You get everything from one vendor.

It's more like you are tied-up to one vendor and whatever it decides how much you should pay or if you should continue breathing.

Compare Java and Mono development.

Posted by Mustang on September 13, 2009 at 02:50 AM CEST #

You don't have to search for a given solution. The choice is clear. It can save you a considerable amount of time.

That is not exactly a plus either. In Java there's a lot of choice, sometimes too much I know but you can chose to use a tightly integrated package from BEA or a consolidated stack like Grails. You are most likely to still be able to remove a component and replace with some other that fits your needs better and still is widely used and supported.

Posted by X on September 13, 2009 at 02:55 AM CEST #

Adam, Is the "almost unbiased" subject intended to be taken seriously? Seems definitely skewed in favor of java.

To clarify, I'm not saying one is better than the other. But it definitely feels like you don't have much .NET experience. I've got about 4 years development experience in each, and I still don't feel I'm up to the task of providing an unbiased opinion.

Posted by turtlewax on September 15, 2009 at 07:43 PM CEST #

Turtlewax,

I'm working with Java since 1.0 days in projects, and evaluating .net periodically. I have much more experience with Java, than .net. However, I built already several .net apps as well.

But if you see some .NET advantages over Java I didn't listed - just drop a comment!,

thanks!,

adam

Posted by Adam Bien on September 19, 2009 at 03:05 PM CEST #

A welcome discussion, gentlemen. A question: I have been chartered in making a decision for my company. We need a web based application. Options:

1. To select an integrated application that was built and serviced over 25 years by a company comfortable in its position in the market. Built on a windows platform, built specific to my industry, but now they have "transformed" that application to an "online product" they swear is .net platform, not thin client referring to it as "browser based". It is a global application, having much history of client usage, however the web application is fairly new, probably developed with same influence and team as coded the windows based application? Customization would be costly, hardly any freedom to customize the application without penalty, long waits.

2. A java application, built from scratch for web deployment, more general with direct access to the programming team/project managers. The application features 1 time setup to wrap it around our business, with a healtht tool-set. Highly compotent team, impressive end-to-end application, satisfies 80% of our needs, the other 20% would be customized with minimal investment.

Suggestions?

Posted by Adumbrate on October 02, 2009 at 04:53 PM CEST #

I have feet in both worlds. I think dotnet's is both advantaged and disadvantaged being basically a single vendor solution -- and a costly one at that. The cost to entry for dotnet based projects can be staggering and this is assuming of course that the development toolset and servers are licensed and hence paid for. I also find Microsoft overly complex and bloated. Your ORM example serves pefectly to highlight this.

Visual Studio is the only real solution for dotnet development and as such has to be the best ide just by default. Yes there are ides for MONO but I don't consider them viable yet. Visual Studio's tooling features (code generators) are excellent and this is a good thing because they hide the complexity of the technology you are trying to implement -- take strongly typed datasets (which I use a lot) and their associated xsd and class files. I'd never use them if I had
to code all that by hand.

The biggest disadvantage for java based solutions is the quality of documentation if you are lucky enough to find any. I find the gramatical errors in much of the documentation renders them close to useless. It is a shame that on many opensource projects documentation and localization of documentation is nothing more than an after thought at best.

But honestly, I love Java and I think it is a much cleaner and leaner solution for any application/system that does not need to integrate with any proprietary Microsoft server based technology. Given the choice, I'd go with Java in these situations. Also, I consider Wicket to be the best web framework I have ever seen and being a java based framework just endears it even more to me. It is perhaps the greatest thing since sliced bread lol.

I don't agree about IntelliJ though. I keep trying the new versions when they are released but so far I don't see any benefit it has over Netbeans which I consider the number 1 Java development ide available today. The things I do in Netbeans like EE apps seem overly complex to wire up using IntelliJ. Perhaps I just don't know IntelliJ well enough to know that I don't know how to use it and configure it properly. Netbeans in my opinion just rocks right out of the box so to speak. And the fact that it is free is the icing on the cake though (shhhhh - don't tell anyone I said this, please lol) I would even pay to use it.

Thank you for your many interesting articles. I enjoy reading them and following along with you on your numerous projects.

Sincerely, Jeff
http://jeff-schwartz.blogspot.com/

Posted by Jeff Schwartz on October 02, 2009 at 05:24 PM CEST #

Adumbrate,

Anytime you have the ear of the development team it is a far superior experience for a company. Apples to apples, in your situation, it is not a matter of java vs .net, but instead, which team will hear your requirements and develop quality work based on your needs. Generally speaking, because business climates change, customization flexibility would be a better choice, long-term. You don't want to be back in this position to choose another application in a couple years because system restrictions force you to make another selection to achieve objectives.

Good Luck.

Posted by GoogleMan on October 02, 2009 at 06:55 PM CEST #

In Java field, we even do not need to spend a cent in development tools, all free but excellent: Netbeans, Eclipse, Tomcat, Mysql, Linux Fedora..All those sweet tools made me happy in my past several years.

Agree with Mark, In the long run it doesn't save time when choosing .NET. When we're working on some big website(or ecommerce platform), we're pretty sure the site will be live very long(perhaps 5 ~ 10 years or even more?).. The open source community will keep open and free, however what will Microsoft do 5 years later? Once they changing their policy in using Visual Studio or MS SQL Server, we will be really hurted.

Java's write once, deploy everywhere principle and its open source communities - that makes us really happy life and yes, vendor independent... I would not get any problem if Sun was merged by Oracle - they both are Java Vendors, however I rely on free java communities.... thinking only if MS will merge Sun, however apparently MS has built a drunk MicrosoftJ in past several years and now it's in MS's recycle box.

Also, Java's deployment in Unix/Linux servers has made me lots fun. Linux deployment is really fast, and its remote control is far so easier than Windows systems. All my projects are now running on many linux servers. They are all stable - and run fast, and can be easily managed remotely. this is where my happy life comes.

I will continue my happy life with Java/J2EE/Linux, will u?

Posted by John on October 04, 2009 at 01:43 PM CEST #

Adam,

I think that you miss the point stating that JavaEE has better ORM support than .NET.

While, probably, being true, the statement completely ignores the fact that .NET is much more open towards the database community than JavaEE is. With LINQ (which, by the way, is way more elegant than this ugly new fully typed JPQL API) Microsoft is open towards various kinds of data sources (not only relational ones).

I'm afraid that, in this particular case, it is Microsoft that is open (and Oracle that is closed). Not surprisingly: Oracle is an important (rather conservative) player in the relational database world.

If Java continues to position itself on the conservative side of the road, it is going to loose more and more fans.

Luc

Posted by Luc Duponcheel on October 12, 2009 at 12:01 PM CEST #

Luc,

but: LINQ is actually only usable with SQL database behind it. It is possible to query data structures and XML - but this are only rare cases (did you used that feature in projects?).

Btw. I wouldn't classify LINQ as ORM, rather than an object oriented query facility.

I'm glad, that you agree on all other points :-).

.net world tries to copy Java sometimes - nhibernate is very popular. However, it isn't as mature, as the hibernate.org original.

thanks for your opinion!,

adam

Posted by Adam Bien on October 12, 2009 at 12:11 PM CEST #

A stong point on .NET is the client side application part. In JNI you mostly need a C++ compiler to create a bridge and a Java part bridge. Most of the cases either C++.NET or C# (for C based APIs) can handle without two languages bridge.
If the application is not exposed in a browser makes much easier to get the knowhow of the desktop application and to reuse it to add a server side functionality.
From my experience the JIT of .NET is not so "adaptive" as Java does, so may lose some performance on server side, but in most cases it gives "just enough". Based on this, I think that on a long run,

Posted by Ciprian Mustiata on October 12, 2009 at 01:35 PM CEST #

There's a lot of good information here for anyone considering coding something in Java or .NET.

Considering the ease of coding in ASP.net and the fact that it's at least as fast as Java, I personally could not see using java for anything web based these days....

Also I would like to point out two things:

I strongly disagree Java is more stable. I constantly have hello world apps crash, java updaters crash and this is more than one computer simply because the Java platform is buggy.

Also, I do think there are more IDEs available to Java but I cannot even count Eclipse as one of them. It would be a decent editor but it likes to freeze up for lengthy periods of time, and crash a lot.

Posted by Dean on February 14, 2010 at 12:10 PM CET #

Asking which is better Java or .Net is not good question, or which one is open source is again not good question, but asking which one makes the life easier for the mainstream developer is the question, also beside this another one might be which binary is more optimum relative to the hardware (this not easy question), now let us look at the easier one, regarding the easy life for the developer, here definitely is .Net and here are the basic simple reasons:
1- Both platforms are composed mainly of classes, but their hierarchies are different, yet two solutions can be implemented in both (here the Microsoft team responsible for the most optimum code to use to build their classes seek help from the kernel writers the management dll (sources only available to them), …etc
2- Both platforms are basically semi-interpretive (Produce opcodes)
3- Now the main difference and big setback for Java is the IDE that is the cooperative and supportive tool for various phases of the development life cycle (do not forget MSDN)
4- The supporting libraries and components written for .Net are much more than the once written for Java
The above 4 points prove without any confusion that .Net platform is easier to use (more productive and less costly per line of code) and also the code produced (for windows only!!!) is more efficient in case of .Net

Posted by Najah Talia on February 27, 2010 at 01:45 AM CET #

I would say VB.NET is by far easier, but only because I took a course on Java and a course on VB.NET, and for VB.NET i had visual studio to work in, and notepad++ for Java.

I think their is more of a demand for .NET applications then java at the moment.

Posted by babor7111 on May 08, 2010 at 03:09 PM CEST #

Adam,
you've forgot one argument against Java and pro .Net:
Delegates that allow lambada expressions that are at the heart of Linq.
Also I hate Java's named conventions versus .net's properties when making beans.

Posted by dmihailescu on July 10, 2010 at 12:01 AM CEST #

One of Adam's comments was very telling: 'This is your ultimate insurance.' You can't ignore what worries you, and Java promotes that they are the choice when vendor lock in is a concern. It really doesn't matter if it will actually take more effort to move an app from Weblogic to Webshpere, than to port from VB6 to C#. What matters is what calms a person's fears.

People have deep emotions around this, as they personally identify with the technology selection. I've seen poeple get less emotionally involved when their nationality was directly insulted.

There may be some hidden need to belong to a group that causes this, or the need to promote an underdog against a successul corporation. Either way, there are enough intense feelings that give rise to anger and hate about this. It's truly a mystery.

Posted by dg on June 09, 2011 at 03:16 AM CEST #

The questions whether J2EE or .NET is better creates as much cords as in the comparison between Apple or Microsoft.We all have seen that.
However, it depends on what you want.The large enterprise applications are better with Java.Whereas, .NET is faster than Java certainly.But maintenance of .NET is crippled.

The solutions for enterprises or web applications should be thoroughly analysed, pros and cons processed through rigorous technical aspects.Only then the platforms should be chosen.

Posted by pavan karwa on June 14, 2011 at 12:28 AM CEST #

Love the topic. I started my career with Java back in 1999. Java was cumbersome back then. I've been doing .Net for the past 10 years, but have stayed abreast of the Java world. Every few years Microsoft and the Java world would come out with something new that would push one past the other in my opinion.

They are both growing and evolving. Java stole from Ruby on Rails, then so did Microsoft with MVC. They go back and forth. Microsoft came out with WPF (Windows Presentation Foundation) which I haven't heard anyone mention probably because so few people are doing thick client development these days, but that framework has no comparison in Java. JavaFX would be the closest, but feature wise and in design there is no comparison. They have WCF too which is great.

Java EE 6 has massive improvements from 5 years ago which my opinion make it the defacto java platform going forward.

I think both platforms are moving in great directions and in similar directions. Both are stressing agile development TDD qualities which is nice. Both have great architectures in their application platforms.

Adam, I got both your books last week. They are excellent and will help me get up to speed on Java EE 6. It's been ten years since I've worked in the Java world, but now that platform is too good not to use. Java EE 6 has passed Microsoft in some respects. Let's see how Microsoft responds. Ain't competition grand. It's a win win for us.

Posted by Justin Stuparitz on July 27, 2011 at 11:35 PM CEST #

Java is notoriously slow. in fact, it was initially developed for SUN's slowlaris.

Posted by aa on November 06, 2011 at 06:12 AM CET #

@AA,

I love objective and well-founded feedback. Thanks for your comment!,

adam

Posted by Adam Bien on November 09, 2011 at 10:08 AM CET #

This is clearly a Java marketing campaign. An example; Your #10. Not once in the “pro’s” for .NET do you list that Framework 1.0 is at least 11 years old, therefore, making #10 a strong point for .NET in addition. But you don’t even mention that. Not once do you mention as a “con” to Java, the poor controls, un-managed open-source difficulties, library issues, IDE weakness, JVM nightmares, massive slowness and bloatness, and not to mention “hope you chosen the right path because the rug might be pulled out from under you at any time”… I’ve been involved in both technologies for some time (10 years), and I’ve watched Java projects get “re-factored” (basically a complete rewrite) every 8 months or so because of the “open source” pro’s you list. Java = high cost to implement, change, and deploy. Java does not equal RAD.
No I'm not an expert, but at least don't call this unbiased.

Posted by chris l on January 06, 2012 at 05:44 PM CET #

I believe that Microsoft's .NET technologies and other Microsoft Visual Studio technologies have a lot of backward compatibility issues.
We had a Visual Basic 6.0 application running on Windows 2000. Our client firm wanted to upgrade to Windows 2008, but there were a lot of compatibility issues. Therefore, we could only migrate the Visual Basic 6.0 from Windows 2000 to Windows 2003, and even then we had to do some weird unconventional moves like copying dlls from Windows 2000's System32 folder to Windows 2003's System32 folder.

Posted by doeBart on January 10, 2012 at 07:10 AM CET #

Oracle could move away from Oracle's Java implementation is open source at the present time

Posted by bart doe on January 10, 2012 at 07:34 AM CET #

Oracle could Move Away from keeping it's Oracle's Java implementation as an open source.

It's even risky for corporations to use Oracle's Java Implementation because Oracle Could Possibly start charging for future Oracle's Java Implementation.

Posted by bart doe on January 10, 2012 at 07:35 AM CET #

I'm working in javaEE in enterprise application and C# in small to medium projects. and i have not used it in really enterprise environments but i thing java is hard to develope, cumbersome to configure, lots of open source libraries but really hard to integrate. .net has its own weaknesess, first is it's closed-source paradigm. which makes open source developers hate it to some extends. second one is that unlike java easy thing are easy to do, while you should make everything from scratches in java which makes easy things hard. backward compatibilitiy isuse make it hard to maintain while java is excellent at it. as a conclusion i should say that i really prefer c# and .net technologies to java, because java is hard and time-consuming to develope, while with this efforts in .net you can take the same or even better quality than j2ee.

Posted by m.a. on February 07, 2012 at 03:07 PM CET #

and i do not understand unbiased opinion in this comparision! It's completely biased

Posted by m.a. on February 07, 2012 at 03:09 PM CET #

It looks like, Microsoft just invested in C# and .net framework development. Rest all Specs are from Java which are Free.

Going Unix is going Java, Unix never needs a re-start.

Posted by Vijaykumar on March 11, 2012 at 09:13 AM CET #

Nice post, got a few things cleared about .net vs java.

Thanks Buddy :)

Posted by Sam on March 14, 2012 at 03:46 PM CET #

I usually run few projects in Java/.NET in parallel, however I still has more experience with Java so I consider myself biased, but just a bit :-) My projects are all web based applications of different sizes and complexity. Here's my 2 cents:
The main difference which strikes is a surrounding culture. Java ecosystem is heavily based on JCP and open APIs like JPA, JNDI, JDBC and other JXXXs. Actual implementations are provided by 3rd parties and OS community. That alone results in Java being around choices and .NET about following MS rules. For example, if MS decides they need to add decent ORM framework - they will just silently sit and code and then rollout whatever they created as a new shiny library available for download from MS website. Since that day all .NET developers will start praying for that library and use it as only choice in their projects. Even if alternatives exists - they are not compatible with what MS did and much less people will use them instead of "standard" solution recommended by MS.
If Java community see need for ORM - someone will submit JSR, there will be open discussion, best experts, probably authors of existing ORMs will be involved and finally new standerd API wil be born - JPA. Since that day anyone can just go and implement this set of APIs and create compatible solutions. Developers will be able to use these libraries interchangeably without a need to study new set of APIs every time. Profit.
http://jcp.org/aboutJava/communityprocess/final/jsr220/index.html

Posted by Igor on May 04, 2012 at 04:22 PM CEST #

Any good a bad programmer can screw java but its difficult to do that with .net.

Nowadays we have 95% bad programmers they are like copywriters copy paste the code and go ahead.

In such a dumb and neurotic programming world java is a like a living hell. I know and have worked in industry where in applications created using java with average developers tend to have more defects and maintainence compared to .net. reason is simple not every one is good in all the area considering, design, performance, compatibility and integration . Java tends to be more disconnected but powerful and hence its not childs play and with current trend of DUMB while loop developers java can make the programming world look worse than before.

Posted by Sam on May 08, 2012 at 09:57 PM CEST #

Hi Sam!

As for:
"Any good a bad programmer can screw java but its difficult to do that with .net."

Well ... actually it's dead easy ;-)

Posted by maS on August 07, 2012 at 08:00 PM CEST #

Java not stable in my shop (Tomcat). The stability claim should be depending on the environment.

Posted by Bamboo on August 31, 2012 at 04:52 PM CEST #

Hi,

I must also agree with the ones that say this is not unbiased.

I have been working with .NET since version 1 and haven't worked with Java, although I know some of the problems people face on deployments and so on (it's the technology used by my current company).

Therefore I can also point out things I think are missing here, but I won't try to compare them to Java.

The .NET community is also very active and the quality of documentation found is exceptional. You can ask on Stack Overflow and even Microsoft PMs pop up and

I thought other kind of features would be part of the comparison. Why no mention to WCF, WPF, WF? I understand this post is from 2009, but they were already there. Must say that with the latest version of .NET (4.5) they have improved a lot (Entity Framework too!).

LINQ is a wonderful feature and no, it's not only for relational databases (and definitely not only for SQL Server). Furthermore, you can actually combine XML, objects and EF objects on a single query!

Regarding backwards compatibility, doeBart talks about VB 6.0, which is not .NET, so it doesn't really count.

.NET solutions deployment has been improved greatly and nowadays it's really simple, although the out-of-the-box installer is quite crappy and doesn't allow to do much.

Posted by Tasio on October 12, 2012 at 02:39 PM CEST #

Hello Adam

Many thanks for a lovely post.

Do you know whether anyone has done a full TCO (Total Cost of Ownership) comparison between Java, .NET, C/C++, Python, etc.?

Given the current difficult economic climate worldwide with companies focusing as much if not more on increasing the downwards pressure on costs as they are on revenues and profits, the choice of technology stack for a company's enterprise architecture is increasingly important. Such a choice should not be made on a whim. It should consider both the big picture and the minutest technical details and everything in between. It needs to be business-focused and find a formula to help a company to get increasingly more value from its technology choices. It needs to allow a company, over time, to become increasingly more loosely coupled to anything and everything that is not germain to its business domain(s).

It needs to take a holistic systems thinking kind of view of all factors concerned including, for example among many others, hardware and software working together. It needs to be well-designed architected and agile. It needs to enable the people, processes and technology to work symbiotically to achieve increasingly challenging business goals.

Both the Java and .NET worlds need to make choices easier on business with clear reference stacks of which tools work best together and under what conditions, taking into consideration functional and non-functional requirements such as performance. Conceptual reference stacks like the nice diagram on the Java Platform Standard Edition 7 Documentation (http://docs.oracle.com/javase/7/docs/index.html) make a good start. If only something like that could be put in a book with clear recommendations of tools to use for each kind of business from the large global enterprise to the smallest up-and-coming startup. So just like we have reference implementations for JSRs we have Standard Reference Tool Stacks (SRTSs) for different kinds of businesses for rapid consideration, just to speed up the technology adoption/retirement cycle.

Thanks again for a thought- provoking initial stab at a very difficult subject. Is it possible to have an update taking a TCO view?

Best regards.

amos

Posted by AMOS on November 17, 2012 at 04:37 AM CET #

Having developed in both Java and .NET, I'd have to say that Java is a much, MUCH better option if you aren't tied up into the MS ecosystem. .NET is great ... if you have SQL Server, Active Directory and Windows clients accessing Windows Servers. AD's fake-LDAP interface is a nightmare to anyone who has used truly compliant LDAPv3 servers; ADAM (now AD LDS) is marginally better but MS seems to hate it so it is poorly documented.

Doing LDAP auth on non-AD LDAPs means you WILL have to roll out your own MembershipProvider and RoleProvider implementations. Java, on the other side, supports any kind of LDAP out of the box.

On the plus side for .NET, native clients are easier to do; but then again, you can simply develop the entire core/backend on Java and just make the .NET client use WebServices to talk to the Java EE backend. Best of both worlds!

Posted by Daniel B on December 17, 2012 at 06:24 PM CET #

while you should create everything from scrapes in coffee which creates simple things difficult. in reverse compatibility issue create it difficult to sustain while coffee is fantastic at it.

Posted by Benjamin Stevens on February 11, 2013 at 10:55 AM CET #

Plus for .NET:
- You can compile it to a native executable.
- Better (G)UI support (widgets and so on)

Posted by kai on March 19, 2013 at 03:28 AM CET #

.Net supports dynamic programming.

Java does not support.

Posted by Java Training in Chennai on July 11, 2013 at 08:14 PM CEST #

Agree , Java is the most popular language #1.

Posted by Java Training Course in Chennai on December 09, 2013 at 02:38 PM CET #

Nice post, got a information about dot net vs java.

Posted by JAVA Training in Chennai on January 08, 2014 at 12:24 PM CET #

Plus for Java:
It's GUI abilities won't become outdated. (MFC->WinForms->WPF->WTF???)

Posted by Marcus on January 19, 2014 at 09:06 PM CET #

Hi Adam,

what is the situiotion know after JavaEE7, Java8 :-D.

Posted by Süleyman Vurucu on July 10, 2014 at 12:11 PM CEST #

fuck you Java is the best

Posted by 41.251.188.169 on July 26, 2014 at 06:45 PM CEST #

Hi, I am a B. Tech student. I have done project based on both .Net and J2EE. But I am confused as to which one should I mention in my resume. I like java. But .Net is the recent one I have done. Please suggest me something.

Posted by Sadia Rahman on August 25, 2014 at 05:02 PM CEST #

Basically, Java supports more capabilities through plugins and is more open-ended. .NET is easier to use, features are more centralized, and C# has nice language features.

Posted by dc on November 09, 2014 at 05:34 PM CET #

I guess Java is good however, dot net leads the race.

Posted by PHP Training in Chennai on November 27, 2014 at 07:47 AM CET #

If your developing stand alone applications or client/server applications .NET is a far far more productive environment.

If developing enterprise level web applications things seem get quite confusing.

With Java and .NET the performance can be there if things are coded proper, benchmarked proper and code optimized proper. It seems more important in .NET .vs. Java as most of the popular Java libraries related to web type functionality are highly optimized already.

Getting various libraries to "come together" in Java into a cohesive development project appears much more difficult than .NET.

Similar to say "PHP" alot of open source and contributing frameworks/libraries getting them to play nice together can be frustrating.

With .NET its all cohesive as you deal with one entity for the most part. Microsoft.

To make things more confusing there is the future.

With Windows itself moving towards apparently a "client/server" based operating system there will be just a TON of advantages coming into play one would imagine.

Microsofts entire focus has been one of unification of technologies from Windows to Windows Phone to Xbox and who knows whats next, Windows Glasses.

Since Windows is and will remain the dominant operating system in computing for the "average person" that makes things rather confusing.

Certainly Java libraries will come to exist to leverage whatever nifty new capabilities come from "Windows Online" but with that comes the "Oh my goodness how do I glue all this into the application".

Lastly, in performance Microsoft has with ASP.NET / .NET been counting upon server speeds moving forward and costs thereof moving downward for YEARS on end now.

So to speak, thinking that the hardware technology will "come to them" .vs. the actual optimization of libraries to perform at Max speed.

I've looked at benchmarks all over the place between a variety of languages and of course tasks.

In most .NET is a looser and Java the winner. .NET having similar marks to the likes of PHP.

The PHP nags saying, "See that!" where they never consider how much more capable .NET/C# or VB are over PHP. One is scalable to enterprise the other is a complete nightmare to think enterprise.

The future is certainly Java or .NET. I tend to think it will be .NET simply because of Microsoft moving Windows into a more cohesive Internet role.

While Java/Tomcat/Jetty etc folks or LAMP folks might say... "oh no no" the fact is 99% of people when they buy a computer buy a Windows based PC. While the Mac / OS/X remains the, "I own a Mac" scene a sorta "think upperclass or I like be different" sort of folks the fact remains that marketshare will drive the technology.

Microsoft at this point for example cares less that Windows Phone is at some distant third place island on another planet as far as marketshare. This due to their vision seeing the unification of smart technologies and then the iPhone and Android wondering what the heck they need do to try retain marketshare.

My estimate of the future is the iPhone will be dead as we know it and eventually be the Apple Windows phone. Android will be the $40 phone for those than cant afford the $199 Windows one.

Posted by RG on December 06, 2014 at 10:34 AM CET #

I've used many programming technologies over the last 32 years. IBM System 3 and 3090 mainframes (COBOL), IBM AS400/iSeries (RPGLE), MS Basic, Visual basic, C# with .Net, and Java with Java EE.
In my opinion, .Net has the smallest learning curve. For a few years, MS provided a fantastic plugin called Silverlight and WCF Ria Services that brought the time to develop Line Of Business applications using a Service Oriented Architecture to the minimum they can possibly be. It was almost like using a CASE tool from way back. But even without Silverlight, the WCF and Entity Framework protocols a lot of work for you. But it does have a hefty price tag if you use MS IIS, MS SQL and Visual Studio, with yearly maintenance fees. If you want to sacrifice cost and flexibility for productivity of your programmers, then .Net is the way to go.
On the other hand, Java EE is incredibly robust and for the most part, is completely free. If you spend the time to learn the Java EE stack and modularize your applications correctly, you can achieve object orientation of entire service groups. Git is fantastic as is Maven. The only downside of Java EE is that it has a really steep learning curve.
Of course, if you do things right you can manage all our services regardless of platform with WSO2 (or another enterprise service bus) to achieve best of both world solutions for your customers.

Posted by Tom on December 10, 2014 at 04:17 PM CET #

Hi, thanks for sharing the arguments in J2EE. It will be very useful for me to do the training on the same.

Posted by Best JAVA Training in Chennai on February 21, 2015 at 06:53 AM CET #

On the other hand, Java EE is incredibly robust and for the most part, is completely free. If you spend the time to learn the Java EE stack and modularize your applications correctly, you can achieve object orientation of entire service groups. Git is fantastic as is Maven. The only downside of Java EE is that it has a really steep learning curve.
Of course, if you do things right you can manage all our services regardless of platform with WSO2 (or another enterprise service bus) to achieve best of both world solutions for your customers.

Posted by Java Training in Chennai on January 15, 2016 at 05:51 AM CET #

Visual Studio .NET is a very good environment with very good DB and team extensions. With a commercial plugin (like e.g. Resharper), it gets a good, as IntelliJ.

Posted by java on January 15, 2016 at 05:52 AM CET #

java is best language because it is opensource and it is wora concept write once and run anywhere . best architecture and framework support java. like jsf2,and spring and libraries primefaces, richfaces and icefaces and moreover wicket etc

Posted by waqas kamran on February 18, 2016 at 10:13 PM CET #

With the upcoming release of .NET vNext, I'd like to contribute my cents to .NET advantages in compared with JAVA on point 5, 10, 12 and 13:

Point (5) - IDE: .NET developers are going to have project Rider similar to IntelliJ IDEA, so Visual Studio is no longer the only option https://www.jetbrains.com/rider/

Point (9) - Stability - No breaking changes: I don't think this should always be considered as an "advantage". Sometime we need "breaking change" in exchange of innovation, that's the cost but it's worth. An example is the limitation of Java's implementation for Generic in compared with C# http://www.jprl.com/Blog/archive/development/2007/Aug-31.html

Point (10) - Best Practices: I believe .NET community is really different now, the days of "drag-and-drop" development has gone. The "modern" bad practices, patterns such as CQRS, Reactive Extension etc. is pushed significantly in MS and the community

Point (12) - Cross platforms: the new .NET is truly cross platforms
Point (13) - Open Source: the new .NET is completely open source, you can find 100% source code on GitHub https://dotnet.github.io/

With regards to performance, we'll need other new benchmarks. The new .NET has been completely re-architectured to be modular and lightweight similar to Node JS, and it's really out-performance now http://web.ageofascent.com/asp-net-core-exeeds-1-15-million-requests-12-6-gbps/

And also, applications of the new .NET will be eventually compiled to native code and running without the need of .NET CLR so you'll get the performance of native code https://visualstudiomagazine.com/articles/2014/04/03/more-power-and-faster-development-with-dot-net-native.aspx

I'm developing both .NET and Java, so I love the both platforms. In short:
- Considered in the language itself: C#.NET is better than JAVA (see more on this comprehensive comparison http://kynosarges.org/JavaCSharp.html )
- Considered in the number of supported libraries/frameworks: JAVA is better than .NET, the reason is because JAVA supports open source and cross platform when it was created. But that fact will change quickly with the new native-compiled-cross-platforms-open-source .NET vNext

Posted by Hung Nguyen on June 09, 2016 at 12:23 PM CEST #

Post a Comment:
  • HTML Syntax: NOT allowed
...the last 150 posts
...the last 10 comments
License