Posted by: jsonmez | February 19, 2010

C# vs Java Part 4: The Tools (Final)

This is my final installment of the C# vs Java series, but I think this is one of the most important.  Tools make or break a development environment.  Good tools can make a hard job seem easy and bad tools can make an easy job seem hard.  My definition of a tool is: anything that helps you work.  This could include IDEs, external libraries, frameworks, testing tools, etc.


A good place to start looking at tools is IDEs.  You have heard it said that you should buy a good mattress because you spend 1/3rd of your life in bed.  If you are a programmer, you spend 1/3rd of your life in an IDE.  (If you are a bad programmer you spend 1/3rd of your life in the debugger in the IDE, but that is another story.)  For that reason, an IDE is very important, perhaps one of the most critical choices when choosing a programming environment.  Fortunately, both Java and C# have good choices here.

As far as IDEs go, C# basically has Visual Studio.  There are some open source and other strange things out there claiming to be a C# IDE, but as far as I have seen, they are not serious considerations.  (Correct me if I am wrong here.)  Being the only game in town means that Visual Studio had better be really good.  It is good; there are many things it does automatically for you.  For the most part Visual Studio does everything you would want it to do, but it is missing some things that the Java world has.

In Visual Studio, classes are not auto imported when you start to type.  This is kind of hard to explain, but in Eclipse, I can start typing the name of some class and the IDE will search all the code I am linked to and try to find any matches for it.  If I select that class, Eclipse will automatically import that namespace for me.  Visual Studio requires you to know the namespace of the thing you are looking to use.  Not a huge deal, but if you start using Eclipse and then switch back to Visual Studio, you will certainly feel the pain in that area.  Now, most of the ails of Visual Studio can all be remedied by the use of a plug-in that I highly recommend, Resharper.  Resharper makes Visual Studio awesome.  It is not free, but it is money well spent.  It adds many automatic refactoring options and many of the features that are available in Java IDEs that are missing from Visual Studio.

In the Java world, there are 3 major choices: Eclipse, IntelliJ and Netbeans.  I have mainly used Eclipse, so I do not have as much of an idea about the others.  I have heard many good things about IntelliJ, and considering it is made by the same company that makes ReSharper, it is probably pretty good.  The reason I like Eclipse though is because of all the plug-ins.  It is also the reason I don’t like Eclipse.  The Eclipse community is thriving with plug-ins; as a result there isn’t much you can’t do from that IDE.  There are so many plug-ins for Eclipse that entire companies exist just to bundle them together.  Think about that for a minute.  This is both good and bad.  It is good because you can do just about anything you want to do in Eclipse.  It is bad because too many choices are confusing and you always wonder if you are doing the right thing since there is no clear-cut answer.  Visual Studio doesn’t have very many plug-ins at all, but Eclipse thrives on them.  Eclipse is also very good at searching code.  There are many hot keys in Eclipse which will allow for searching for classes or files and finding methods in classes.

The IDEs in both environment are similar, offering much of the same basic functionality, but overall Eclipse is more powerful than Visual Studio.  One the flip side though, Visual Studio is much easier to use.

The Rest

There are far too many other tools to handle in direct comparison.  Instead, I can make some generalizations about the tools available in general.  A large amount of the tools available to C# are direct ports of the same tools which were first created in Java.  In this respect C# and Java have a pretty equivalent tool set for unit testing, logging, builds, and dependency injection.  This is very helpful in transitioning from one language to the other, as knowing one of the tools in one language gives a benefit of knowing how to use the tool in the other language.

The big difference I see here though is open source versus commercial software and tools.  In the C# world, there are plenty of open source tools, but a good majority are tools that are not free.  Contrast this to the Java world, where most of the tools are open source.  This aspect can be quite deceiving.  It seems like free tools are good, and they can be, but often the cost of free tools is overlooked.  There are several companies that do nothing but sell support contracts for free software.  Often the support contracts are more expensive than equivalent commercial software on the C# side.

