There’s an interesting discussion going on at Quora regarding the age old “Java/.NET/(Your Grandfathers Language) vs. Django/RoR” debate. Nate Fink posted an interesting take on things by the Posterous founders here. Here is my answer:
Having done enterprise development in Java, .NET and Python / Django for the past 10 years, including working directly for BEA, I feel I can contribute a little bit of a different perspective.
First, the whole “.net vs. java vs. python vs ruby” thing makes no sense. .NET is a platform & runtime that supports multiple languages. This include Python, Ruby, Boo and F#. That’s in addition to their standbys C# & VB.NET. The Java VM also supports multiple languages, not just Java. Scala is probably the most well known, but there are others.
BTW, C# is an incredible language and keeps adding more and more powerful & dynamic features. From LINQ to var keyword to lambdas, there’s some pretty great stuff. The 4.0 version even offers named arguments & dynamic member lookup ( similar to duck typing ).
Next, the whole IDE argument is a cute strawman, but it’s mostly crap left over from the VB 6.0 days. Are there WYSIWYG tools in them? Sure. However, that’s merely one slice that you’re under no obligation to use. It depends on you and your teams coding style. I’ve been on several teams, both in enterprises & startups, using Java or .NET and we never touched anything graphical unless we were building desktop apps.
As for code generation, I’m pretty sure Django & RoR both come with scaffolding generators. So what’s the difference between that and what and IDE could generate for you? One’s a CLI and one is GUI?
Thirdly, any developer who spends a half of day w/ anything from JetBrains ( either IntelliJ for Java or ReSharper/VS.NET for .NET ) will be blown away by the sheer navigation power of each. It makes TextMate (which I use for Django development ) look like a joke. They’re even releasing Python & Ruby IDEs. Don’t dismiss them because “real men don’t need IDEs”. That’s foolish. Being able to hover over a variable, class or property in your code, type one keystroke and get a nice, filtered list of all of the locations that you use it is a very good thing. That’s not even discussing all other features.
Lastly, Java sucks…..kidding. However, I think it’s good to separate the two ecosystems. Java was a lost child for a long time and collapsed under the weight of it’s directionless owners. It got very complex, very quickly as vendors ( including BEA ) sprung up to fill out the J2EE specs with their own value adds while Sun declared themselves the ‘anti-MS’ when it comes to platform control. Thus began the great arms race that killed all who entered. Now, Java is beginning to emerge ( Grails, Scala, etc.. ) but the damage has been done.
I know RoR / Django / etc… are the new ‘horn rimmed glasses’ of the platform world. However, don’t be quick to knock Java / .NET as ‘enterprisey’ There’s a lot that can be learned from each platform and the languages they support.
Frankly, for me the whole decision comes down to deployment platforms. If I didn’t have to push to Windows ( yes, I know Mono, et al but they’re far from ideal ) I would be using .NET/C#/etc… Since I can’t, for anything I have a say in, I pick Python/Django & Linux.