Recently, one of my friends asked me why I was a "Microsoft" coder instead of joining the open-source camps.  I think that’s a great question, but it’s really two questions: how did I end up as a "Microsoft" coder, and (the more interesting question) why have I chosen to remain a "Microsoft" coder when there are so many cool buzzwords popping up?  I may get in to the former question some day, but for today, I thought I’d run through the top 5 reasons why I am, and will remain for the foreseeable future, 100% entrenched in the Microsoft .NET world of development.

1. I am very, very productive with .NET.

I love writing code, but I don’t enjoy writing code for the sake of writing code.  I love writing code that does things.  I like solving problems.  And I like to do it as elegantly (and as quickly) as possible.  That’s probably the main reason that I have stayed firmly rooted in C#: I can solve most any problem quickly without changing languages or platforms.  I know the language very well, and I’ve run into very few cases where I felt like it was impeding me from solving a problem.  I’m not going to switch just for the sake of switching.  Yes, I’ll continue to test out the waters of new platforms, languages, tools, etc, but I’m only going to switch to something that makes me more productive.  So far, I haven’t found anything that meets that requirement.

2. What other platform is this diverse?

Let’s look at what I can do with .NET (starting from the bottom up): I can write scripts.  I can create console applications.  I can create rich client applications. I can create thin web applications.  I can create rich interactive web applications.  I can create games.  I can create web services.  I can create enterprise services.  I can create embedded database modules.  I can write add-ins for many popular products.  While it is true that you can do some of these things with other platforms, nothing that I’ve seen is anywhere near as well-supported across such a wide range of areas as is .NET. 

3. We have the best tools, period.

We have some amazing tools available to us in the .NET world, both free and fee.  On the free side, we have things like the Express Editions, SharpDevelop, NUnit, and TestDriven.NET.  On the pay side, we have the Pro+ versions of Visual Studio, Resharper, dotTrace, and oh so much more.  It’s easy (and fun!) to write code when you have the best tools at your disposal. 

4. We have great APIs.

Out of the box, .NET has a wonderfully clean API.  Sure, there are some things that aren’t perfect, but it’s head-and-shoulders over the mess that is PHP or the muck that is Java.  On top of that, we have some great add-on APIs that make life even easier: Castle Project, NHibernate (to be fair, we stole this from Java), log4net (ditto), Moq, ASP.NET MVC… I could name things off all day long, and I still couldn’t cover them all.  There is a very active .NET developer community with a lot of very smart, talented people contributing both code and wisdom to our collective knowledge base.

5. .NET continues to improve and evolve.

Microsoft keeps pushing forward to make the .NET platform even better.  We’re getting major revisions to the framework about every two years, and we’re getting interim releases with new functionality constantly.  They’re paying attention to what others are doing that works (functional programming, for example), and they’re bringing it into the framework.  I don’t need to go somewhere else for the Next Big Thing, because Microsoft is going to bring it to me.

So, that’s my top 5 list.  Take it for what it is (a .NET developer’s reasoning for staying in the .NET world), but I don’t consider myself to be one of those people that gets entrenched in one language/platform and can never move on.  I actually enjoy learning new things, so I’m probably slightly biased towards moving on to the Next Big Thing.  The fact that I’ve been a .NET developer for six years now is a testament to just how compelling a platform Microsoft has made.