Another common issue I face when working in the Java world and trying to get or find tools is the road of dead software.  There are tons of open source projects which no one has been actively working on for several years.  Often, I find it extremely difficult to figure out which tool is being used and actively worked on the most.  Even when I am able to sort through the hundreds of options, only some of which are still alive, it is often very difficult to find information about how to use the tool or framework.  On the C# and .NET side, there are much fewer projects and much fewer dead projects.  I find it much easier to find the tool most people are using and to get it up and running quickly.


In general, I feel like I can find a tool for a job much more quickly in the .NET/C# world than I can in the Java world.  I can also quickly find out how to use a tool instead of hunting through documentation.  I would say it is just more simple.  On the other hand, Java has a much larger selection of tools that can typically do more, at a cost of increased complexity and difficulty in finding the right tool.  My personal preference is C# and .NET tools because I don’t like to waste a large amount of time trying to figure out what to use and how to use it.

Well, that is it for my coverage of C# vs. Java for now.  I am actually getting kind of tired comparing the two.  Hopefully I have done a good job of presenting a fair picture from the perspective of a developer currently using both technologies.  Now… on to more exciting stuff!

C# vs Java Part 1: Language

C# vs Java Part 2: Platforms

C# vs Java Part 3: Frameworks



  1. I really don’t think it’s fair to compare differences between IDE’s when you’re really looking at the differences between languages.

    I think you’ve made a decent comparison of Java and C# in the previous three articles. But trivial differences between development environments don’t mean much in my opinion.

    • I can see your point. The reason I think it is important to compare IDEs and other tools is because the IDE is a intergral part of the experience of developing in C# or Java. There isn’t much of a difference, but the the combined differences between framework, language, and tools help influence the overall choice between the two. I am trying to achieve a bit of comparing what the development experience is in each language, the IDE is a large part of the development experience IMO.

  2. Do aggree with you completely. I worked as a java developer for some time and then I gave up and noe happy with .Net / C#. I felt, I was reinventing the wheel most of the the times, with java projects., meesing with frameworks and tools.

  3. i’m just fresh graduated in computer engineering, and it’s some time i was wondering which would be the best technology to start my career… I’ve read many articles about the differences about the 2 platforms and what they offer, but nothing so wide covering all those aspects together! I really enjoyed the reading, you answered a lot of questions that were in my mind, so I really have to thank you! Now i have a much clearer idea about both!
    Just, as concerning ORM, why you didn’t mention Hibernate for Java (and its port to .NET)?

    • Thanks for the comments. I am glad I could be of help to you. I didn’t talk about the Hibernate because JPA really includes Hibernate. I personally think the technology behind the ORM is not as important as the interface that is presented to the developer. In my mind that interface is really LINQ in C# and JPA in Java. Hibernate is a good choice for either language. I would personally choose to go with the technology the platform vendor is supporting actively since ORM is becoming integrated into the languages more. Let me know what you decide to go with. Good luck in your career. Feel free to shoot me an email if I can be of any help to you.

  4. Nice articles. A small point though. Intellij is by far the most productive java IDE. The refactoring support is superb and it actually changes the way you code if you use it properly. Yes, the windowing system is a bit crap compared to eclipse, and the junit support is not as pretty, but these ae small fry compared to the unrovslled ability to navigate and manipulate code. Now that it’s free there’s no reason not to use it. Even better, the community edition doesn’t have all the stuff that slows it down (spring/hibernate/enterprise blah plugins).

  5. Nice series of articles, John. I’m looking at c# vs java here at work and this series was very useful and (IMO) unbiased.

    Thanks for writing all this up!

    • Your welcome. It might be a bit dated by now. Been meaning to do a refresh, but I am glad I could help.
      Some things are definitely going to change when the next version of Java comes out though.

Leave a Reply

Fill in your details below or click an icon to log in: Logo

You are commenting using your account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s


%d bloggers like this: