A couple weeks ago I bought Pro WF: Windows Workflow in .NET 3.0, as an eBook of course. I'm in chapter two, and something the author said made me stop and think.
"The term framework implies order, structure, and control. It represents much more than just a collection of classes. It provides a defined structure that you use when building applications. It requires that you follow a prescribed set of rules when using portions of the class library. But in return, the framework handles many routine tasks and allows you to concentrate on implementation of your business logic." – Bruce Bukovics, Pro WF: Windows Workflow in .NET 3.0, Page 33
This seems to me to be an awesome description of a framework, and is what I love about the .NET framework. It provides a platform and defined structure on which to build applications, and handles many routine tasks for me. I think I love frameworks. But I also recall a funny article by Benji Smith about frameworks and over-factorization. You really must read it. Go ahead, I'll wait.
It now seems I have two conflicting points of view. I myself have fallen victim to over-factorization, yet I would rather not build everything from scratch. But on deeper inspection, these ideas are not really conflicting; I think both authors make a valid point. And I think the .NET framework exemplifies both their points.
In the course of my career in technology, I have come in contact with many technologies: Java, ColdFusion, Perl, C++, Delphi, PHP, and of course .NET to name a few. Java for one is wrought with frameworks; Spring, Struts, JSF, RIFE, Seam, Spring MVC, Spring Web Flow, Stripes, Struts Action 1, Tapestry, Trails, WebWork, and Wicket for starters. Angusman Chakraboty said it well in his article Java Framework to Create Java Frameworks, "Too many Java programmer(s) want to create (their) own framework." He goes on to recommend a universal Java framework framework, which "should take at least a week to learn. It is advisable to have a steep learning curve with obtuse documentation. Anyone who finally masters it will be too tired and too horrified to ever venture into any other Java frameworks."
"On the other hand, the .NET Framework, and ASP.NET in particular, offer many advanced security features [built in] that go above and beyond such simple tasks as authentication and authorization."
To be fair, .NET has some frameworks as well. There is the ASP.NET Ajax framework, which was so widely accepted that it is now incorporated into the next version of the ASP.NET framework. But I think that Microsoft has gone way beyond Java by baking in many features and functionality, as well as integrating tedious tasks in into the framework, stuff that Java developers have to roll their own frameworks to accomplish.
I don't think any of us want to be writing raw code in C++ or FORTRAN or Assembly. But if you are creating yet another framework to build web applications (Struts, Tapestry, Spring MVC), something might need to be re-examined. Like why you're not using the ASP.NET framework with (most of) this built in.
I also understand that there may still be a place for Java; like a company with a heavy investment in non-Microsoft platforms (although NASDAQ is switching their legacy systems over to Windows and .NET), or a company with a lot of existing Java applications (though Random House, one of the world's largest publishers, converted their CodeNotes.com website from Java to ASP.NET). Java also has the advantage, for now, of multi-platform distributions (Mono isn't official, but the Micro-Framework on the Mac is a good start).
Despite this, for new product development there is no reason not to take a good, long, hard look at the .NET framework. I think you'll be surprised at the ease of use, the simplicity, the performance, and the power. I feel that .NET 1.1/2.0 finally brought Microsoft into the realm of enterprise frameworks, and with the advent of Workflow Foundation and Windows Communication Foundation (SOA) and .NET 3.0, it looks like it will be investing in this arena for quite some time.