Monday, March 28, 2011

Monoglot Developers are like Stereotypical Arrogant Americans

This post is partly because of some responses to a blog post over at Expensify and I apologize if it appears to be a bit of a troll. I saw the heated responses from ticked off .net fan boys and stopped to think for a minute. Why don't I use windows for development any more?

Just so everyone understands, historically I've used windows since around 1992 and Linux from about 1994 onward. For MANY years I tinkered with linux as a hobby, but did the majority of my work on windows, mainframes, mini's, or "real" unix. I made my living writing Delphi and VB desktop software for quite some time, I'm a certified MSSQL DBA, and I still use MS Office and Outlook on a daily basis. I also have a copy of visual studio and tinker around with it on occasion. But since about 2006, I've used Ubuntu Linux with GDM as my full-time desktop and my development efforts have always been much broader than simply the Microsoft ecosystem.

Why is this? Well, I guess I know there's a larger world than the windows desktop. For example, I have 6 computers, 3 TVs, two satellite receivers, 4 phones, a nook, a Yamaha motif keyboard, some gaming systems (PS3, WII), and some Linksys (Cisco) wireless routers... and NONE of them run windows. All of the them either natively run on a variation of Linux kernel or I can load a Linux variant on them to reconfigure them in a manner that suits my need. As a specific example, I've loaded dd-wrt on my router to change it into a secure bridge to extend the range of my wireless network.

If I focused on being the best visual studio developer in the world (C#,F#, VB.NET/etc), I suspect I would be inclined to never tap into this wider world of technology. I supposed if I were really adventurous I could attempt to load windows on my Linksys router, but I'm frankly the legal ramifications could be significant as Microsoft doesn't seem to like you using their stuff unless you pay them for the privilege.

As another example, Let's suppose I'm doing some cross platform mobile development. Right now that means at least iPhone + Android + Blackberry. As a guy who's been knee deep in Java, I can immediately use two of these platforms... as a javascript+html guy I can target all three... as a ruby guy I can target all three AND be cross platform. In addition, as a Linux guy I can get cheaper rates on amazon EC2 instances AND easily create secure scripts to deploy/undeploy and reconfigure them on demand.

Using Microsoft tools, I admit that I can still get this done, but now I'm paying everybody and their brother for licenses (monotouch, monodroid). Don't get me wrong, I'm willing to pay for good tools (intellij for example), but using Linux/OSS software, I don't HAVE to because I can get 50 different variations of eclipse for free... or just use emacs or vi.

Additionally, because the Linux/FOSS ecosystem is so diverse, I get to choose between a wide variety of solutions for any particular problem I'm trying to address. In the windows world, you typically only get core OS updates from ONE vendor and you have to wait for them for fixes. Even if you're willing to fix the problem for free and donate the solution back to them you are typically restricted from doing this (Unless you pay them a bunch of money). Put in this perspective, why would ANYONE ever want to put themselves in this situation?

The only reason that comes to mind is ... Marketing.

Microsoft (like IBM, Oracle, and others) has spent a tremendous amount of time/energy convincing anyone who'll listen that using their tools is the smartest, easiest, most economical way to go. This means and individual developer doesn't need to worry about those problems and they will continue to be in demand as long as the vendor is still in business.

As a lisp developer, you may be able to to build the most awesome hyper-scalable, flexible, and reliable solution in the known universe, but you're going to spend a large majority of your time convincing other people that they aren't making a mistake. If you're a C# developer, you don't need to convince anyone of anything... you can point to dozens, if not hundreds of reports, white papers, and power point presentations explaining why using C# is the BEST way to create a hyper-scalable, flexible, and reliable solution in the known universe. Better yet, these reports are vetted by professionals employed by a multi-billion dollar software company.

From another perspective, I feel as though developers who ONLY use Microsoft tools are similar to what folks around the world call "Arrogant Americans". This is the type of person who lives in Peru for a year and NEVER learns any Spanish, or visits France and always orders Cheeseburgers (or only eats at McDonalds). People who use Linux are more akin to world travelers, after living in Peru for a year, they speak fluent Spanish (because they already knew it) as well as a bit of Quechua. In France, they hit a different bistro every day and can identify which region the Camembert they had at lunch came from.

My aspiration is to be the technological equivalent of the world traveler and while I know a lot of smart developers who use Microsoft tools, I know a lot more smart developers who use a wide variety of tools. The folks I don't understand are the ones who think they've found the one tool that should be used for every job and spend time telling everyone else they're using the wrong when they don't use that particular tool.

1 comment:

Anonymous said...

Whilst I could switch linux and windows, replace journals and whitepapers with forums and newsgroups, You raise a valid point somewhat misdirected. But you already said you were trolling.