Java became pretty prevelant in the mid-90’s and went uncontested for several years. What I mean is, the technology was a leap forward (unmanaged code, compiled to IL, running on a JVM) and there was virtually no competition. So Java did gain some momentum. In fact, I would go as far as to say that had the upper hand over Microsoft, because at the time – the Microsoft development platforms were all disjointed and a mess.
So Java was free to succeed, uncontested, and take over the world from say, 1995 to 2001 (and beyond) – but it didn’t!! Why?
In 2001, .NET 1.0 came out – and .NET is basically the same thing (unmanaged code, compiled to IL, runs via the CLR) – and it took off. Since 2005 and .NET 2.0, .NET has had nothing short of a meteoric rise – but why? Java had arguably a 10-YEAR headstart!!
To me, the issue with Java vs. .NET comes down to a philosophical choice – most people believe in either one or the other:
- You beleive that everything should be open and be able to run on anything, regardless of the price you pay in other ways, and any one proprietary vendor is bad.
- You beleive that everything should be open and be able to run on anything, but aren’t willing to pay, architecturally for that – and having one proprietary vendor has significant upside.
So the epiphany I had was this: Java (and the Unix mindset, in general) – of "don’t lock into one vendor, no matter what", is it’s ultimate undoing. Because there is an ENORMOUS fear of committment on the Java side, there is a severe price to pay. What I mean is, I’ve seen a pattern – I mean, to this day, this is still the same. Here’s how it plays out:
- The developer (or business, indirectly) needs some kind of functionality.
- Because there is not one vendor behind the technology, there is not a single answer. Instead, there are at least TWO competing vendors (or open source projects). Neither one of their products are perfect, and about 80% of what each product does, overlaps with the other.
- Java developers argue and discuss the merits of which "imperfect" product to bring in-house, then they try to lock-in and leverage it!
- There is a 50/50 chance that the choice was wrong. If it was wrong, then the vendor (or God-forbid open source project) starts losing support – and the dev team has to start the process over again.
I’ve seen this happen time and time and time again, for EVERYTHING related to Java, like:
- AJAX toolkit
- Which "server control" library to use (like Faces)
- A security framework
- A web service framework
- etc, etc
So, in the unacheivable quest to try to have: A) the perfect product that will be supported -AND- B) a product that runs on everything and C) a product that isn’t supported by one, monolithic/scary company – the Java people just waste and waste and waste so much time. Shouldn’t we spend our time doing software development – instead of constently trying to guess which vendor/open source project will be the right choice?
Why I find this significant, is that I’ve purposely, consciously pursued Microsoft technologies out of choice. I regularly evaluate where my career is going, and I choose to follow what I believe in! The day that Microsoft goes in a direction that I don’t want to go, I’ll pursue something I do like.
So compared to the Sisyphusian challenge that Java has faced for the past 14 years, the Microsoft approach is pretty astounding. There is that general rule that: "You can do a bunch of things, OK… or you can do one thing, GREAT!". And that’s what we’re looking at. Because there is not all this instability and lack of momentum, and because the .NET technology has support from a large company with tremendous momentum, they are able to accomplish almost exponentially more, as time goes on. In fact, already knowing this about Microsoft – I’m regularly just blown away at the exponentially cool things that come out of that company!
There is one way to do security in ASP.NET (the provider model); there is one way to do web services (WCF), etc, etc.. And I’m sure the argument is "but why, what if I have a better idea!?". Well, first of all – Microsoft has some pretty smart, motivated people – and secondly, even if you did TRULY have a better idea, you couldn’t implement it as well as the "pretty much perfect" idea that Microsoft did, so it’s moot.
And even the Microsoft "imperfect" solution is moot, because in 4 years – they will have evolved to something diffrent too, based on lessons learned and what technologes have changed by then. So, in the end, it almost doesn’t matter. If there is a "good", completely fleshed-out idea that is ready for production "right now", they why NOT use that? Why not invest your time in making software, insted of arguing which vendor to use – and in the end, having that vendor go out of business or merge with some other company!?
So to me, it’s very interesting how there are two, very similar technologies, that have very different philosophies behind them, and to see how successful each approach ends up being!