If there’s one thing I’ve learned over the years, is that people are lazy and good at rationalizing. Why exercise, if a single chocolate will make you fat again? Why oppose a corrupt government, if they’ll just be replaced by someone worse? Why learn something new, if it’ll be obsolete in six months?
On yet another example, James Turner has written an article on O’Reilly’s OnLamp.com titled The Virtues of Monoculture, in which he promotes the beauty of having choices absolutely taken out of your hands.
I spent last week learning in order C#, .NET and VSTO (that’s Visual Studio Toolkit for Office, if you’re not familiar with Microsoft’s alphabet soup.)
[...]
Should I use iBatis or Hibernate? XFire or AXIS? Perl, PHP or Ruby? Debian, Fedora, Ubuntu or Suse? Make the wrong decision, and you can waste a ton of time, as we found out on a recent project when we wasted a week try to make AXIS2 work for a web service project, only to find out that XFire was the right choice.
For the Microsoft Guy, no such confusion. You use ADO.NET, ASP.NET, C# and Windows. They all work, they’re all well documented from the perspective of a developer’s needs, with nary a disparaging ‘go look at the source’ blow-off.
[...]
Microsoft offers the certainty of no choices.
Before I’m singled out as some kind of anti-Microsoft freak, let me say this: I’ve worked for five years on the Microsoft .Net platform, and it’s not until recently that I’ve started dedicating an equal amount of time to open source alternatives. I think C# is a better language than Java, and that the single advantage Java has is the significantly large number of available libraries (an advantage it’s losing daily). I have a lot of respect for the work Anders Hejlsberg did on C#, and how he took the best features of both Delphi and Java and melded them into a coherent language. I’ve spent quite a few days recently figuring out the way OS X is still Unix underneath, but behaves slightly but annoyingly differently when debugging php pages or getting Redland to build.
But the fact remains: Turner’s argument is absolute bull.
Mr. Turner makes his everything works because there are no choices leap of logic on a whole week of learning a large set of technologies. How much depth could he have achieved in that time? Not a lot, I’m sure, having been there myself. Otherwise he would have learned what any experienced programmer already knows: most things don’t just work, and the .Net platform is no exception. When you’re coding at the Hello World level, every platform works beautifully - and if it doesn’t, flee immediately for the hills. The lack of choice saves you only some Googling time, and once you’re married to the platform you’ll start uncovering some of its ugly bugs (like we learned on a very large project).
The Microsoft Way does have an advantage, but it doesn’t come by means of platform tyranny: it’s the fact that it has a group dedicated to supporting developers. Most Open Source projects can’t afford to have a full support team, so you’re left with only the community - and left on their own, people sometimes act like complete asses. If anything, what the Open Source community needs to learn is that it’s not enough that your way might be better, or smarter, or faster. If you want people to adopt your software you have to support them. Pure and simple.
His conclusion is that Open Source needs less choices. We need to start some winnowing, also known as “people need to surrender their project and work for the common good”. But which people, James? Should the Ruby on Rails group have given their idea up in order to make PHP better? Should Guido van Rossum have worked on the Perl codebase instead of doing Python?
The reason why we have to encourage new projects, or at the very least be happy they spring up all over the place, is precisely because it gives us the Ruby on Rails, the Pythons, the Nutches, that our own myopic view might have not thought of because we were oh-so-happy with our first .Net week.