The Inquisitive Coder – Davy Brion's Blog

Trying to walk that thin line between intelligence and ignorance

The Good, The Bad And The Ugly In The .NET World

Posted by Davy Brion on April 29th, 2009

I’ve gotten quite a bit of feedback on my previous post, and there are a couple of things i’d like to address. It seems that some people kinda took offense to my statements about the rarity of .NET developers with knowledge of certain practices/principles. First of all, i would like to state that i have been working in the .NET world for about 4 years now and have worked with quite a few .NET developers during those years. Most of you already know this and i feel stupid for even mentioning it, but apparently there were people who read the previous post thinking i didn’t know anything about the .NET world and that i had based my statements on just the one .NET developer that i mentioned in the post.

Anyways, back to the topic at hand… the quality of developers in the .NET world. As some people mentioned in the comments of the previous post, Microsoft itself thinks of developers in 3 categories: Mort, Einstein and Elvis. I couldn’t really find an ‘official’ Microsoft link about these personas but they are pretty well known by now. Here’s a quick summary:

Mort, the opportunistic developer, likes to create quick-working solutions for immediate problems and focuses on productivity and learn as needed. Elvis, the pragmatic programmer, likes to create long-lasting solutions addressing the problem domain, and learn while working on the solution. Einstein, the paranoid programmer, likes to create the most efficient solution to a given problem, and typically learn in advance before working on the solution.

I believe that Mort is the single most influential individual in the .NET world. Everything revolves around Mort, and this is where a lot of the strengths and weaknesses of the .NET platform in general come from.

People who are new to .NET can usually be productive in a pretty short timeframe. The tools are often relatively easy to use and there is plenty of documentation and Getting Started material available. No matter how you turn it, that is a strength of the platform. However, what is generally lacking here is some kind of follow-through on the fundamentals of healthy, maintainable software development. We’ve all seen the countless simplified, hello-world examples that are often demonstrated at Microsoft events. Some people consider me arrogant when i say this, but i truly believe that this kind of Drag-N-Drop Development is generally unhealthy. Does it have its place in the right context? Sure, as much as just about anything else has within its context. Take it outside of its context and things can get messy pretty fast.

Getting Mort hooked on this kind of development, without following through on Mort’s education is like teaching construction workers how to quickly put up a wall without educating them about making sure that wall is gonna hold up over the years through all of the forces that will act upon it. But hey, the wall is there, right? Time to move on to the next wall! Or better yet, let’s have Mort do some electrical work while he’s at it. After all, we already know he’s adept at construction and he finishes his work quickly. Whenever he has a few minutes time, we’re going to have him work on the plumbing as well. He’s got a great set of tools at his disposal, so he should be able to do all of this pretty quickly without investing too much time in his educational process.

There are tons of Morts in the .NET world. And Microsoft is constantly building and releasing more and more libraries and tools to make sure that Mort can quickly complete any task that is assigned to him, no matter how fit or unfit he is to complete that task in a sufficient manner. I think we all know that there is a lot of horrible .NET code that has been written over the years and i truly believe that a lot of that could have been avoided if more effort had been put into properly educating Mort.

Steven Smith left the following gem in his comment on my previous post:

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 think i can safely say that this will sound very familiar to a lot of you who are reading this.

So, is all hope lost? Certainly not. In the past 2 years, we’ve seen some tremendous improvements in the .NET community, mostly brought on by the ALT.NET movement which focused more on writing clean, maintainable code using proven design practices and software development principles in general. Regardless of what you (or me) personally think of the ALT.NET movement in its current form (or lack thereof), there is no denying the impact that it has had already. Microsoft appears to be focusing more and more on the topics that are typically associated with ALT.NET. All of a sudden, Microsoft has libraries for Inversion Of Control, for MVC web development, Object Relational Mapping, and more. These tools might not appeal to everyone who’s already used more mature/powerful alternatives, they are still a very good sign. It not only shows that Microsoft is willing to invest more effort into this, but it also increases the exposure of these principles and practices to Mort. It’s a slow process for sure, but the wheels do appear to have been put in motion.

