Anything you can do, I can do better. Thursday, May 08 2008
"My response is always: .NET is immature, very proprietary, and lacks community."
True. .NET has only been around in release version for about a year now, only exists in its full form (ADO.NET, ASP.NET, etc) for Windows, and doesn't have the community process of new features exactly like Java does.
"Nobody knows how it scales, or how it performs."
True in one sense, very untrue in another. First off, there aren't any real published benchmarks saying "you can do [x] in [y] amount of milliseconds." There are, however, a huge number of performance benchmarks posted to MSDN and GotDotNet you can look through. Secondly, anyone who has actually used .NET, created applications (even minor ones) can easily run their own benchmarking and find that .NET code (even when interoperating with existing COM code) is incredibly fast. However, this method is unfortunately not very good for managers of IT departments, as it means they would have to spend this time themselves rather than reading a pointedly one-sided white paper and benchmarks.
"I see .NET mostly as a way of touting Web services development over everything else. A Web service sits on top of existing components and applications so as to expose their functionality as a coherent higher-level service. "
That is pure marketing garbage. Anyone who has really looked into .NET knows that webservices are such a minor part in the grand scheme of things. Microsoft is pushing the webservice point simply because in order to really break into an environment where in order to look good you have to push something that nobody else is pushing: XML web services. Download the free .NET runtime and compilers. Build a couple simple applications. You'll see that the benefits in .NET are NOT web services, but are actually the greatly improved data access techniques, threading support, multi-language support, object orientation for all languages, the improved ASP.NET programming model, remoting capabilities, and so on. Web services are a nice addition to the list, however are definitely not a major player in the whole view of what .NET is.
"Microsoft's strategy seems to be revolving around developing Web services, but what about developing the actual base components and applications that provide the real business function? How stable are the components and applications in the .NET environment? Nobody knows."
Again, pure garbage here. Anyone who has had any experience with .NET knows the answer. Anyone who has no experience would say something like this. I would like to point out however, that the job of an evangelist is to say how good your stuff is while saying how bad the other guy's stuff is. This is exactly that: finding a hole in the other guy's stuff (the lack of benchmarking) and claiming it makes it bad in some way.
"Another huge difference between these two platforms is that .NET is still a closed platform, even after the much-publicized standardization of .NET technologies, namely C# and CLI (Common Language Infrastructure) by ECMA. C# is Microsoft's Java technology-like language, whereas CLI is a subset of .NET Framework consisting of base class libraries."
True, .NET is closed. Nobody has the source code for it, however anybody can write a runtime for it. Wait, isn't that like Java? Anyway, C# and the CLI are published standards and are enabling Ximian and a number of others to write their own runtimes to enable .NET development on non-Windows platforms. In fact, Ximian has a good portion of the runtime finished, including a lot of ASP.NET support and a good deal of ADO.NET support. Microsoft has even written the SSCLI, enabling people to run .NET applications on BSD boxes, however with a pretty restrictive liscense ("You may not use this for anything other than learning"). One other thing, the CLI (Common Language Infrastructure) does not just consist of a few base class libraries. It contains the CTS (Common Type System) which includes how every type, object, method, field, etc breathe and live, as well as the base class libraries.
"Also, there is no process in place through which the rest of the community can give their input to .NET technologies (apart from C# and CLR). This is unlike the Java Community ProcessSM (JCPSM), a forum in which all interested parties participate to shape the future of Java technology-based platforms. Because of this, .NET is confined to Microsoft's vision of what the world should look like. "
I really don't see this as a problem. A good deal of the MS staff lurk on a number of mailing lists (DevelopMentor DOTNET-WEB, CX, CLR and the aspng lists) and respond to complaints, suggestions and concerns. Aside from that, ASP has always been a Microsoft-only thing. Microsoft created a great web programming environment when they released ASP, and ASP.NET is a much-needed step up from ASP. At the time ASP was released, JSP didn't even exist. You were pretty much stuck with CGI or nothing. The rest of the world advanced in the web programming arena while ASP stayed behind, and now Microsoft has advanced at least to the level of other environments and in many areas greatly exceeded them (specifically the designer stupport for custom web controls). As of right now, the whole .NET platform is incredibly well thought out, feature-rich, and pretty powerful overall. Everything I want to do I can, and I can be sure that everything I want to do I will be able to do very soon. Microsoft is almost ready to release another version (Spring 2003?). Put hundreds of companies on top of that disputing whether or not to add method 'y' to class 'z' and I'd much rather keep it like it is.
"Another issue with .NET is the learning curve required. .NET is not about COM/COM+. COM/COM+ in .NET has been replaced with Serviced Components, a middle-tier component packaging model that is basically a DLL (dynamic link library) packaged within an entity known as Assembly. Thus, Microsoft Windows DNA (Distributed Network Applications) developers now have to learn this completely different component model, apart from CLR (Common Language Runtime) and .NET Framework SDK."
Okay I'm sorry, but in an article that is supposed to "clear up the FUD", this statement is pure FUD. There is very little different with application architecture between COM+ code and .NET code. VB6 had very little to do with COM in the first place. C++ developers could use object pooling, JIT activation and every other feature possible in MTS/COM+. Now, what does .NET have? A complete separate set of classes to use to deal with COM+ Enterprise Services? Nope. The System.EnterpriseServices namespace is nothing but an entry point into telling your class how to interact with COM+. Is this a completely different model? Nope. Is the DNA way of developing applications dead? Not at all. Everything in DNA still applies to .NET. The System.EnterpriseServices classes only provide a place for developers to get to the attributes and classes necessary to use COM+. In fact, most of the COM+ work is much easier in .NET, as you simply apply attributes to your classes and the runtime does the rest of the work for you (such as registering the assembly in COM+).
"Again, .NET does not support Visual Basic; instead, it supports a completely re-engineered (to support object-oriented concepts) version of this language--VB .NET--which is definitely not a logical next step for VB developers as far as learning is concerned. I am sure COM/COM+/VB developers must be feeling a bit abandoned with .NET."
I'm a professional VB6/ASP developer (or at least I was). I hated Visual Basic. Let me rephrase that. When I first started with VB6/ASP I loved it. It was simple, you could create applications that performed decently in a very small amount of time. After a couple of years of doing this, I yearned for something better. I tried JSP for a small amount of time, but found the development tools and the whole process of Java annoying. Then .NET gets released and I immediately switched to C#. Why? Because Visual Basic is antiquated. Its syntax is crap (and has always been crap), however other languages weren't much better. Java has great syntax, but again I do not like Java as a whole. C# gets its specifications released and I immediately started learning the syntax. By the time Beta1 was released, I knew the majority of the syntax. It was clean, simple, and improved upon the Java syntax. Is it a Java clone? I don't care. The language is cleaner, the environment better (also don't forget that Java had the goal of taking the syntax of C++ and making it better, same as C#). So do I feel abandoned? Nope. Why not? Because Visual Basic is crap. Don't forget to mention that a good deal of the people writing VB applications are people who shouldn't be writing applications in the first place. It's like having someone who is not a doctor but who reads a lot of medical journals diagnose you. They didn't have the training necessary to do what they are doing, yet they could still technically do it.
"If you compare .NET to J2EE, you'll notice that J2EE is a much more mature, heavily deployed, and time-tested platform. A huge community is behind its success. It has a well-defined component model with Enterprise Java BeansTM technology, Web application frameworks (JavaServer PagesTM, Servlets, JavaServerTM Faces), and a transaction and security model. Plus, with various Java APIs for XML, J2EE now has the means to expose the applications as Web services. Bottom line, J2EE not only supports Web services and XML but, equally important, it also provides a well-proven, open and standards-based infrastructure platform."
I will definitely agree with part of this. J2EE is definitely more mature, heavily deployed and time-tested. Why is that? BECAUSE .NET HAS ONLY BEEN AROUND FOR LESS THAN A YEAR. This argument is as stupid as saying that in 1996 nobody should have used Java and should have instead stuck with C++ because C++ was a much more mature, heavily deployed and time-tested platform. The other part about J2EE having a better model for enterprise services (transactions, security) is definitely true. However future releases of .NET will have a more native implementation of enterprise services, however the security features in .NET can be easily ported to another runtime (and is being ported to Mono). And please don't bring the "open" standards of Java into the argument. Sun controls Java. They might have a community process where others can comment on new features, however it's still controlled by one ruling body. Microsoft has at least standardized the C# and CLI specs with ECMA, and Microsoft listens to customers a whole lot. Especially the big customers. When a big customer wants something, either Microsoft has already thought of it or they plan on Developing what the customer wants.
"In their white paper, published on Oracle Technology Network, Oracle noted that Microsoft changed .NET PetShop architecture from n- tier (as demonstrated in Java Pet Store) to 3-tier. .NET PetShop had ASP .NET pages talking directly to an MS SQL Server 2000 database, thus removing the extra layers of abstraction from the Java Pet Store design.
Secondly, .NET PetShop broke complex join operations to simple SQL queries and placed these SQL queries into stored procedures in the database.
Now evaluate Microsoft's .NET PetShop from a design perspective. Clearly, their PetShop violates several recommended best practices. Imagine a real-world application designed just the way .NET PetShop is. It would run into a maintenance nightmare because of all the business logic in ASP .NET pages (written in C#), which are, in fact, meant for presentation."
Microsoft created the petshop application according to their published "best practices" for .NET development, just as the Java PetShop had done. The actual architecture was a SQL Server database for all data access, a set of classes (not the ASP.NET pages) to work with the database, and a front end that used the classes to manipulate data. Microsoft explained in their whitepaper that their PetShop was written with their best practice guidelines, just as the Java PetShop was. Using both company's best practices, the .NET version performed and scaled better. This easily leads into an architecture discussion -- a place where I am not trying to go. The .NET PetShop had no business logic in the UI. The only logic in there was "log a user in by calling a method" and "place an order by calling a method". Has Rima Patel even looked at the code? The business logic and UI are in the same project, however that doesn't mean they are the same "layer" in any way.
"There is quite a bit of FUD in the industry that C# is going to make Java technology obsolete. I believe that the Java programming language will not be threatened by this new kid on the block. C# does not provide anything new that the Java language has not been providing successfully for years. In fact, C# is missing the most significant advantages of Java technology: community interest and support for multiple platforms. This is a serious disadvantage. So why would industry want to learn and deploy this new language?"
I believe .NET will be a huge competitor to Java. The company I work for (12000+ employees) has an enormous Java architecture yet they are still creating a .NET unit in their IT department. That's got to mean something. I don't believe Java will be killed by .NET, but there will be (and is) a large exodus of non-Java developers to both Java and .NET. I know a few COBOL developers that will be very happy that they can use their existing sillset to write modern applications using .NET. Java surely does not provide that. I would also like to point out that Java isn't providing anything that hasn't already been done by people using other languages, specifically C++. I get very annoyed at these language/environment arguments, especially when people forget their roots and try to claim that what they are doing is new and innovative, when in fact everything they are doing has either been around for years before their technology, or their technology is nothing but an evolution of old ideas. Get with the program! Very little is new in the development arena! Companies are simply improving on ideas that were already there! Every piece of technology in both .NET and Java have been created in other languages in one form or another. Nobody is unique here, we're all basing everything we're doing on things that have already been done in one way or another.


.Net was the *worst* name they could have chosen for a non-webservices-specific platform
I'm aware that it's marketing's fault, but that more than anything will be the problem for this architecture. I believe that is what's causing otherwise reasonable people to declare "It's a webservices platform!"
I do think it's bunk that the EULA forbids you from releasing benchmarks, though.