Hi everyone, long time no blog eh? Been out of town almost entirely, working on Indigo and InfoCard projects/book...and just “super” busy. But, although I should be working right now...I just read this article by Calvin Austin entitled “Is the C# Party Over?” http://jdj.sys-con.com/read/11774.htm
This really makes me want to think about what has happened with .NET through these past few years. What has it done for my clients? What has it done for me? Is the momentum still behind it?
Ok, but when I blog, I blog...and this is a long one...
The short answer is that I think Calvin is doing what most that are passionate about their respective platforms do: compare and contrast on what you have seen, and draw conclusions that are heavily slanted in your preferred platform’s direction. It’s normal, lots of people do it. I can let it go. But it is worth discussing…to make sure another perspective is heard. Jon Box, a fellow RD (www.microsoft.com/rd) commented here: http://jonbox.dotnetdevelopersjournal.com/c_is_the_party_over.htm
And, Dino Chiesa of Microsoft responded here: http://dotnet.sys-con.com/read/118121.htm
Now, here are my thoughts…more of a personal perspective…
First of all, let me state that although the majority of my experience is with Microsoft technologies, I did spend 4 solid years in a 100% J2EE environment while I spent “spare” time on the initial .NET release…and since .NET released those roles switched and moved back to my usual full time .NET efforts while working with J2EE (specifically Web services) in my “spare” time…and have made and happily kept many friends in the Java community as a result. I happen to have a lot of respect for both platforms…I think they both have their strengths and weaknesses, and frankly the choice between the two is often one of company investment in talent and existing code base, or simply put “your community preference”. Both are highly capable platforms for scalable server-side systems hosting Web applications and services. Ok, I’ll say it -> service-oriented systems.
Did we need Visual Studio and .NET?
From a personal perspective on the Microsoft front, I used to develop in VB 3.0…6.0, but I ended up using the Win32 API most of the time to do anything really useful, therefore C++, MFC, ATL ended up being where I spent more of my time. There were things about VB I appreciated, like development productivity and UI designers. But I liked the power and low-level control of C++, because I needed it. Moving to C# for me was like a merge of both into one happy package: productivity and power. But on top of it, I felt I acquired the elegance of the Java deployment model, which I had worked with for several years. Therefore, I had it all! I’m not comparing .NET to Java development environments, the latter of which I know have in the past years really come along with productivity-oriented development tools (WebLogic Workshop, Eclipse…) as well…I’m simply stating that I really appreciated what I got with C# and Visual Studio 2002/2003, and I’m sure others that have tried it probably felt the same. I have even had Java friends that moved to C#, and loved it! They couldn’t believe the productivity/power combination. But, to be fair, I have other Java friends that tried it and still prefer Java, and that’s ok too. Bottom line: We needed .NET (C# as my preference) and Visual Studio.
Are releases too frequent?
Of course my clients, for example, have to talk a lot about their goals, and if it makes sense to develop in 1.1 today, or 2.0 for tomorrow. As with most innovations, Visual Studio 2005 promises to make things even more productive with everything from designers and wizards to refactoring. .NET 2.0 has added many APIs, built-in functionality, low-level capabilities like generics (finally a better STL from my C++ days). Yes, Microsoft is releasing MORE. Yes, they have to, because it is still a relatively new development paradigm and there is much to do, plus there is a great base to build on now. In particular Microsoft had to address the productivity needs of the VB 6 developer, and add in modern productivity tools from SOA designers to refactoring. They are simply “must haves”.
In 3.5 years we have had 2 releases, with a third one on the way: Visual Studio 2005. It should be no surprise that Visual Studio 2002/.NET Framework 1.0 was followed with a release of Visual Studio 2003/.NET Framework 1.1, to fix some oversights of the initial release. Realize that Visual Studio and the .NET Framework represent major innovations to Microsoft’s previous technologies. It was years in the making, but you would expect a major paradigm shift to come with demands from the community, particularly in the beginning. With 1.0 we had the merge of productive development tools for Windows, Web, Mobile and even database level development and debugging simplified some of the common pains of VB, C++ and ASP developers previously. C# gave C++ developers an elegant new object-oriented language with a common API layer that would be shared with other languages, and a new deployment model that enabled XCOPY deployment and a secure runtime among many other features. C++ developers could migrate their code, work in a more productive UI design environment, and share in the same deployment model. ASP developers could actually debug, and design code that isn’t spaghetti, not to mention richer UI in a fraction of the time. VB developers were offered the power they didn’t have before so that may account for some of the lag in adoption…because Visual Studio 2005 will finally provide the level of Wizard that VB developers were lacking by comparison to the simplicity of VB6.
To compare, there have been 6 releases of the Java specification in 9 or 10 years. The Java open source community has interim releases too, including nightly builds. They do this to provide bug fixes immediately and enhancements that will ultimately lead to a next release. So, you can’t really say Microsoft releases any major update to software faster than the Java community. And, you can’t really say that both sides don’t complain about the change, or issues with compatibility (which I think are frankly easier to manage in .NET because of side-by-side deployment). There was a 1 year lag before 1.1 followed 1.0 with fixes. And now it has been a few years since and 2.0 hasn’t even released yet. I think it just SEEMS like more because in the past few years Microsoft has been more open than ever about their future releases, very very early on.
Bottom line: 2.0 is an appropriate release but we need to be careful not to give the impression that new tools means “migrate everything”. That costs businesses money. You don’t “just migrate”. You decide what is best for your business. 1.1 is a perfectly stable environment to continue working on. I would agree, however, that there is pressure from developers when a new release comes out, to push the company forward, and the productivity gains of moving forward will actually evaluate to the bottom line as well.
Should your business migrate to 2.0?
It is not bad that we have a major release with 2005. But, it means you have to make choices as a business. If you are starting a new project today, do it with 2.0 in my opinion. If you have an application built on 1.1, you need to think a little harder about your goals as a business. Is it worth it to migrate the system or application? Can the business benefit from taking advantage of deployment and security features of ClickOnce? Can you reduce ASP.NET application maintenance overhead with master pages and other new controls and features? This is all up for discussion…but if you want to stay with 1.1, because of costs to the business…that is also an option. Just like there are many Java applications that have stayed with earlier versions for stability and cost containment.
Is deployment platform really an issue anymore?
Calvin made a comment on .NET limiting your choice of deployment platform. I say “who cares?”. Seriously, this is an obvious statement. We have know from day 1 that Microsoft = Windows. Who cares anymore? We live in a service-oriented time. Many applications, many platforms, many departments, many vendors, many industries are integrating. Large corporations have Unix, Linux, Windows and other systems spread across departments. What they need are ways to communicate with distributed applications. Interoperability with Web services is one way, but there are many many ways to interoperate or expose functionality across platform besides that. We need people to think about the best tool for the best job, and deploy accordingly. If you require only UNIX or Linux boxes…I guess Microsoft will lose that account…but I would ask the question: why does it have to be UNIX or Linux, before making a final decision. And if that’s the way the cookie crumbles…ok then…there are always these choices.
I’m bordering on rambling now, and I really should be writing my book, so suffice it to say I think that Calvin was inaccurate, and a little slanted. I would hate to see people read that without another perspective, and from this blog entry, you can read three other perspectives: from Jon, Dino and me.
Back to Indigo…a “future” release of Microsoft technology that will once again improve our existence J