Okay, I need to come out and admit something. I'm a rebellious youth. Yes, I admit it. And I'm currently in the process of rebelling against my parent, Microsoft.
I'm jealous of all my development friends. They've dealt with a lot of non-Microsoft technologies in their history as a techno-geek and they can justify exactly what they like about <insert Microsoft technology here>. Well, I'm not one of these people. Believe it or not, I'm a very young techno-weenie. The first language that I did serious development with was actually C#. My whole development life has been .NET basically (some classic ASP and SQL, too, but still Microsoft technologies nonetheless).
Lately I've been branching out and discovering other technologies like Python, Ruby on Rails, etc. And what have I found? I've found that I'm becoming more passionate for these non-Microsoft technologies than I am for .NET. Lately, I have been really digging into Ruby on Rails, for example. It may be just me, but I personally think that other communities (let's say the Java community, for instance) is more “open”. I guess the best way for me to express what I mean is this. If you find a really cool technology for .NET, the odds are that you will have to fork over some money to use it. On the other side, I have found that there are a ton of really cool technologies in other technologies that tend to be open. Granted, the .NET community is a young community and is still growing, but I have simply been falling in love with stuff I'm finding in other communities.
I understand that some of this is due to the “the grass is always green on the other side” syndrome. But I think some it is based on fact. For example, two technologies that I have come across lately: Ruby Gems, and Ivy. Why do we not have the equivalent of Ruby Gems in the .NET world? It isn't because of time, considering how young and fresh the Ruby community is. I really like the fact that if I want to install Ruby on Rails, all I have to do is execute the statement “gem install rails”. How cool is that? It will even install all the dependencies for me. Let's say that I wanted to install NAnt, how could would it be if I could just execute “opal install NAnt”? As for Ivy, why is there a severe lack of dependency management packages for .NET? Cruise Control and Draco don't handle dependencies (directly at least). I haven't found a suitable package to handle dependencies as a plug-in to NAnt (like Ivy is for Ant), either.
So, why is this? I really don't know. A really good friend of mine has a thought on this though. Let's not kid ourselves, Microsoft does quite a bit of innovating. While this is generally “A Good Thing”, what is the effect on the community? For example, NAnt was a great technology that emerged (albeit based on a technology already established in the Java world). How does Microsoft react (at least partially, I understand there are different reasons)? MSBuild. Granted, MSBuild and NAnt can exist happily together. But it's no secret that if a great technology exists, Microsoft likes to integrate it into their platform. Another example, refactoring support in the IDE. With this trend developing, how many community members feel that they don't need to innovate because Microsoft will do it anyways?
Perhaps the problem is that Microsoft provides both the technology framework and the majority of tools used. Similar to everything else about the OS, when everything is directly integrated, where does that leave 3rd parties? Well, while it may not take them out of the equation, it certainly makes the road to success/adoption a lot steeper than it could be otherwise. And I don't buy the argument that this is just the case because Visual Studio is just a superior IDE. In my opinion, look back at the Java world. One of the best IDEs in the Java world is IntelliJ. And, although it may seem blasphemous, I personally believe that IntelliJ is a superior IDE when compared to Visual Studio. There are exceptions to the rule, but by far it seems that the Microsoft community is much more aligned with Capitalism, and Java/Ruby/Python is, well, not. Both approaches have there place. After all, we do live in a capitalist country, so you have to make money somehow.
Well, this turned out to be a bit more long-winded that I hope. Just be aware, I'm not turning my back on Microsoft technologies. I feel that getting all this experience outside of the Microsoft world will only make me into a better .NET developer/evangelist. So, back on the long road I embark, out into my darkness, rebelling against my development birth parent, Microsoft. Hopefully, I'll see you around (don't worry, I still won't stop blogging or anything like that; although it does bring into question my game development articles).
All of you who have more experience in this world than me, the techno-virgin, what are your opinions/thoughts/conclusions that you have arrived at in your journeys?