If we can combine this with a more concentrated educational effort, we might be able to get to where Steven Smith and myself would like to get:

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.

Perhaps someday the majority of us, instead of a very small minority, will.

21 Responses to “The Good, The Bad And The Ugly In The .NET World”

  1. Richard Lowe Says:

    I mean no offence in saying this, and I will say up front that I think you are a more knowledgeable developer than I am. But I do want to make this point: I think you should consider being more skeptical about your anecdotal experience with Java and .NET developers in interviews. I know you’d probably defend your position with more anecdotes than just the 5 interviews you mentioned in the previous post, but that’s the example you used, and frankly, there is no good reason from even a much larger sample of experience to draw these conclusions. To really attempt generalizing about the broad community: 1) You would have to approach a 5% sample of the larger community you are trying to generalize about 2) your sample would have to be *randomly selected* from that group instead of the self-selected group of people looking for a job 3) You would have to have a more formal/rigorous interview process. 4) Your process would have to try to compensate for bias (we all have bias, that’s not an insult I’m aiming at you).

    It’s not that anecdotal experience is useless – by no means. Human beings are great at getting some things right from intuition and experience. But in this case, this (very general, very broad) claim, under these particular circumstances is NOT very well served by human intuition. Now, I will excuse your posts’ title – you do say “I prefer…” which is subjective and needs no explanation. But then you go on to imply that the reason you prefer Java developers is because they, in general, have greater knowledge about technologies that you believe are essential to being a good developer (If pressed, I would agree with you that knowledge of those thing is important, though possibly for different reasons). It’s this claim, that Java developers more frequently have this knowledge, that I’m arguing is not supported by your experience.

    Also, I’m not saying you’re wrong – you could by right, it’s just you have no *right* to draw strong conclusions about the overall community from any anecdotal experience you have. I thnk your experience *is* an interesting clue to follow to actually research in a more rigorous way. Personally, I’d be fascinated by this if anyone were to do it.

  2. Peter Morris Says:

    The problem with ALT.NET is that if ever you stumble across its website not knowing what it is, you’d leave.

    “We are a self-organizing, ad-hoc community of developers”

    We are people, who isn’t?

    “bound by a desire to improve ourselves, challenge assumptions, and help each other pursue excellence in the practice of software development”

    We like to write better code than we used it, many crap coders do too.

    But then the useless part is this:

    “All are welcome to shape and form the dialog in blogs and lists and face-to-face gatherings both local and global.”

    Poster designers always put the most visually appealing part of their design in the middle. This is because people naturally try to assess the whole as quickly as possible before deciding if they wish to spend their time looking in detail, if they like it they will start reading from the top.

    Why is that relevant? I don’t know about other people but I remember my first experience of this site being something like.

    1: Read some text – yeah, what’s so special about that?
    2: See some links.
    3: I don’t want to read loads of information which might be a waste of time, I will quickly scan some to decide if it is any good or not.
    4: I wont choose the first link because it’s likely to be beginner stuff.
    5: I wont choose the last link because if it is too advanced at this stage I wont understand it.
    6: I will try something near the middle.

    Right then, what do we have?
    A: Blogs – At the moment lots of conference announcements, and… FRONTPAGE? Not looking good so far.

    B: Look further down the list, LOCAL / GLOBAL
    LOCAL = Philidelpha? Not very local to me
    GLOBAL = Sold out event in Seattle. Again no interest to me in the UK.
    At this point I have the option to “Identify myself” – Not sure why I would want to give out my details, so I’ll skip it.

    C: Dialog – I click it and end up on IRC. I’ve been there for a while, not much learning going on in there to be honest. I stay because I was already aware of a few things, but most of the time it is quiet especially during GMT waking hours.

    D: I see “Shape” as a link. I’m sorry but at this point it’s already too late. The word “Shape” suggests nothing to me at all and the other links were big disasters. I’ll be off now, it’s just another website with not much on it. I need to get some work done, I have a deadline.

    That’s a user story based on my first experience of the alt.net website. Pretty poor really.

    Another thing that is apparent in the .NET world is that many people/companies simply wont touch anything that isn’t from Microsoft. I expect it is based on past experiences of buying (or using free) 3rd party tool kits and having the vendor disappear or the tool kit’s development just drying up. Sure MS do this too, but nobody ever got sacked for choosing Microsoft.

    Then onto Microsoft itself. Here I am writing apps, tight deadlines and all that usual stuff. Any free time I have I probably end up working to meet my deadline anyway so it leaves little time for learning. Then you discover something like “Patterns and Practises”, a quick browse through the site reveals a mammoth looking set of projects, the learning curve looks huge, and you don’t have time to learn anything new unless it is quick to learn and has an immediate return for your investment.

    You say that many people use IoC etc for testing. I confess, that’s me! I use it to aid testing. Sure I love it, and it really helps me to split up my app into smaller more managable chunks too. I am aware that I can intercept calls etc but at the moment I don’t see an immediate return on the investment of learning how to do it. When I used IoC + RhinoMocks for unit testing I saw an *immediate* benefit and it didn’t take long to learn either, I was benefitting from it the same day and that’s a great thing!

    If you ask me there should be a big “Quick productivity guid” link at the top of the alt.net page. Have a numerically ordered list (to clearly show it’s ordered and should be read top to bottom) starting with the simplest thing you can do to make your life easier. Then the next, and so on. It may take the reader a year or even longer to get to the last item on the list, but at least they will work their way as far through as they feel comfortable with. I don’t want to look at a catalogue of stuff and decide what looks the easiest to learn because I first have to understand everything and that takes too much time. Tell me the easiest thing, then the next easiest, and so on.

    Another problem is, if you have never heard of something how do you Google for it? I remember years ago Googling for “Dont use data base components get the objects to save themselves” because I didn’t know the term Object Persistence Framework (as it was called at the time). It’s no good saying that people should learn this stuff because many people don’t know they should, they’ve never heard of it!

    Rant over :-)

  3. Mike Hamrah Says:

    I’ll agree with you that MS is very focused on the Mort developer. But you can’t stereotype the entire .NET community to the Mort developer; there are plenty of Java, Rails, and PHP Mort’s out there. There’s also an entire ecosystem beyond Alt.Net in the .NET world push best practices- even within MS. Asp.Net MVC is proof of that.

    I encourage you to explore the .NET world more. There are plenty of strong .NET programmers out there- Rob Conery, Phil Haack, Jeremy Miller, Scott Hanselman, Ayende- pushing best practices that have nothing to do with Mort. Look at incredible OS projects like Mass Transit and Fluent NHibernate- these are driven by strong community members pushing great stuff into the .NET world.

    You just have to find it- both the information and the right people to talk with!

  4. Davy Brion Says:

    @Mike

    the last part of the post is all about people like Phil Haack, Scott Hanselman, Jeremy Miller, Ayende, etc…

  5. Peter Morris Says:

    You know, you could employ Java coders and cross train them :-)

  6. Mike Hamrah Says:

    Thanks for the response Davy. I think the concentrated educational effort is there- but you’re not going to find a random .NET or Java developer and have an in depth, inspiring conversation about ORM tools just as you wouldn’t find somebody on the street and have a substantive conversation about global economic policy.

    I’ll end with this- the one thing I’ve always admired about the MS stack is simplicity with incredible customization and extensibility. You can start with a simple web page with a bound control to an automatic data source and end up with MVC, a layered architecture, finely tuned sp’s, various caching strategies, messaging strategies, an incredible web service framework with numerous transports- all in the same framework with a common api and toolset. With minimal configuration and retooling. All easily integrated.

    There’s plenty of information and people who are sharing that knowledge all the time.

  7. Eric Smith Says:

    I think that as developers, we aspire to improve our craft (well assuming we aren’t Morts). A kind of class system has evolved as a result of this distinction, with associated (perceived or otherwise) levels of bigotry.

    I think that the real reason for Morts being so influential is that they are, simply put, the most profitable type of developer within the context of the majority of business problems that are required to be solved. Microsoft knows this and shapes their toolset accordingly.

  8. Daniel Earwicker Says:

    I don’t recognise the Mort/Elvis/Einstein stereotyping, and definitely not the emphasis on Mort – I think you’re watching the wrong demos or something. I was a C++ programmer for a long time and evaluated Java and C#/.NET, and the latter won easily for a ton of reasons.

    It seems to me that the big recent changes in .NET have been the introduction of generic and functional-style programming (Linq-to-objects, heavily influenced by languages like Haskell, Scheme, etc.), the declarative style of WPF (like using the HTML/DOM to make rich clients) and the ASP.NET MVC framework. None of these have anything to do with running wizards and throwing half-baked solutions together. They’re all really good directions for a platform to move in.

  9. Chris Brandsma Says:

    No group has a stanglehold on the best or the worst in society. I’ve met my fair share of incompetent developers in C++, C, Java, PHP, C#, VB, and Perl communities. I’ve also met some of the smartest developers in those same groups.

    But, by and large, the easier a language is to get started in, the more you attract non-developers (morts). But I’m not concerned with them. I think it is necessary to have some languages that are easy to approach (even if the systems are limited in nature) because people are able to get stuff done, and it doesn’t burden their actual jobs. When it does, guys like me come in.

    But for professional developer, that is another story. Every developer that I felt was below potential had one thing in common: they typically knew ONE system well. Be it C#, VB.Net, C++, Ruby, or SQL. And they did EVERYTHING there. I would see a palatable fear of new technology.

    That is the experience of my 10 years of being of rogue developer anyway.

  10. Jonathan Says:

    Davy, (making sure my posts are read in a calm manner)
    My previous posts followed more what Chris just said. I agree there are many crap developers out there. But there also a lot of crap financial analysts. I guess my point is I don’t see the .NET correlation. That being said, I want to also comment saying i think there is a need for all developer types you mentioned. Just becuase someone is mort doens’t make him crap though. there are scenarios where peopel, who may be more business analysts just need a working solution. I guess it’s all a balance.

    Why i am posting here is because people listen to you and I would prefer is you focused more on the cause of crap developers. Things like lack of caring or poor guidance in the begining of their career. Maybe something that would ignite a spark for developers who don’t care.

    I don’t know, maybe I am rambling but I don’t like alt.net. Let me first say, it is VERY possible I missed their message but i read ALT.NET as developers who are always doing something new and different and rewriting everything. If this is true, then I think this is a developer I do not want to work with either. Some things are solid. there needs to be a balance.

    I appologize if this comment lost focus of a single subject but all in all i agree with you but I don’t think you are addressing a deeper issue that affects any job: the lack of caring.

  11. Davy Brion Says:

    @Daniel

    I agree that the platform is generally moving in the right direction… but that doesn’t mean that everyone is moving along with it as well, at least not in how to properly use all of the new features/libraries/frameworks

    @Jonathan

    the lack of care is indeed one of the biggest root causes of most of the problems in this industry… well, probably every industry actually.

  12. Renardi Says:

    After straddling in both world, MS.Net, and java world. I do have to agree. I think this boils down to the closed source environment of MS, rather than and open source environment of other languages (Java/PHP/Ruby/Python). MS is moving to open source platform, but rather slowly and sparsely communicated.

    Each has its benefits and drawbacks.

    In MS.Net most of your tools are closely integrated. I can’t say that they are consistent, but they are integrated. Visual Studio IDE is an example, the know-it-all beast.

    In Java, you have a mind-boggling number of tools available for you. Some poorly designed, some not, but some are truly ahead of MS. They are less integrated, but they are pluggable, and they are more suited to a lot more problems that MS can ever imagine, or think of.

    In a way, MS always think of the building first, then build tools to build that building. In Java, you build the tools robustly first, and then you construct any kind of buildings you want.

    Overall, this kind of criticism is healthy, it symbolizes progress.

  13. Angelo Cajipe Says:

    Maybe if you’d present us with objects statistics & research your arguments can be more convincing.

  14. Peter Morris Says:

    I’ve posted this on the Unity forums.
    http://unity.codeplex.com/Thread/View.aspx?ThreadId=55233

    I’d be very interested in seeing your reply to this question :-)

    Regards

    Pete

  15. Davy Brion Says:

    Seeing as how i have zero experience with Unity, i can’t really recommend anything specific

    if you’re looking for more stuff you can do with an IOC container, i’d look into the AOP possibilities of your container, and instead of looking for examples to see if you might consider using that, think of some usage scenarios that you actually need or that could help you a lot and then try to get it working.

    Basically, go over your codebase with a critical eye and think “where can i make improvements here?”… it doesn’t have to be specific to your IOC container… using the container (or any piece of technology) is only a means to an end, remember that.

  16. Jim Says:

    Java has a mechanism to ensure only good developers use it – the environment and ecosystem are so difficult to use and work with, that only ‘Einsteins’ actually get past the first day.

  17. Lixin Says:

    @Jim – It is somewhat true. My impression is,

    1. .NET developers ensure their job security by constantly and quickly adding new features supplied by Microsoft tools into development.

    2. Java developers ensure their job security by making their code harder to be imitated by those junior developers.

  18. AuthorUnknown Says:

    I am a .NET developer at a financial institution. I read your previous post and your follow-up, and all I can say is ‘Amen, brother’. I’m 28 now and have put in more than my 10,000 hours, but I know that I’ve only begun to scratch the surface.

    I’m constantly frustrated by my co-workers love of the single-layer, drag-n-drop, one-off applications (suckling off the microsoft teet as I call it). I’m interested in patterns, SOLID, mocking frameworks and all the cool stuff that my RSS reader just downloaded.

    However, here and at many other places, I’m in the minority. Our primary business isn’t software, and I’d be burned at the stake for turning a one week project into a one month project in the name of ‘good software engineering practices’.

    You are right that a lot of .NET developers don’t have the motivation or interest to move past a junior level, but don’t forget that many development shops exist to support some other business. Some of them also don’t have the opportunity, and there is a reason that the RAD/DnD approach to development became popular.

    As for me….well, I’ll be job hunting as soon as the market picks up. I prefer to be challenged.

  19. meowth Says:

    @Davy, a bit earlier you wrote “Educate, not protect” post.

    So, this is what Microsoft does with all fans of .net — instead of diving in principles of solid solutons it protect them with new and new and new tools, libs and components. That’s the difference.

    I’m a .NET developer, but I do like Java’s approach — Spring.net and NHibernate, IoC and Fluents, and many others. Maybe it makes sense to switch to Java searching for next employer.

  20. .Net vs Java Discussion « C# Hacker - The Rambling Coder Says:

    [...] The originating link is: At This Point, I’d Prefer Java Developers Over .NET Developers and the follow up/update is: The Good, The Bad And The Ugly In The .NET World [...]

  21. Steve Wortham Says:

    I can’t say I’ve heard the Mort, Einstein and Elvis thing and I don’t mean to brag — but I’m definitely Elvis. ;)

    All kidding aside, it seems to me that your programming practices are heavily influenced by what languages you’ve worked with. Developers who got their start with .NET may be very proficient with all of .NET’s built-in controls and niceties and they may even be incredibly productive because of it.

    On the other hand, I got my start in QBASIC (3 years), and later C++ (4 years) and became used to dealing with the nitty gritty. When .NET first came out as a Beta I began working with it right way and loved most aspects about it. But even in my .NET development I would tend to create a lot of custom solutions for which I thought some of .NET’s built-in controls were lacking.

    Since then I’ve always been wary of new features introduced in .NET. Many new features are good, but I really want to understand them before using them. And just because it’s new doesn’t mean I have to use it.

Leave a Reply

XHTML: You can use these tags: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>