Over recent times I’ve noticed a handful of people writing blog posts about why they are leaving .NET and the Microsoft platform to move to Ruby on Rails, Python or something other technology.  The reasons vary from person to person but the general, recurring memes seem to encompass the following:

1. Microsoft stifles innovation
2. Almost all .NET developers are below average in skill
3. Microsoft means Closed Source.  Other choices mean Open Source.
4. Newer technologies are superior to .NET
5. Visual Studio is bloatware and static typing sucks. Dynamic languages and Vim FTW!
6. Corporate development is evil and .NET means Corporate
7. Only in the open source world do people truly understand proper software engineering practices

I’m not going to argue the points since these are peoples personal perspectives and the people who have them are more than entitled to them. However, I also think there are some other unmentioned reasons that people might leave .NET that could be described as one or all of the following:

1. The new languages offer new frontiers to be explored.  They like the romance and adventure and opportunity that this offers.
2. Communities in these new languages are pushing themselves to do better and as a result have some great, innovative and creative people in them.  They want to be involved in what these people are doing.
3. They love learning and a new language offers many new learning opportunities.
4. Many startups are using the new languages and they prefer to work in the startup culture.
5. Because the new languages are still new, the average developer hasn’t yet heard about them.  The ratio of poor developers to competent developers is good.  It feels more like an elite club.
6. Switching because it seems to be the cool thing to do. To quote Troy Hunt who I was talking to about this “It’s like all sorts of other social trends where there’s an attraction to being in a minority group”.  In other words: “If all those other people are switching then so should I.  I might be missing out on something!”

What bothers me is not that people are switching since it’s their choice and well done for having the courage to change, but that these various exodus posts carry a sense that language and platform choice has to be an all or nothing decision.  Ah, the tyranny of OR. The idea that you can’t have two seemingly contradictory ideas in place at the same time.  Jim Collins wrote about it in Good to Great and talked about it in this interview:

“they get caught up in what we call "The Tyranny of the Or," the belief that you cannot live with two seemingly contradictory ideas at the same time, that you can have change or stability, you can be conservative or bold, you can have low costs or high quality -- but never both. Our visionary companies all operate in what we call "The Genius of the And," the ferocious insistence that they can and must have both at once.”

What happened to taking what you know AND adding more knowledge and skills to it?  Are we so limited that we lack the ability to keep knowledge of multiple platforms and technologies in our head at the same time.  Do we not know how to evaluate options and pick the right tool for the task at hand? Can we not change the community around us and improve it when we think there are problems?

Why should it be .NET -or- a community that pushes boundaries? 
Why should it be .NET -or- Mac/Linux development?
Why should it be .NET -or- Open Source development?
Why should it be .NET -or- A lightweight IDE?
Why should it be .NET -or- Dynamic language development?
Why should it be .NET -or- Learning new things?
Why should it be .NET -or- Code Crafstmanship?
Why should it be .NET -or- skilled coders?
Why should it be .NET -or- a startup/dotcom style company?

Don’t make it a choice of this OR that, make it a case of this AND that AND that other thing AND oh, a bit of that over there.

If you want to switch, go for it, it’s your decision, just don’t be ruled by the Tyranny of OR.  Try to embrace the Genius of AND.