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

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

  • NoDoubt

    I was working for an IT services company before that was specializing in .NET technologies. Most of the developers were really good. Then I joined another company. I found out that Java developers there were absolutely closed-minded plus… not that good neither (while spitting a lot on .NET, without knowing what it is). So I think it really depends on the company, and what kind of people you hire.
    Another fact is that many users use Visual Studio to make applications (C# or VB with WinForms is so easy to use!), and later on they pretend they’re developers…

  • Shaun

    Sciske & Michael Hoffman above nailed this.

    I for one wouldn’t prefer *either group*, but would instead rather get to know an individual developer. I’ve been both types myself, as well as a C++ guy. The point is there are good and bad talents in all developer camps. Instead I gather from this post that what you found was someone who would get off with you on a an intellectual masturbation ego trip. Get over it, and grow up!

    Oh, and AOP isn’t w/o its own very serious design and performance risks. Anyone who came to me preaching the glories of any of these practices w/o acknowledging the drawbacks would most certainly not get the job. I’d much rather hire a person who stays with tried-and-true and knows the benefits and shortcomings of tried-and-true than a person who blindly follows every trend out there, going in eyes-wide-shut then pushing it as some sort of cure-all.

  • http://davybrion.com Davy Brion

    @Shaun

    if you’d take some time going over some of the other posts in my archive, you’d realize i’m not the kind of guy you’re talking about ;)

  • http://odalet.wordpress.com Olivier

    Hi everybody,

    For my part I am really fond of software design techniques but nevertheless a C# guy. I agree when some say too much drag’n dropping (may) lead to bad OO design. But refactoring exists (from VS 2005)! It’s not Eclipse’s, but it is sufficient not to prevent me from reworking always and always my code. I can start “drawing” my form, then, because I want some reusability or more control, replace generated code with mine.

    I am, too, aware of DI, IoC, AOP, ORM, continuous integration, tdd, mocking, … I even begin getting intersted by dynamic constructs and functional languages because, a pinch of it was introduced into C#. Before .NET’s Linq and lamndas, I had never really understood contravariance, covariance and other barbarisms. Now, I can see the “context capture” works each day when I code in C#.

    About libraries, I would say, it’s lucky Java is older than .NET because when looking for a library or a tool you need and you know exists for Java, one just have to replace J by N or Sharp and there are many chances it exists (usually it is less features complete than the Java version, but still nuseful) NUnit, Log4Net, BouncyCastle, …

    I don’t want to say I’m the ultimate languages expert better than any Java developper. And maybe most .NET developpers are just good enough to copy down MSDN’s monkey code… but some .NET guys also love software design, OO, patterns, refactoring.

    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.

    I do have programming books (in fact a whole library ranging from Tannenbaum’s OS design and implementation to Wrox sharpDevelop’s book) I do read blogs and write in mine once per two years… I do write code at home, and when I have a problem, I use 1. .NET Reflector 2. Google Code search, 3. Google search 4. MSDN. About OO principles, maybe you’re right: I am not a MS certified developper, but some years ago I tried a trial exam; though I consider myself as being quit a good C# programmer, I could barely reach a 30/100 score: of course I didn’t know by heart the name of the window you have to use in Visual Studio do achieve a specific debugging task, but I could have find this window if I was coding, and I knew tens of other ways to achieve the same result! The only OOP question was about a virtual method that was overriden in a child class, and depending on the object’s declaring type what version of the method would be called… Ah! What a trap! And it was the only OOP related question! So maybe you’re right in this respect: the Microsoftee avarage developper (not to say the MCP) knows all the tips of Visual Studio but does not really know why he has to write “override” in his code.

    He, that was quite long! But, Gosh I didn’t want the .NET programmers’ honor be defamed without reacting. ;-)

  • http://odalet.wordpress.com Olivier

    @previous

    I was quoting J.P. Hamilton’s comment. Sorry.

  • Pingback: The Good, The Bad And The Ugly In The .NET World | The Inquisitive Coder - Davy Brion’s Blog

  • Pingback: Z. Dharmawan / blog

  • Who cares

    Maybe .NET developers are too busy to bloviate on blogs about the wonders of and the shortcomings of those who aren’t True Believers in the latest save-the-universe ideology. Please, what a bunch of arrogant wanking.

  • http://menet.name/blog/christophe Christophe

    Hi all,

    I agree with you, .NET developers know nothing about Inversion Of Control, Dependency Injection, Object Relational Mapping, and Aspect Oriented Programming. I fully agree.

    But they don’t have too! I’m at the head of a .NET developer team. We are working on websites, Windows applications, silverlight and so on. For our day to day work, we don’t have to use these technics (I’m not talking about ORM here, because we use it everyday). I agree with you, it would be interesting that developers know at least the name :) Of course, it would be great if they can have an overview about these technics. But we don’t need these technics for our work (also because the .NET framework offers many classes, high level enough so we don’t have to use them).

    Once again, you are right: .NET developers don’t even know these technical terms. But these technics, even if they are used in the 2 worlds JAVA and .NET, don’t have the same importance in these two worlds. I think you can’t really ask the same questions to JAVA and .NET developers.

    What do you think?

    Christophe

  • http://davybrion.com Davy Brion

    @Who Cares

    you may be on to something… i mean, maintaining the same shitty old code over and over again sure does take up a lot of time

    @Christophe

    Strictly speaking, you’re right… they don’t _have_ to know about it. Their code _would_ be better if they did know about it though.

  • http://thatjavathing.blogspot.com veggen

    I am one of those junior Java developers that you’re describing, and my feelings are exactly the same as yours. I am talking to .Net colleagues often, and they usually don’t even care about principles of DI, AOP etc… That only further aggravates the wound of .Net developers finding jobs a lot easier than us (at least in my country).

  • http://mikedopp.com mikedopp

    All I can say is wow. a bunch of java developers are now patting themselves on the back. Nice work. Great job. It is a great idea to keep your mind set that you are superior.

    Remember Assembly developers can write circles around any high level language. :)

  • Who cares

    @Davy

    Christophe is right. These things arise more naturally in the discussions of Java developers because they don’t have a such a unified framework. The fact that a tool is superior does mean that less skilled people can work with it more easily, but a highly skilled person can do even better with the better tool.

    Of course you interpret things according to your bias since yours is the arrogance to pontificate to the world in your little look-at-me endeavour here. But, this is typical of the narrow-minded zealotry of those who worship TDD, ORM, etc. as if these things had no shortcomings either. As Frank Zappa would say, shut up and code. :)

  • http://davybrion.com Davy Brion

    No practice or principle doesn’t have shortcomings, but that really doesn’t mean we shouldn’t at least try to improve the way we write software. Your “shut-up-and-code” mentality is the one that is often used to order codemonkeys around, or the mindset of people who simply don’t know any better that there often is a better way. In both cases, it doesn’t sound so good to me… but hey, if this works for you, then great ;)

  • What is proper

    I like the word “proper”. Because it points out the real underlying thing you are observing. There is simply a different definition of “proper” design principles in those two worlds.

    All I can say – in our company the direct comparison between the .NET and the Java teams have the Java team ahead on frameworks – and the .NET team on finished and active projects. Even I am a bit baffled about that, since I would have expected that the faster pace should create more maintenance overhead for the .NET teams and eventually slowing them down. We, in the Java Team, are currently investigating how we can adapt a leaner development. Who knows, maybe we are wrong about our definition of “proper”.

  • http://lehoangdung.sfi.vn HoangDunng, Le

    I’m a .NET developer and also a Java Developer, because .NET is what i like, and programming Java is my job.

    I just want to say that, everything Java has, .NET will have, and every .NET has, Java will have.

    All that your CEO want to know that you will make his wallet full of.. He only cares of the three things: spending money, spending time and the earning money. That all!

    I like DI, ORM, AOP.. but sometime I choose the easy way to do, sometime I choose these things. .NET developers are not bad, because they can do everything their boss want, it’s why they are exist. Java developers are the same. I know that many .NET developers also program Java. Many Java developers use DI, ORM… but they do not have to know everything about them, just follow some steps and have what they want.

    Know deeper about something is good, but you do not have to know everything, you just have to know what you need to get things done!

    PM: sorry about my bad english :) !

  • WhoCares

    The reality is this: software development is a very tough career. With the amount of time we have to invest keeping up with the latest technologies we could have achieved greater mastery in a less rapidly changing field. For example I’ve always had a passion for computers while a good friend had a passion for medicine. He’s now a radiologist making $400,000 a year working less than I do. While money can buy nice things, more importantly it buys things like a solid future for your family. There are other important things though. He has more time to spend with his family, and he has the satisfaction of becoming more and more expert at his specialty over time because its rate of change is manageable. Meanwhile for us developers, no matter how we improve at the craft of writing software we still have a constant learning curve keeping up with new technologies. We will never achieve a high level of mastery at anything because we can’t afford to gamble that any given area won’t become obsolete by the time we do. With that and with constantly working to get better at creating correct, clear, maintainable code under constant time and business constraints, what we don’t have time for is getting distracted by bloviating evangelists for every new architecture/process concept that comes down the pike. The developers I respect are the ones who have weathered enough of this nonsense to know that there never has been and there never will be One Correct Development Religion. People with too much time on their hands come up with this endless bullshit and then the fanboys pull out their dicks and try to measure them by who gets more excited about the latest end-all-be-all concept(s). If you want to go by subjective personal samples, fine: every developer I’ve ever met who got overly excited about the dozens of acronyms/word salads-of-the-day that more often than not lead to greater complexity in a project has been something of an arrogant, narrow-minded dick. Like other engineers our job is to produce concrete results to move the business forward, and we have to deal with many variables and imperfections such that there can never be a single recipe for all projects. It’s necessary to be professional, flexible, adaptable, and get things done to meet the business objectives. Management doesn’t care about your quest for the ultimate coding religion and neither do your coworkers. All the endless narrow-minded debating about the merits of this or that approach just kills the joy of coding IMO, and I wouldn’t want to work with such people.

  • Pingback: Java vs .NET Developers « Entertainment Kings

  • http://davybrion.com Davy Brion

    @WhoCares

    has the possibility ever occurred to you that knowledge of some fundamental concepts actually make it easier to transfer your skills from one technology to another? And thus, can greatly reduce the amount of time that you constantly need to invest in learning new technologies?

    Who’s really being narrow minded here?

  • http://dagonsoftware.blogspot.com Dag Blakstad

    My observation, having worked with both Java and .NET is that there is a fundamental difference when comparing development on Java .NET platforms.

    The Java platform (not just the JDK) is community driven, while the .NET platform is more of a shrinkwrapped product. The effect of this is that Java engages it’s users to think how things can be done. .NET users will more often wait for the next release from Microsoft, and see what are coming their way. Further Java is more dynamically influenced and influencing other programming languages and OSS projects adds APIs and features to platform. The engineers behind .NET has introduced a lot of good (and some not so good) ideas and technologies. The key difference is how things gets introduced.

    If you accept that Java developers is generally more involved and thinks more about how to do things, it follows that junior Java programmers also grows up faster. Maybe Java programmers blaims the platform and frameworks less the .NET folks when discussing what turns out to be suboptimal solutions to the problem they are working on. This provides faster and more accurate learning process about godd & bad design and programming techniques. In additions Java developers is eager to share their learnings, describing what they have done in terms of know idioms and patterns.

  • WhoCares

    @Davy

    Well obviously I think you’re the one being narrow-minded because you posted the equivalent of a “.NET developers suck” article, thereby painting everyone who uses .NET with the same brush. I think I know what you *mean* but it’s not what you said. In point of fact the same general concern can be raised for Java developers, as done here:

    http://www.stsc.hill.af.mil/CrossTalk/2008/01/0801DewarSchonberg.html

    The choice to be a good engineer or a “framework monkey” is an individual one. Like you just said, fundamental concepts cut across the choice of tool, yet your article is stated as “.NET developers suck.” If we accept your sample as statistically valid, what it really says is that it may be easier to be a framework monkey with .NET than it is with Java. However all that says is that it’s possible to be more productive with .NET, other factors being equal.

    But, it’s an attitude thing I’ve encountered many times. Open source work is a closely related form of dick measuring; really, it’s a complete waste of time. Imagine if Larry Page and Sergey Brin said “hey, let’s give this great new search technology to the world for free!” Sheer lunacy. Instead they now have billions with which to really impact the world if they really care. Like blogs, it’s a symptom of people who just have too much time on their hands and who think it will make other developers think they’re cool, for whatever that’s worth (hint: not as much as real money in the bank). For ORM, see http://www.codinghorror.com/blog/archives/000621.html and the verbose underlying article linked there. All of it true. So, feel free to continue to waste your time on such things without being paid for it. Zed Shaw’s immortal Rails is a Ghetto rant was worth reading simply for what it shows about the utter uselessness of that whole world and its pointless dick-measuring mentality. Real geniuses can turn a profit and don’t have time to set up http://www.gthrockmortonnumbnuts.com/blog/myopinion to impress the fanboys, and certainly aren’t silly enough to throw hundreds of hours of their life away on free projects that will ultimately be meaningless anyway. Seriously, whatever talent and knowledge you think you possess can be channeled more productively, and I promise you will live to regret every hour wasted. That’s all I have time for. Live and learn, and good luck to you.

  • http://hackingon.net Liam McLennan

    @WhoCares

    I don’t have the problem you described trying to keep up with change. I focus my learning on project management strategies, OO design principles and patterns. Most of the things I am learning have been around for more than thirty years. That is a rate of change that I can handle. Trying to learn what MS want us to (each of their new products) is a fool’s errand.

    Your link to the coding horror article is interesting because Jeff Atwood has clearly changed his mind since then. His current project uses objects AND a RDBMS.

    For what its worth, my anectodal evidence matches Davy’s. I think you are angry simply because you know that you are the sort of developer he was talking about.

  • Pingback: .Net vs Java Discussion « C# Hacker - The Rambling Coder

  • Common Sense

    “Open source work is a closely related form of dick measuring; really, it’s a complete waste of time. Imagine if Larry Page and Sergey Brin said “hey, let’s give this great new search technology to the world for free!” Sheer lunacy. Instead they now have billions with which to really impact the world if they really care.”

    They wouldn’t have had those billions if they hadn’t leveraged open source to build their great new search technology. If you weren’t so bitter and angry at the world, you could have come to the same conclusions.

  • http://lixin.info Lixin

    I personally agree that there are more Java programmers coding in good practice than those in .NET world. But it doesn’t neccessarily mean that those .NET developers will not have a better furture, considering the fierce competition, light-speed technology advancing and quicky varying business forms in the market.

    In the industry on which I am working, as Internet business was introduced into this industry pretty late, there is only one major company which has their system developed in Java, one developed in PHP plus old C++/VB and all the rest, about 5 to 6 major companies, have their system developed in .NET. Now a new trend in this industry is provide RIA to the clients, where Flex and Silverlight are actually only viable options, and I have seen no major players in this circuit will choose Java (including JavaFx).

    In conclusion, besides coding practice, tooling and some other factors are also very important. Let’s be pragmatic, developers.

  • http://www.mikeborozdin.com/ Mike Borozdin

    First of all, developers don’t have to know everything, moreover developers don’t have to keep in memory all those bizarre acronyms and patterns names. Instead they should be smart. Many people can use design patterns even without knowing their fancy names and reading a number of blog posts about them.

    Remember, all those patterns and techniques are not a silver bullet.

    Even if a interviewed programmer doesn’t know what IoC and DI are, doesn’t he is a bad developer, he can easily pick up those techniques if he needs to, at the same time he can eventually implement the same technique without reading about it first.

  • Lemonhead

    @WhoCares – your posts are full of win :)

    At this point in time I would prefer C# programmers over Java programmers any day of the week – how could you hire someone who purposely picks an inferior language (Java)? Oh yes please, let me hire someone who would purposely pick a language that doesn’t even differentiate between signed and unsigned! Please! Oh please, take away my delegates, they hurt my brain!! No more LINQ please!! Hahahaha. Stupid java developers.

    The massive irony of this post is that the absolute best DI framework out there (Ninject) is for .NET ONLY.

    Have fun with your shitty xml-based DI frameworks java fanboys. Even Google Guice is a POS compared to the power of Ninject, due the the massive limitations in how Java (mis)handles generics.

    And also, Hibernate sucks. Utterly garbage framework. And again, what irony that the only fluent interface for hibernate is for .NET (Fluent nHibernate).

  • http://www.NDepend.com Patrick Smacchia

    A crystal clear simple question to ask during interview:
    What are the intentions behind value and reference types?
    Let the developer digress on this for 5 minutes and you’ll get surprises (good or bad).

  • http://blogs.ugidotnet.org/smartinz Stefano Martinz

    I completely agree with Patrick Smacchia. There are other “hard-core” (…not really…) questions worth asking during an interview. If you don’t know the basic, it doesn’t matter how many “cool” principles/tools you have used.

  • anis

    I work as a senior DBA the thing is we have inhouse development relying totally on .NET, together with some older Oracle forms/reports projects why? because it gets us faster to results we want. The .NET developers are easier to find and in anyway our users all use MS-Windows as operating system. I myself use Red Hat Linux for my Oracle servers and most of our bought software run on Java WebLogic or OracleApp Server since most of companies we buy from are European and they tend to respect Java far more than .NET I hate to be biased but I think Java Programmers are better because they are not so GUI focused, and they were forced to think deeper. However as a whole platform maybe .NET is easier=faster to develop on so for smaller projects and interfaces we here depend on our .NET developers. I am lucky to be able to drill in Oracle technology without worrying it will change fundamentally and become obsolete. And another thing in enterprise that really counts is data intensive operations to be performed on database server itself (By plain old PL/SQL) making as little networking as possible between application servers and database servers.

    Now put yourself in management shoes. If some VIP from another department needs application to be delivered “yesterday”, their users to love easiness and clarity of interface, and your SysAdmins and DBAs say they do not care what it is written on. What would you choose, Java or .NET???

    On the other hand. If you want to develop cross platform large application (to leave the choice of infrastructure to your customers), to companies where users may use Ubuntu Linux as prefered desktop OS, application that would be maintenable and highly scalable (think like grid) and UI is not of primary concern but funcionality is everything. What would you choose, Java or .NET???

    People usually do judge the book by its covers and .NET is very appealing to new graduates because of its easiness so only the most confident programmers (or forced) dare to sail in Java waters this is why you have not so good .NET programmers.

  • Pingback: Pedro Reys» Blog Archive » .Net community focus and interests

  • John “Z-Bo” Zabroski

    So… hire Java developers and make them .NET developers. C# and Java are similar enough, and, frankly, I moved from the JVM to the CLR 1 year 2 months ago and never looked back. Between MS .NET and Novell’s Mono, along with PowerShell and SQLServer CLR Integration Services, there is a wealth of quality libraries Java can’t compete with.

    Frankly, the only thing .NET is missing is a well-designed message bus that scales.

  • http://adam.kahtava.com/journal/ Adam Kahtava

    I’ve witnessed similar observations. A couple months ago I took a position at a Java shop (I was primarily a .NET developer). I was blown away when I discovered that this Java shop had been using IOC, ORMs, and TDD for the past 7 years. Needless to say their internal process was a higher caliber than those of most .NET shops and their developers were top notch as they had gained so much experience using these approaches over the years. I’d certainly hire Java developers or work at another Java shop.

  • Stephen Anderson

    Yup, there are a lot of not-so-good .NET developers. This is because there a lot of .NET developers. More, I’d say, than there are Java developers, because there were a gobsmackingly large number of Visual Basic “programmers”, who’ve since jumped ship to VB.NET.

    Once that anomaly is controlled for, I don’t think that there is anything inherent in .NET or Java that makes you a better or worse programmer :)

    However, what is different is the way the community is led, as other comments have pointed out. The leaders of the Java community are quick to adopt and promote new development ideas, and quick to take direction from members of the community. Microsoft has demonstrably not been, preferring to push its own ideas, no matter how demented (Software Factories, I’m looking at you). This is changing. Some very very smart people are working there on languages and frameworks, and the intelligence is bubbling to the top.

    Java’s readiness to adopt new ideas is a mixed blessing. IOC and AOP are wonderful new guns to shoot yourself in the foot with. They are the antithesis of KISS, and introduce new and exciting ways to make your program incomprehensible and buggy. Like all powerful tools, they must be used with forethought and moderation. Unfortunately, I have become convinced that there are a lot of developers (possibly even the majority) who are currently incapable of that.

    Yes, I currently primarily program for .NET. I would define myself as a software developer. I don’t let my tools dictate who I am ;)

  • Shaw

    If the 2 year experienced guy you talk about could discuss with you on AOP comfortably then I would guess he was a bright guy. Not all Java developers are that good by any measure.

    However, Java community is usually more open to ideas and are much more matured. I have found Sun blue print guidance to be far superior to what MS offers.

    There are issues in Java side too. Many in Java community think that the language is falling rapidly behind C# in terms of feature addition. I’m not sure if the fear is entirely relevant as the number of solutions in terms of frameworks make up for that loss.

    I think the biggest strength of Java is they think in terms of solutions, but in .NET I have often seen great amount of importance attached to going by MS.

  • Pingback: How Community Matters | The Inquisitive Coder – Davy Brion’s Blog

  • alwin

    @Stefano Martinz and Patrick Smacchia,

    Well I can’t answer that question, I know some differences between the two but not sure about the intention. Could speculate about it though…

    I am however a big fan of using IoC, ORM and MVC, and know fairly well how to use them. I’m not an expert, but they give me big advantages.

    I’m a self-taught programmer.
    The reason I started using Monorail was that I couldn’t understand webforms.
    The reason I started using NHibernate was that I didn’t understand datasets or sql commands.
    (this was some years ago)

    I don’t use “cool” principles/tools because they’re cool, I use them because they help me solve my problems with software design.

  • Chris

    As someone who has left the .net world this seems obvious. MS developers tend to wait for technologies and practices to be pushed or dispensed from MS.

    I’d wager more than half the ones you interview wouldn’t be able to write hello world without an IDE if their life depended on it.

  • Damien Morton

    5 screening, 4 Java developers and 1 .NET developer. Now thats a representative sample, and surely a sample of such accuracy that one could generalise the results to cover all developers of the Java and .NET persuasions.

    When I was doing interviews a few years back, I used to ask interviewees to describe in broad strokes how a hashtable works. I only ever found one who could give a halfway decent answer, and it began with “hashtables are a magical thing”. The fact of the matter was that when I learned programming, you had to roll your own hashtables and has functions, whereas now, every programming language comes with hashtables built in. I still think programmers should know how they work, because if you dont, its real easy to make mistakes when rolling your own Equals/GetHashCode pairs. Ive even seen ‘experienced’ programmers doing such things as hashtable[a.GetHashCode()^b.GetHashCode()] = x for implementing a composite key on a and b.

    When I first started reading the GoF patterns book, I found myself pleasantly surprised that I had been using patterns much like the ones described by the GoF, but I just hadnt abstracted and named them.

    I think you will find the difference between .NET developers and Java developers is that Java developers spend a great deal of time picking and choosing between different implementations of GoF patterns, whereas .NET developers simply use the implementations given to them by the .NET framework, and it is the .NET framework developers who debate including different patterns in the framework.

    The upshot is that a knowledgeable Java developer will be able to argue the benefits of this or that IoC container, a .NET developer will use the IoC container provided by .NET without even being able to identify it.

    Another contrast is that while a Java developer is debating this or that implementation of IoC, a .NET developer is learning functional programming and LINQ, which has no real equivalent in the .NET world.

  • http://sarahmei.com/blog Sarah Mei

    It’s an interesting point, and I don’t think you’re talking about Java vs. .NET developers at all. I think you’re talking about the ability of a language, and in a larger sense, a framework, to shape the way people who use it think about development.

    There’s a lot of interesting linguistic research saying that your native natural language actually shapes and in some ways restricts the type of thought you are capable of. So I don’t think it’s a stretch to say that the formal language you use to program shapes the way you think about programming. If your language encourages or requires good practices, a good developer will be better and an bad developer might approach average.

    But every language has its restrictions, and what makes a great developer (IMO, and among other things) is the ability to be aware of those restrictions. Since Java encourages IoC, DI, AoP, ORM, etc., and has for years in some cases, I’d be more impressed by a Java dev who could talk about functional programming. And I’d be equally impressed by a .NET dev who could discuss AoP. Both are signs of someone interested in programming outside of their tech bubble.

    I’d still give them all the FizzBuzz test to make sure they could code. :)

  • virt

    All I hear is wah! wah! wah!. Just weepers.
    It doesn’t matter which language you code. Sometimes I write code in plain C, the apps run perfect and fast too. Do we really need OO and later tech?

    The real deal is Bill Gates and Steve Jobs are the ones making money not you and me. I still live in a rental apt after 18 yrs after graduating. You may think I am an old dog with no new tricks. But I see the same with young developers too, nothing promising in their life, they would probably end up in rental places after 15 to 20 yrs. We really need to think outside the bun in real life not just the work we do or the games we play. I have nothing against Bill Gates, he thought outside the bun.

    So stop whining and think where your life is leading.

    By the way I am not stuck at C, am working on asp.net 3.5 and Sharepoint.

  • Jasper

    So, you interviewed 4 Java developers and 1 .NET developer and that tiny sample makes you make a huge unwarranted generalization that Java developers know more about some specific techniques than .NET developers?

    And then a lot of commenters seriously start debating about why this is so?

    Ridiculous.

    (I’m a Java developer myself).

  • http://davybrion.com Davy Brion

    @Jasper

    you may have noticed that a lot of commenters also mention similar experiences

  • Matt

    I hate these discussions.

    Techniques like AoP, IOC, and DI get this free pass because they tend to decouple the code more. Nobody seems to care as much that now they need to dig through the code to find out what type of object is being made. They’re great ideas. But they’re not gospel, and they’re not suitable for use everywhere. However, because they attain buzzword status, they become important, and people think they’re more important than they actually are. Some people know these techniques but under different names.

    Another observation: the Java world (and .NET) seem perpetually caught up in this endless race to move more and more code away from where it is actually used *just in case* it has to be changed later. Rampant, speculative generality is as much a design sin as overlooking obvious generality in my book. I don’t want to have to put magic XML files in certain places to make an application work. I don’t want to specify subclasses to inject in.

    All your elegance dies if it impacts the user of the library, or (worse), the end user. Rails did an excellent job of showing up many systems that were mired in their own engineering ‘goodness.’

  • VSP

    So calling a basic concept with screwed up name as it was a new invention — is a typical job of a ‘Money wasting software engineer’ who just figures out what more 3-4 letter acronyms to ‘inject’ into his resume every 3 years.

    And then bragging about it as some type of ‘higher knowledge’ that makes you into a ‘special priesthood’ of the “enterprise Java developer” — is indicative of an insecure, mediocre person trying to build a ‘cocoon’ of hyper inflated ‘value’ that he some how possesses compared to mere mortals.

  • Kirby L. Wallace

    This article sounds like the author is criticizing developers who do not agree with his personal preferences in design methodology. He assumes that if a developer is not using IoC/DI, that there is something fundamentally flawed about their methodology.

    I personally do not care for DI because I have a fundamentally different approach to design. When I’m working on a class or function, I prefer to see everything related to the task at hand….. well… at hand.

    I hate having to run off over here to see what that does, then run off over there to see what that’s gonna do, then attend a meeting with these guys to see what’s gonna happen if I mash the blue button, then come back over here; dodge right, spin left… look over my left shoulder while holding amirror just so….

    All that is the reason why so much softwre is CRAP, never gets implemented, or if it does, never gets used.

    I write code that reads, in as much as possible, straight from top to bottom with minimal detours. Everything it does is here. It reads almost like English. IoC and DI and such coding methodologies are practices that encourage all kinds of unnecessary stuff. When I write code, it’s more like I’m narrating the code than “coding” it. And I narrate it in pretty much the order that I see it flowing.

    That’s just my opinion, though.

  • Goh

    I am .Net developer and used to work in a java-based company. I heard a lot of complain about microsoft and .net everyday from java developers. I think sometime they just too bias. What we really need is an application which really work regardless of what design pattern we are using. I left the java based company after a year and developed my own application (similar solution) which is running fully in ASP.Net. Now I have more than thousands companies using my application in a single server. My ex-company? still struggling on how to process the transactions faster. The fact is, my application is developed by my friend (now my partner) and I, and my ex-company application is developed with more than 10 java developers and 1 of them already have 13 years experience in java. I had proven .net can be better than java and it really depends on how you design the system. Bear in mind, i am just a 2 years experience .net developer that time and i know very little about the design concept as mentioned by Brion.

  • yougotit

    “IOC and AOP are wonderful new guns to shoot yourself in the foot with. They are the antithesis of KISS, and introduce new and exciting ways to make your program incomprehensible and buggy.”

    You’re 100% right.

    Any “interviewer” who asked me about AoP would get my reply “AoP is almost always a bad idea”.

    If he’s running things at the company, you can be sure they’re spending gobs of ca$h getting nowhere fast.

  • http://fakeslikeUs.com fakeslikeUs

    Has anyone on this blog worked at one place for 3 years or more. Yet we call ourselves Programmer Architect. Hmm, wonder what that means. Thanks

  • Paul Thiel

    Could there be a reason you had 4 Java developers looking for a job and 1 .Net developer looking for work?

    Over my career, I’ve been everything from help desk to network admin to developer to CIO. I have done contract work in both Java and .Net. I have seen outstanding and horrific development in both.

    I find .Net developers are (in general) more interested in solving business problems (and making money) than building technical towers.

    In times of recession, this matters more than knowing 1001 design patterns.