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

116 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.

  • http://www.geekswithblogs.com/alternativedotnet Michel Grootjans

    Same experience here. As a community, the .net world has a lot of catching up to do.

  • virtualstaticvoid

    Same here too… although I think MS is partly to blame as the general attitude towards developers is to protect them.
    Your post Educate Developers Instead Of Protecting Them sums this up nicely!

  • http://jack-fx.com/blog/ Jack

    I partly agree with you, but partly not. 1).NET is still grow up quickly, 4.0 is coming, and many bugs will be fixed, new feature will come. This means it still young, not powerful than Java now. This is why i agree with you. 2) Many be the java developer is more experienced then the .net one, this is why I don’t agree with you.

  • http://prajwal-tuladhar.net.np Prajwal Tuladhar

    I also do agree with your point if JAVA and .NET developers are compared rationally. I especially think most .NET developers really do not care about good design and best practices because they are highly influenced by Microsoft’s visual paradigm of developing. Normally, when someone wants to learn .NET, he starts with Visual Studio and start to do drag and drop programming which at first sounds so cool but later it becomes way to fundamental design flaw and perception of designing any application. I don’t know if it’s wrong or not but .NET developers are highly coupled with IDE based programming which you won’t find in other languages like JAVA, Ruby and PHP.

  • http://bartreyserhove.blogspot.com/ Bart

    When I am on the other side of interviews – that means being interviewed – I did not once get a question about IOC / DI / AOP and only very rarely I get questions about ORM.

    That’s also striking.

  • http://azagappan.wordpress.com Azagappan PS

    You are 100% right. I am a Microsoft guy and I hate to hear this. But the fact remains the fact.

    For some reasons, Microsoft dosent want to use the terminology used in Industry. They would call an apple an orange,though they mean to say is Apple. I feel this as one of the main reasons for Microsoft guys staying away from good OO habits.

    Wakeup guys, its hard fact to digest

  • http://mrpmorris.blogspot.com Peter Morris

    Hardly conclusive research, was it? :-)

  • http://benpittoors.wordpress.com den Ben

    @Peter Morris

    I’d call this a minor form of empirical research. Although it was not Davy’s intention to perform any kind of research at all he based his statement purely on observations he made while taking job interviews.

  • http://craigcav.wordpress.com/ CraigCav

    In addition to this observation, but from the other side of the interview table, I am one of the more ‘junior’ developers in the (.NET based) company I work for, as I have only 3 years post-university experience, however I am perhaps the only developer in my team who is familiar with topics such as Inversion Of Control, Dependency Injection, Object Relational Mapping, and Aspect Oriented Programming. I am trying to encourage others I work with to take an interest in SOLID principles as a first step, but it’s difficult at times.

    I would suggest it’s almost as hard finding .NET software houses where these techniques are nurtured, as it is to find .NET developers that are well versed in these patterns and practices.

  • http://davybrion.com Davy Brion

    “I would suggest it’s almost as hard finding .NET software houses where these techniques are nurtured, as it is to find .NET developers that are well versed in these patterns and practices.”

    i completely agree… the standards in the .NET world in general are just embarrassingly low IMO

    @Peter

    you’re right, it’s hardly conclusive and i’m sure you noticed that i never claimed it was :) . It’s just an opinion, based these interviews, and interviews i’ve done in the past with .NET developers. There’s just a huge difference, usually.

  • Jonathan Kaufman

    One thing to consider. Most seasoned “Microsoft” guys are C Developers. .NET encourages good OO design but C++ does not. I have met and worked with over 30 people who claimed to be C++ programmers. I have actually only met 2 C++ developers, the rest were C developers using a C++ compiler.

    Why is this relevant because OO is new. I know in super fast computer land it’s 5 billion years old but there are plenty of people out there that see OO as a new technology, not something they learned in school and aren’t fully subscribed to it’s benefits. There are plenty of people who don’t like OO and have good arguments for them. Nothing is black and white.

    I leave this post with no opinions just some thoughts to chew on.

  • http://davybrion.com Davy Brion

    @Jonathan

    I wasn’t really talking about seasoned “Microsoft” guys. My statements on that are based on all kinds of .NET developers… there is a very large majority of them that never ventures outside of the “get it working quickly, move on to the next thing” realm. Proper software development practices are just rare in the .NET world…

    Oh and there are very few cases where .NET (and dare i even say Microsoft) encourage good OO design IMO. Drag-n-drop development very rarely leads to good OO design ;)

  • Terry

    Oh and there are very few cases where .NET (and dare i even say Microsoft) encourage good OO design IMO.

    What about ASP MVC? Plus, what’s so evil about saving time with Drag and Drop? The code can be cleaned up for testability later especially since all the generated code ends up in partial class files. Drag and drop doesn’t have to be automatically evil if its managed correctly.

  • http://davybrion.com Davy Brion

    ASP.NET MVC is a huge step up, but it’s not quite perfect either and it took, what, 6 years of WebForms before alternatives were even considered. And the sample apps that have been released so far (Oxite and Kobe) by Microsoft are a long way from encouraging good design. They’re quite horrible in that regard actually.

    Drag-n-drop of pure visual components is usually not a big deal… drag-n-drop of data sources on pages or forms or whatever is a different matter entirely ;)

  • http://www.testinfected.net Eric Anderson

    @Terry Says
    The code can be cleaned up for testability later especially since all the generated code ends up in partial class files

    This never happens. Why not generate the code in a testable fashion first and then call it from the partial class files?

    As to those .Net developers that actual know IoC, DI, and SOLID in general. If you are looking for a job, feel free to email me at IDev.Net ~at~ gmail. I can almost guarantee you some interviews in Austin. I am a developer, not a recruiter. But, I know my company is always looking for these types of developers and I know plenty of others in Austin that are looking for these skills — even in this economy.

  • http://ndepth.net Jayme Davis

    While I don’t necessarily argue with your ‘knowledge’ statement, I do argue with your ‘prefer’ statement. We made the same mistake at a previous client – hiring only the top notch people who could screen out of these same type of questions. Turned out to be one of the shittiest non-practical group of people I’ve worked with. Sure – you read lots of blogs and understand terminologies, but can you write an app? Most of them could not.

  • http://www.beefycode.com beefarino

    Microsoft’s bag has always been to try and take the thinking out of programming. They’ve consistently played to the Bad Lazy in people – that given the choice between ( moderate effort and more maintainability ) and ( little effort and no maintainability ), most people will choose the latter combo because it’s less work on them right now.

    In that vein, I believe that MS has done a great job of making a framework where anyone who wants to can build a website or simple winforms app in visual studio. But that alone doesn’t make you a software developer, that makes you a hobbiest.

    You’re spot-on with the “get it working, move on” comment as well.

  • http://livz.org Steven Livingstone

    Can’t really agree with this – one person can’t represent an entire community.

    Java has more years in it and has had more of a run in the academic community so as a language it progressed differently from .Net which has a more enterprise level commercial focus.

    However, most of us have used many of these techniques for years. The language you use to code (and there really isn’t a huge variation in the languages) is but one part of a much larger picture (you mention patterns).

  • http://www.jphamilton.net J.P. Hamilton

    @Peter Morris

    Not conclusive research by any means, but I can add my results. I interviewed 11 developers over a 2 year period and had worse experiences. None of the people I interviewed read any programming books or blogs or wrote any code for fun. They unanimously said “I go to MSDN when I have a problem”. None could answer the most basic OO questions. How far can I take an interview when someone can’t tell me what polymorphism is (or an abstract base class for that matter)? Not only that, every single one of them wanted a whole lot of money.

  • Jonathan Kaufman

    @Davy #12
    I guess I don’t agree on the singling .NET guys out. Microsoft has documentation on IoC and DI etc. I have seen failing java guys too.

    Now keep in mind I agree with most of your posts and many “developers” anger me. But when I work with .NET guys in a software company (one whose profit in generated by software), I work with some crazy OO fanatics.

    I blame this “get it working, move on” mind set on corporate culture. I am currently contracting in this enviornment and there is an over all disregard for quality in any work (not just coding).

    Maybe the majority of corporate development is in .NET and this ONE PERSON you interviewed was from that enviornment.

    To be honest the only reason I care enough to comment is because I want quality developers and I think you are missing the source. In order to fix the problem, the problem has to be correctly identified. I don’t blame some wierd belief that microsoft wants developers not to think but instead blame souless jobs that don’t care about quality and prioritize artificial deadlines over quality.

    I leave this post with opinions smeared all over the place.

  • http://unhandled-exceptions.com/blog Steve Bohlen

    One of the (possible) reasons for your experiences is that the internet-bubble crash of 1999-2001 flushed out of the industry the (at that time) extremely large numbers of extremely poor java developers. I was in tech at that time and the ratio of good to bad java coders at the time was about what it is now in .NET (IMHO). This shrinkage of the market for java devs flushed out a lot of the detritus that was floating around in the java ecosystem at the time as these people simply changed professions when work for them dried up and only capable java programmers could get (much) work.

    While I agree that at this point in history your allegorical data points aren’t really debatable, I think (and kind of hope, frankly) that the present economic downturn will perform the same flushing operation on the legions of completely unqualified .NET developers that aren’t capable of anything much more complex than drag-drop-F5 development.

    I think the ready-available visual tooling for .NET in the form of Visual Studio can be ‘blamed’ in some sense for lowing the barrier to entry to the point where anyone can call themselves a .NET developer after reading “mastering WPF in 21 days” or something similar, I think we have to also allow that the marketplace has sustained these large numbers of poorly-qualified developers for entirely too long and we may be seeing a ‘realignment’ that will result in many fewer .NET developers with the poor ones choosing to exit the market and the good ones being able to remain afloat/employed.

    At least that’s my fervent hope~!

  • Michael Hoffman

    Everyone’s experience is different. I have had a LOT of bad interviews with Java developers. A LOT. Nevermind good coding and design practices, some candidates couldn’t tell me how an array works. It is frustrating, no doubt. Anyways, my point is that there are a lot of bad apples out there on both sides. Unfortunately, I have noticed a trend that there are not many good apples. Perhaps I interview too hard, but there are certain expectations I have of the people I hire.

  • http://davybrion.com Davy Brion

    @Jonathan

    i’m not saying that java developers have no flaws. i’m also not saying that all .NET developers suck. It’s not based on _one_ person. I wrote this post after interviewing 5 people, but it’s not really about those 5 people either. It’s just an opinion that has been formed based on other interviews and general impressions that have been left by Java developers and .NET developers.

  • http://neilmosafi.blogspot.com Neil Mosafi

    I think you need to use a better recruitment agent!

  • Sam West

    I’m not surprised. And as one of those .net developers who is passionate about IoC, patterns, mvc etc, I look at it from the other way around. When being interviewed, it’s 1 in 20 companies that show an interest in these design principles. That’s disheartening to say the least. I don’t want to have to fight those design principle/management battles anymore!

  • K

    I have not touched any Microsoft tools since the Visual Basic 4 days, so my comment is based on my impression.

    From my perspective it seems that .Net is largely based on a monoculture, mostly defined by Microsoft. It seems that if it isn’t found on MSDN or if Microsoft hasn’t hyped it (using their own terminology of course), then it isn’t worth going for.

    I’m not saying that Microsoft is slow. On the contrary, it seems that they do a lot of things and adapt existing ideas and remakes them in their own way. C# is evolving at a very high rate, and it is a lot of new things that are thrown at developers.

    Perhaps that’s the problem. Microsoft has generated their own ecosystem where the developers have more than enough to keep up to date with new terminology, ideas or technologies. This may result in a mind set where the developers are “fed” thoughts and ideas from a single source – Microsoft.

    Contrast this to the Java group, where most of the ideas come from the community. There’s a lot of things happening there too, but because it doesn’t come from a single source, they are used to filter out and control the flow of information. Often, they also program in Python/Ruby and other languages, and get input from completely different ecosystems.

    In short, it seems that you have two major ecosystems. One made by a single entity (Microsoft) and another more open ecosystem with multiple entities that influences each other.

    I have seen comments from .Net developers saying that they feel they have to absorb and learn “new” concepts from Microsoft because they fear beeing left behind.

    My impression is that Microsoft keeps making up new concepts so fast that developers don’t have time to look elsewhere.

  • Anon

    On a similar note, I recently read 5 blogs. Yours sucked. Therefore your blog sucks.

  • http://www.steveciske.com sciske

    ‘At this point I’d prefer to create flame bait’

    There fixed it for you.

  • http://elegantcode.com Jan Van Ryswyck

    That’s interesting. I had a similar discussion today …

  • http://blackdilbert.blogspot.com Will

    I am primarily a Java developer, but I dabble in a bit of .NET development. I think some o what you mentioned is true of .NET developers, but I believe the tide is turning. I attend a nearby .NET users group every so often and they frequently have presentations on the design principles you mention in the article. I think the lack of knowledge on or desire to learn those design principles can be found in many developers, regardless of their programming language technologies. There are just plenty of people in the software engineering/development field that don’t really care much about their craft and don’t put the time in to try to increase their knowledge in new and upcoming technology.

  • http://jalexoid.blogspot.com JAlexoid

    I think it’s the inherently libre Java environment that forces most Java developers to learn. Laziness is not an option for a lot of people in Java land. Look at most IDE for Java, you will see support for a myriad of frameworks and tools out of the box.

  • http://clay.lenharts.net/blog Clay

    Microsoft vets technologies and .Net developers like this. To them, they do not chase every fad. IoC and DI haven’t been vetted yet, so it is not surprising that these concepts are foreign to your interviewees.

    Things are changing. I get the feeling that technologies are getting vetted by MS at a faster pace. F#, jQuery, ASP.Net MVC, Silverlight (is this a copy of Flex?) are all very recent additions, and some in the .Net community are concerned that these are fads rather than properly vetted technologies.

  • Pingback: Arjan`s World » LINKBLOG for April 28, 2009

  • meisinger

    i think that it has more to do with “rapid application development” developers than the platform or framework

    how many RAD Java developers do you know?
    i know two, one is working in Java and the other is currently working on Flash projects

    how many RAD .Net developers do you know?
    i know five and they are all working on .Net projects

    neither the RAD Java developers or the RAD .Net developers could give a flip about any patterns, principles, or practices

    so it is my personal observation that:
    1) RAD developers don’t care and don’t want to care
    2) there are more RAD .Net developers than RAD Java developers

    just my two cents

  • http://www.codetoglory.com Code2Glory

    I tend to agree with Clay. Microsoft does not hesitate to go back to the drawing board and rethink its designs. The best example is moving away from the illusion of drag and drop web forms towards ASP.NET MVC. They are catching up pretty fast with Unity Container, MVC and Silverlight. Those who are arguing about Visual paradigm created by Microsoft tools, would you disagree that Visual Studio is the best damn IDE out there?

    It is also harder to maintain Java architectures as sometimes they are unnecessarily over complicated.

  • Pingback: Java versus .Net programmers

  • http://entrellaves.blogspot.com gorlok

    Very interesting. I just was talking about this a week ago, with a similar debate.
    I think that the java/python/ruby/etc community is mostly an open community, and it has become the seeder for test new ideas. Then, MS’s guys need some time to catch up.

  • http://smsohan.blogspot.com sohan

    I agree with your decision. But at the same time I understand that .net itself presents like ioc/di/tdd are at best secondary concerns. So MS didnt include an aop or di library. Event the test library is new. But you also need to remember that a .net dev will not take all the time to catcth the cocepts if s/he is a good dev. I would suggest hire the ones who have the background and can pick up fast. For a ,net project a java dev may have longer learning curve. It should not take much time to catch up the ideas of tdd/di/aop.

  • Kyle

    How is this worth thinking about? Some completely nonsensical conclusion drawn from a statistically invalid sample.

  • Pingback: Sami Dalouche » Looks like .NET has a long way to go…

  • http://www.testinfected.net Eric

    @Clay #32
    IoC and DI haven’t been vetted yet

    Nonsense. Vetted by whom? While the Java community has been using these practices for longer, there is nothing language-specific about IoC or DI. MS even made a (poor) attempt themselves with Entity Framework.

    @Code2Glory #35
    would you disagree that Visual Studio is the best damn IDE out there?

    Yes. See IntelliJ. I would also prefer Eclipse over a naked (without R#) VS any day. VS requires plug-ins to make it usable, Eclipse leverages plug-ins to make it better. And, IntelliJ is an even better experience. I’ve developed plenty in all of these environments.

  • Stephen Smith

    If I could jump out of the Microsoft space I would but I have to pay the rent.

    In the Microsoft space rather than respond to the increasing demands for greater productivity by always seeking more productive and powerful development practices, that is how can we use our tools more effectively, the general mindset seems to be that Microsoft is bringing out a new version of .NET or some new visual tooling, what we perceive to be a more powerful tool and will solve our problem. But a powerful tool misused can cause a great deal of damage. Developer’s continuing professional development seems to consist of learning new Microsoft or third party APIs or attending Tech Ed rather than learning development principles and practices that are language and provider independent.

    I am currently working for a very successful organisation but on a project that already has been in progress for more than 5 years and we are attempting to produce a beta in several months time. When I mention the length of the project people have to first pick their jaws up off the floor and then they say that it must be a successful organisation to support a project for so long without delivering. There is little or no consideration for learning to be more productive and seeking faster and more effective ways of developing. We are building a framework with the expectaction that it will eventually power a suite of applications and this application interacts very procedurally with the framework and is extremely cumbersome and tightly coupled. I am certainly not holding my breath as to its delivery, management is. There is an expectaction that software development is hard and often painful, that the last 10 percent is the most difficult. (The project has been in the last 10 percent for the best part of a year now)

    I hold Microsoft responsible for the number of Morts amongst their development ranks, Morts who are intelligent people who would derive so much more job satisfaction as well as positively representing Microsoft if they were aware of the developments in software development that many of us .NET developers are oblivious of. I would love to work with kindred spirits, people who consider their effectiveness as a developer is largely based on the power of the practices they employ and are always seeking more powerful practices that are being developed in the wider development community and apply them in their .NET teams.

    Would the best thing for us .NET developers be if Microsoft went belly up? There would be a lot of initial confusion but the economists have a term called “creative destruction” just as Steve Bohlen mentioned in his response of his experience of the Tech bubble crash clearing out a lot of excess Java developers.

  • http://invinciblezombiecow.wordpress.com/ RCE

    @Kyle: if it’s worth responding to, it’s almost certain to be worth thinking about :) .

  • http://dotnet.kapenilattex.com Jon Limjap

    It’s a painful fact that apparently, anywhere you go in the world, there is a disproportionately large amount of Mort .NET devs compared to Elvis/Einsteins, as opposed to other technologies where because those concepts are necessary from the onset, you get a ratio nearer to 1:1:1.

  • Arnis L.

    Eric Anderson Says:
    April 28th, 2009 at 4:44 pm
    —-
    Damn… I knew that i`m going in right direction. Too bad that i`m not ready yet for such a crucial changes. :)

  • http://thesoftwaresimpleton.blogspot.com/ Paul Cowan

    Microsoft lowering the bar to entry with their visual tooling did just that, lower the bar for entry for lesser able or qualified programmers.

    I interviewed for places like DELL other places in Scotland was pretty much horrified by the picture that the lead developers where telling me.

    At best they used everything Microsoft and at worst, it was quite depressing.

    I eventually took a job where I was the only developer and could develop in a way I was used to.

    This was fine until we came to recruitment and I then started to realise that the stack I used pretty much ruled out any developer we needed getting up to speed in anyway soon.

    One of the “better” developers I interview had never heard of generics never mind an IOC container.

    I had contractors looking £350+ per day who were useless.

    We have to hire and just take it for granted that they will not be “useful” for a while.

    I started to doubt my stack because nobody had used anything in any way comparable.

    It is all very depressing.

  • Michael

    If we want to draw conclusions based on such a small experience, I’ll pitch in. Sounds to me like there are four times as many Java developers looking for work.

  • http://davybrion.com Davy Brion

    I love how people seem to think it’s all based on these 5 developers. I guess there are too many words to read to figure it out.

  • http://www.xclu.com Justin

    I am a Java developer and ocassionaly interact with .net and microsoft tech. The main problem with the microsoft environment is it doesn’t pay to learn anything really well because they drastically change around everything every couple of years anyway. Thus, building a rich architecture on top of microsoft technologies seems kind of worthless as everything you worked on will probably break in 2 or 3 years or at least not work with new development tools and require painful backward compatibility configurations. On the other hand I have almost 10 year old java code in production applications that just works better with each new release. Thus, in java it pays to build a sophisticated architecture because the investment becomes worthwhile as the codebase is much more likely to be long lived. While Microsoft systems discourage maintenance and seem to encourage rewriting everything every few years using the latest totally different microsoft development technology.

  • Michael

    To be fair, I meet more crappy .net developers than not.