At This Point, I’d Prefer Java Developers Over .NET Developers

114 commentsWritten on April 27th, 2009 by
Categories: Opinions

I had to do 5 technical screenings today. 4 of these guys where Java developers, one of them a .NET developer. A couple of weeks ago, i also had to screen a Java developer. I'm gonna be blunt about this: at this point, i would much rather hire a Java developer than a .NET developer.

Let me just summarize these screenings to illustrate my point. Out of the 5 java developers i had to screen recently, 4 of them were very familiar with topics such as Inversion Of Control, Dependency Injection, Object Relational Mapping, and Aspect Oriented Programming. One of them was a 'junior' developer with about 2 years of experience, and we actually talked about the differences between compile time AOP weaving vs runtime weaving, even going into the differences between dynamic proxies and more traditional proxies to achieve AOP and how that would work and how it can be tied into your IOC container. This wasn't just me talking about this stuff... i was leading into certain things and he was filling in the blanks. During a technical screening. With a guy who only has 2 years of experience on his resume.

The other 3 java developers i screened where pretty impressive as well. These guys truly realized the benefits of using an Inversion Of Control container, of using Dependency Injection and felt it was only natural to use an ORM when working on typical business applications. And you know what the really cool part about all this was? All 4 of those java developers that impressed me wanted to learn more about TDD, and writing automated tests in general. They hadn't really experienced Continuous Integration yet. They wanted to improve their TDD skills. They genuinely seemed to care about the fact that their TDD skills weren't as well-rounded yet as they could be. In case you haven't noticed, these people truly believe in DI and IOC without even getting into the testability aspect.

In the .NET world however, most people who get into DI and IOC usually do it for testing purposes, only to move on to the other benefits of it later on. And that is if you're lucky enough to find a .NET developer who even cares about these things. Generally speaking, you should consider yourself lucky if you get to screen a .NET developer who's interested in these 'alternative' practices (in the .NET universe anyway), let alone one who actually has experience with them. The odds of finding .NET developers like this in interviews are so incredibly low it's not even funny anymore. It's downright pathetic actually. And then you get 3 of these guys in one day, though they are java developers. 4 of them if you count the one from a few weeks ago. These numbers don't truly mean anything, but still... i think it's worth thinking about.

Now, i'm not going to say that Java developers are by definition better than .NET developers. But i really do think that, generally speaking, they know a lot more about proper design principles and coding practices than your average .NET developer.

  • sharmabhabho

    Quite an interesting post. I am a Java developer and i am very eager to create some new, innovative application some day.Waiting to see what happens at the Sun Tech Days 2010 conference in Hyderabad. Experts are going to share ideas on new technologies there. lets see what happens.

  • Pingback: Spring Persistence with Hibernate - The Developer Day

  • sp

    Davy, you are right, Java developers know more about design as that’s part of how the Java world is, its mostly used in big corporations where interoperability is important and applications seem to span across the enterprise, so naturally Java developers learn these. .NET on the other hand isn’t used as much on enterprise applications and hence the lack of awareness.

    On the other hand, .NET developers are more aware of speed, memory, threading, synchronization, networking etc. as they write more desktop applications. If you ask a Java developer about Threading or Networking, they’d probably know very little as they don’t deal with it often.

    So in the end, your knowledge is oriented towards your needs and experiences you go through.

    I have programmed in both Java and .NET and the main difference I see is in .NET you can program at all levels from pointers to IOC, DI or any acronym you throw, but can’t with Java. And there is a misconception that coupling is outright bad. Sometimes coupling/tight integration is good if the involved systems are all of the same platform.

  • Pingback: Depois eu leio » Rails Summit 2009

  • tcmaster

    I’d say from some of the comments, I can see why your statements stands.

  • http://www.cvecara-online.com Cvecara Beograd

    - Java develops way of thinking
    - Java is not so comfort as .Net
    - Java have started with all story about patterns end enterprise software little earlier

    So, at the end, who was involved in Java, can fast accept and better use .Net then ones with only .Net knowledge

  • taso

    On the flip side of this, a junior developer can get up to speed and start building powerful .NET applications far more quickly than Java. Whether through complex architecture or simple prototypes, all that matters is getting a product out quickly in many cases. If your team consists of junior developers, they will be able to implement far more sophisticated functionality using .NET than a team made up of only junior Java developers.

  • amit rawat

    i am even hardly 5 month exp but i know very well IOC,DI,AOP etc.

  • amit rawat

    it’s true .net takes less time to build application and java more.but after building applications in java its easy to maintain Ur application if u are using good design architecture…

  • Dr. Archi

    I fully agree with this article. The lack of good design practices in the .Net community have let me decide to move, after 7 years, from .Net to Java, since I like design, not drag and drop.

  • http://www.geekswithblogs.com/wmolina Wayne Molina

    Spot on. The problem is there are too many “Mort” developers in .NET who don’t care to learn proper software development but hack shit together without a care. If there were Java jobs in my area I would have made the switch long ago but I live in a city domianted by .NET to the tune of, basically, 99:1 so I have little choice but to use .NET, and sadly 99% of the companies I’ve worked at don’t understand basic software principles but think WebForms+CodeBehind+Typed DataSets is the way to go with app development even through the modern day. Try mentioning something like ASP.NET MVC to them and you get blank stares. Mention a mature ORM or the SOLID principles or Testing (not even TDD, I mean Unit Tests in general!) and you get a look and a response of “We don’t use here”

  • http://twitter.com/gblock Glenn Block

    May be you are just talking to the wrong people. There are plenty of folks in the .NET community that care about these things, plenty of folks practicing TDD, caring about separation of concerns, and yes using IoC containers and AOP to get there. There community of OSS solutions continually grows.

    Case in point, Castle Windsor, one of the most popular IoC in .NET and which includes Castle Dynamic Proxy, YES an AOP framework. Over 1 million downloads.

    patterns & practices: Unity, over 2 miliion downloads

    As a matter of fact, compare to Java I’d argue the .NET world is actually AHEAD when it comes to IoC. The richness of IoC options across .NET dwarfs Java, here’s a few for you to look into in addition to Windsor and Unity: StructureMap, Autofac, Ninject, LinFu, Func, just a few.

    Now let’s look at Mocking frameworks: We have about 5

    xUnit type frameworks: At least 5

    Refactoring tools: 3 or more.

    MVVM Frameworks: More than you can count

    ORM: More than you can count

    I do agree that in general I have found more java developers aware of patterns, but the number of .net devs that care about these things has grown dramatically over the past few years. The numbers are not insignificant.

    Glenn

    • http://10to1.be tomklaasen

      Nice points that you’re making.

      There was a time when Java also had more than 5 IoC frameworks. When one had finally seen the value of IoC, his next dilemma was ‘which framework am I going to use?’

      And then, one of them got it _just right_. All of a sudden, every Java developer had the same vocabulary. People working with IoC all referenced the Spring framework. Powers were combined, Spring has only grown from then on, it became the de-facto basis on which to build applications. As a result, every Java developer now knows about IoC.

      Counterintuitively, having multiple options isn’t always an advantage.

  • Pingback: Technical Related Notes » Blog Archive » links for 2009-05-30