Blue Pill vs Red Pill

36 commentsWritten on December 15th, 2011 by
Categories: Opinions

I've been somewhat critical of certain 'hot' MS technologies on Twitter this week. Particularly: Azure, Nuget and Entity Framework, and I didn't even bother to complain about the troubles I've had with the differences between 32-bit and 64-bit Powershell today. And I've noticed that whenever I voice a negative opinion on a Microsoft technology that is considered cool or great, I lose a few Twitter followers. My reaction to that is: good riddance. I prefer losing a few followers because of it, than having to deal with the responses from certain fanboys who either haven't stepped outside of the MSDN world, or are just trying to impress others with a devotion that they're hoping will increase their status within their organization or within the Microsoft developer community in general.

A lot of people think that I'm anti-Microsoft. And I'm really not. I'm not anti-anything. I am pro-quality. I have high standards because I've seen and experienced high quality solutions elsewhere and when I have to deal with lower quality alternatives to those solutions, I tend to compare them, which is only natural. If Microsoft releases good stuff, I'm more than happy to use it. I even considered creating an Entity Framework training course, similar to my NHibernate training course, because I was hearing many good things about it. But after trying to deal with a certain Entity Framework problem that came up this week in the one project at work that uses Entity Framework, I couldn't help but think "I don't want this mess in my life, no matter how much money I could make with it". I sincerely want to use good Microsoft technology, but too often it just disappoints me. And that in itself, isn't much of a problem since there are plenty of good Open Source alternatives around. What I do consider to be a problem is the reaction that many people have when you're critical of Microsoft technology.

I've often compared it to living in The Matrix. A lot of us are living in a world where they are being pushed into believing something that just isn't true. And some of us at some point get to choose between taking the blue pill or the red pill. The blue pill symbolizes blissful ignorance of illusion, while the red pill symbolizes the sometimes painful truth of reality. A lot of developers in the Microsoft world choose to keep their eyes closed and blindly believe whatever Microsoft tells them to believe. They'll run into a variety of problems with the technologies they've been told to use but a lot of people just accept it for what it is because they don't know any better, or because they're scared of the seemingly harsh world that awaits them should they choose to ignore Microsoft's guidance and venture out into a world that is more chaotic, yet offers more possibilities and flexibility. If you take the red pill, you learn a lot about what's really possible yet you face the added burden of having to deal with the people who've picked the blue pill and even worse, the technology that comes with it. Because that truly is the only bad part about taking the red pill. You'll start taking some things for granted, and when faced with technologies that don't quite match up to what you've recently become used to, you will get frustrated because of it. After all, you know things can be done much better with less friction, yet here you are, dealing with problems that have been solved by other libraries/frameworks already. That is the only sour taste you'll experience after having swallowed the red pill.

