Windows, or Linux?
If it were just me, things would be very clear-cut. But unfortunately, our local technical team is only one of the many voices. And there's a loud voice in Colorado which says .NET Framework!
We are working on a "global integration platform" and as such, all of the affiliates have to be on the same page. Expectedly, each affiliate company in each country has its own core skill set (and agenda). For us here in the Philippines, that skill set is Linux, Perl, Apache, PHP, MySQL. A typical technology choice hereabouts. And we've done admirably with it.
The trouble is, globally the choices have been narrowed down to Linux (or generic UNIX) with Java, or Windows with .NET Framework. And the people I work with are pretty green at both these technologies.
Many's the time I regretted investing so much of my time in Perl. Perl's a great language. It's also a horrifically obscure language. Heck you can even write Perl programs in Latin. And the fellow responsible for this programming atrocity is widely considered to be the best Perl hacker in the world!
Anyhow, our entire software platform is currently implemented in Perl. And it's great. But it's not highly maintainable. And Perl developers are so hard to get ahold of, in a year we've only added a couple of them.
Perl suffers from too much choice. If you can program in Latin and wreak havoc with the language syntax, then you have too much choice. This choice precludes the existence of such civilities as automatic refactoring, syntax completion, halfway-decent code folding, an IDE for heaven's sake.. actually Eclipse has a syntax completion plugin for Perl. And halfway-decent code folding. And I've actually used it. But the experience is still decidedly second-rate, compared to say Visual Studio .NET 2003, which is the last version I used.
Anyway, the end result is that we are faced with two choices, neither of which is particularly appetizing: go with Java on Linux, or C# and .NET Framework on Windows. Sadly, we've missed the "develop on Windows, deploy on Linux with Mono" bus -- .NET 2.0 support in Mono is not yet mature, and going with a Microsoft solution entails going whole-hog in order to wring maximum performance from the technology. And whole-hog means it probably won't work on Mono.
Actually Mono is great. I use Mono for production (although only stubs to get my Perl mutant code to act nice toward Microsoft implementations). But I digress..
If you do not have deep expertise in either Java or .NET Framework, then either is a legitimate technology choice. Each has advantages and disadvantages. But they are equivalent, religious ranting aside. So what's not to like?
- Java has a large ecosystem
- Java is culturally similar to the open source community, and Java itself will soon be open source (hurrah!)
- the telecoms industry is standardizing on Java (don't get me started on Erlang.. but it's safe to say they won't be using .NET for quite some time)
- the available IDE's can't match Visual Studio (but Eclipse is half-decent, and you can't argue with free-as-in-beer, the free-as-in-freedom is gravy)
- it can be clunky
- arguably .NET Framework performs better on the same hardware
So for us, the choice between Java/Linux and .NET Framework/Windows is not a black-and-white one. It's not an easy choice either. Economically, the Linux solution really stands out (free OS! free IDE! free database!) but we have to consider that people halfway around the world are more comfortable with .NET, have deployed huge applications with .NET, while we have precious little Java expertise. And we have to work with them.