The choice between the blue pill or the red pill is one that everyone has to make for themselves. And honestly, I can't be bothered anymore to try to convince people to take the red pill instead of the blue pill. I've learned to adopt a "whatever floats your boat without sinking mine is fine with me" attitude, but sometimes, I can't help but wish for a world were people would try to think just a little bit more for themselves instead of blindly following what a dominant entity is telling them to do or use. Look around, see what other people and communities are doing and honestly ask yourself "are they doing things better than I am?". And if they are, put in the effort to figure out why and how they're doing what they're doing. The worst thing that could possibly happen is a temporarily sour taste, and there are many ways to wash that away.

  • http://www.webpirates.nl Robin van der Knaap

    I think the problem is you only seem to criticize ’lower quality products’ from Microsoft. Looking through your previous posts I don’t see any mentions of inferior quality products from other vendors. 
    I also think most .NET developers are getting tired of always being accused of following Microsoft blindly and not looking at the alternatives. As if that’s not the case with users of other platforms. All vendors have their share of fanboys.

    Taking a more balanced approach will probably get you a lot further.

    • http://realfiction.net Frank Quednau

      The point where you get sad with regard to OS and the .NET platform is when Phil Haack blogs that C# does not appear in github’s top 10 languages from their hosted repositories.

      • http://profiles.yahoo.com/u/XE4JL6FVDKO3P4H22AUPULKFQA Stilgar

        I don’t get it. Why should C# appear on GitHub? There is Codeplex, it has existed before GitHub and is known in the .NET community. Why should the .NET community migrate to GitHub? I understand why GitHub should be bothered by that (they lose revenue) but why should the .NET community care?

        • http://davybrion.com Davy Brion

          Because Github is vastly superior to Codeplex?

          • http://profiles.yahoo.com/u/XE4JL6FVDKO3P4H22AUPULKFQA Stilgar

            So vastly superior that we should migrate thousands of projects there, make all their developers learn the new tools and educate millions more to look at GitHub instead of Codeplex when searching for libraries?

            • http://davybrion.com Davy Brion

              honestly, i don’t think anyone would regret it afterwards

              • http://profiles.yahoo.com/u/XE4JL6FVDKO3P4H22AUPULKFQA Stilgar

                Well that’s up to the developers who have open source projects to decide. If you don’t have a problem with migration then you won’t have problems with having two places for projects.

                BTW you mention Azure. What is the alternative to Azure for .NET devs?

                • http://davybrion.com Davy Brion

                  the Azure thing was about the node.js support that they’ve recently introduced. i just said i’d rather go with nodejitsu or heroku instead of azure if i wanted a cloud-based node.js solution.

                  The only alternative to Azure for .NET that I know of is the very recently introduced ‘Iron Foundry’ http://blog.tier3.com/index.php/2011/12/tier-3-net-framework-cloud-foundry

                  • http://profiles.yahoo.com/u/XE4JL6FVDKO3P4H22AUPULKFQA Stilgar

                    Ah I see. I’ve always thought that the fact that Azure supports anything but .NET is to be able to get customers that are using different tech. If you only provide Java and Python (Google App Engine) you won’t get the customers that have systems using Java, Python and .NET even if your Java support is better. I think this is why all the non-.NET stuff on Azure is important.

                    • troethom

                      I’m not sure that is the case. It is what Microsoft would like you to believe, but who on earth uses Ruby with Microsoft SQL Server?

                      Azure lacks all the peripheral services that you use with those technologies; hosting the core framework has little value – and especially since there are better hosts out there for those technologies.

                    • http://www.facebook.com/NaibStilgar Stilgar Naib

                      Yeah because Ruby cloud providers have perfect support for .NET…

                    • http://davybrion.com Davy Brion

                      i don’t think any of them ever claimed they did

                  • troethom

                    There is AppHarbor (https://appharbor.com/). We started out a year ago using the slogan “Azure done right” (sometimes “Heroku for .NET”).

                    We were (and are) not impressed with Azure, so we figured that there would be others like us; others who would like their Bitbucket/GitHub repository to automatically deploy their application and who would like a service that at the same time built their code and ran any unit tests.Full disclosure: I’m a co-founder.

                    • http://profiles.yahoo.com/u/XE4JL6FVDKO3P4H22AUPULKFQA Stilgar

                      Cool. I wish I had any idea worth of cloud deployment.

            • troethom

              How much education does it really take? Developers should keep up-to-date with new technologies at all times. I wouldn’t want to hire developers who didn’t do this already.
              I tend to believe that the general quality of .NET libraries published on GitHub is way higher than the average quality on CodePlex. Perhaps it’s because the projects are newer and that GitHub promotes collaboration, perhaps it’s just because those who uses GitHub are the ones who didn’t take the blue pull in the first place.

              NuGet replaced CodePlex for me. CodePlex is a place I go to get binaries; getting the source is multiple clicks away from the landing page. On GitHub it’s the very first thing…

              • http://profiles.yahoo.com/u/XE4JL6FVDKO3P4H22AUPULKFQA Stilgar

                Getting the binaries is what the average developer wants to do in 99% of the cases.

                I can’t see how everyone will be willing to keep up with all the tech all the time. For example I’m a great enthusiast about programming languages and consume a lot of content on the topic. I get moderately interested in web stuff and different libraries but I will not research any tooling (source control, automatic build tools, etc.) unless I am paid to do so because I find it incredibly boring.

                • http://davybrion.com Davy Brion

                  even if it reduces friction as you work on the stuff you are enthusiastic about?

                  • http://www.facebook.com/NaibStilgar Stilgar Naib

                    So how do I judge what exactly will reduce friction. Are we back to “research everything all the time”?

                    • http://davybrion.com Davy Brion

                      well, if a bunch of people seem to like something that you don’t know yet, you know it’s worth taking a look. Worst case scenario is that you’ll be able to dismiss it with an educated opinion.

  • Matt Hidinger

    You’ve been in my Google Reader for quite a few years and I enjoy a lot of your articles; although I almost always avoid your posts categorized Opinions.

    In this case I’ll comment since like Robin says below, you’re making a sweeping generalization in a lot of your arguments suggesting that if you don’t use open source you’re blindly following MS. I also think you’re showing your bias in the specific example cited in this post. You specifically say the _one_ work project at work that uses Entity Framework. How many projects have you done with nhibernate? Do you really argue that nhibernate doesn’t also have it’s share of problems, especially ones that you ran into in your _first_ project using it?

    I don’t want to defend Entity Framework as it really does have a long way to go and does have real problems, but the much simpler DbContext API and the new Migrations API using Powershell I think is coming along relatively well. I also think it’s a cheap copout to rant about anything without providing constructive criticism. MS teams do make poor design choices sometimes, as does every software team on the planet. If you have feedback you definitely have the means to be heard at least, probably moreso on the NuGet project.

    • http://davybrion.com Davy Brion

      NHibernate certainly has problems as well, but it offers much more flexibility to change its behavior.  There are plenty of extension points and if you have found a bug, there’s at least the possibility of getting it fixed soon, whereas with Entity Framework you might have to wait until the next official release and that’s only IF they actually choose to fix the bug.

      as far as your ‘cheap copout’ comment, that’s probably because i’ve been directed to Connect a few times too many… and we all know what generally happens when you log an issue on Connect

      • Matt Hidinger

        Agreed, but thankfully the EF team has been moving to more out of band releases – they just released EF 4.2 a few weeks ago. And yeah Connect is almost entirely useless and has never worked favorably for me, but there are other ways to at least get your voice heard, depending on the product group.

        All that said, I do 100% agree with you that if developers are not at least investigating alternative solutions (or worse, totally ignorant that they even exist) then that is a major problem and would indeed be a very frustrating team to work on. As a big open source fan I find that I’m more often than not able to make a compelling case to go one way or the other; the most important thing for me is being able to talk intelligently about both solutions and able to sell my idea up to chain in terms they (powers that be, whomever that is) can appreciate and understand.

  • Daniel

    I cannot but agree with Davy, I’ve been in the same situations for too many times. Struggling with “high quality” software, that was high quality only on paper. The same goes for other big companies. And when I discovered Open Source, it was like the sun came out of the clouds.

  • http://twitter.com/dagda1 dagda1

    I realised this quite early and it was all thanks to P&P’s logging framework.  It was hideously complex and practically unusable.  They messed up one of the most basic utilities.  I turned to log4net and in turn .NET OSS.  I never used anything by P&P again.  The only other slip I made was MSTest.  Yet again, they screwed it up.  The trust ended after that.  ASP.NET MVC might just be the only exception to the rule although I would like to try openrasta.

    There is a polar and better OSS product for nearly every .NET product:

    EF => NHibernate
    Unity => Castle Windsor And the rest
    MSTest => NUnit and the rest
    AppFabric => Memcached
    NuGet => OpenWrap
    MS Ajax => JQuery
    Orchard => ANY OSS CMS beats that complex crap
    Windows Workflow => ANYTHING BEATS THAT CRAP
    SSIS => Rhino. ETL
    etc. etc. etc.

    And let us not get their failed intellectual masturbation projects like Oslo. 

    I like the framework. I don’t know what goes on with the guys that make the tooling.  Any MS dev suggesting a drag and drop designer should be sacked.  They never work and they never learn from that.

    • Steve Sheldon

      Ahh, Nuget… OpenWrap.  Speaking of living inside the bubble.

      Has anyone ever looked at Maven?

      • http://twitter.com/dagda1 dagda1

        Not sure I understand your point about the bubble.

        Maven is xml hell.  I shudder every time I think of the POM.

        • Steve Sheldon

          Oh I don’t want to use Maven… I just think the paradigm works better for large development than does nuget or openwrap.

          Although I gotta look at nuget 1.6, they introduced build support for grabbing packages.  May be better now.

  • Kelly Brownsberger

    I can relate to your opinions and often share your frustration. Would you care to share your EF pangs?

  • http://www.daedtech.com/blog Erik

    I spent a number of years developing in  Java/C/C++ for Linux, and, upon transitioning to .NET/MS development, my take is that this world is a “gated suburb” whereas the other is more like a port town where you’re less likely to know your neighbors and they come and go.  Gated suburbs will tend to be more susceptible to “Emperor’s New Clothes” scenarios than their counterparts, as you describe in this post.  I guess the tradeoff is that gated suburbs tend to do a lot less reinventing of the wheel, which is often good, but not so much when the wheel could actually use the reinventing.

    Since starting in the .NET world, I can’t tell you the number of times I’ve been told to do something because Microsoft declares it a best practice or because such and such MSDN developer said the same.  The thing is, as a matter of policy, taking this at face value is actually a help to someone new to the community, since the odds of that practice being good or even “actual best” is fairly high.  But, it is kind of off-putting at times.  I can empathize with the sentiments in your post.

    • http://davybrion.com Davy Brion

      there’s definitely a lot of reinventing of the wheel going on, particularly whenever an OSS library is becoming popular and Microsoft needs to provide their own alternative… if you look at the list that dagda1 posted earlier in the comments, most of the OSS alternatives were available before the MS alternative. 

      not only is this a huge waste of efforts, but in almost all cases the resulting MS alternative doesn’t match up at all to what had been available in the preceding OSS alternative thus leading to plenty of waste downstream as well.

      • Steve Sheldon

        I think Nuget was built by Microsoft solely to bundle things like jQuery with Visual Studio and allow that library to be updated independently of the Visual Studio release cycle.

        The question is can it properly evolve from where it’s at to where it would be useful for other types of tasks?  So far, there’s been some support for that in newer releases.

        But at what point does Microsoft get bored and move on?

  • Steve Sheldon

    Damn, I wished I followed twitter to know what you stepped in.

    About six months back I had a coworker come up to me and accuse me of being anti-Microsoft.  This was a first for me, as I have a reputation to maintain as a Microsoft shill dating back to 1997 on sites like slashdot .org and activewin.com.  Apparently I was anti-microsoft because I thought Code Contracts was of questionable value to our project.  I might have also questioned the utility of Pex and Moles.

    I’ve found the most interesting solutions are the ones which make my life simpler, not more complex.   Sometimes those solutions aren’t obvious until I learn more about the solution, and that’s always the risk… that I’ll pan something before I really understand.

  • Adam D

    @steve Sheldon

    openwrap should have replaced nuproj/nu. This is the perfect example of MS saying fuck you to OSS.

    • Steve Sheldon

      openwrap has several disadvantages for adoption.  Lack of documentation, heck even a nice description on the website explaining what it does would help.  The lack of UI is probably the main one… while I’m comfortable with the command line, most MS devs are not.

      Perhaps it’s the command line that differentiates things?

  • http://twitter.com/ntcoding Nick

    I know you don’t care, but I stopped following you on twitter because you were just too negative….not because you criticisded MS tools.

  • http://jfromaniello.blogspot.com José Romaniello

    David, well put… It is exactly what I think.