Anything you can do, I can do better.

My thoughts on to http://java.sun.com/features/2002/07/rimapatel.html

"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.

8 comment(s)

joshg wrote on January 23, 2008

.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.

zakir wrote on January 23, 2008

I agree with joshg

zakir wrote on January 23, 2008

Adam very articles are damn good.The color combination and size of the fonts are too much of a strain on my eyes. Do something

Thanks

jbeaumont wrote on January 23, 2008

Adam,

I agree with almost everything you said, and the sun.com article is mostly junk. However, at this point in time a choice to develop in .Net forces you to buy into the bundle of Microsoft products, until this changes significantly I can't see recommending its adoption in any medium to large sized business. Until the product is untethered from a Microsoft Operating System and Web Server it's a big risk. What happens if those two (OS and WS) product group in MS go in directions I don't like? What happens if there's a massive flaw in IIS and management demands we switch to Apache? If I'm a vendor what happens when I try to sell my code into a Solaris based business? What if MS changes its enterprise licensing structure for its servers (which they're doing now) and my costs per license rise $200k? What's my way out? The problem isn't that Microsoft releases poor products, they don't at all, the problem is that it's inconcievable to them as a company that you would want to use anyone else's in conjunction with theirs. It's a corporate culture problem brought on from the OS dominance days.

Technically speaking .NET is a half generation ahead of Java and they were able to benefit from things Java did wrong. The CLI and CTS are a much better common abstraction layer than the Java VM from a business benefit perspective. However, any language war waged at a technical level is unwinnable when the situations are unknown. How someone can argue Java vs. Net for ALL situations in ALL permutations is beyond me. That being said Adam, you can't knock the Oracle WP dismissing the MS Pet Store benchmarks when MS did not play by the rules. Sure they built it according to their best practices but that's like having an auto race where I can enter a jet plane. Sure it crosses the finish line, but saying your Lear beat my Porsche doesn't really say much. If MS implements an n-tier pet store then we can compare a Java vs. .Net application implemented in that specific way. To belabour the poor analogy even more, it's like NASCAR, there are certain rules all cars have to meet (I'm assuming here :) ) before they can enter the race. MS did things their way, their benchmark is meaningless.

Just to throw in my two cents here...

Sure, using .NET ties you to MS. As did picking ASP or VB6 a year ago. Yet, ASP managed to find its way into a great deal of medium to large sized enterprises. (And yes, I know there's ChiliSoft, but I've yet to hear anything really positive on it.) Right now, picking any MS development platform does tie you to a MS operating system. Any manager who picks MS and doesn't understand that changing platforms will cause pretty much a total rewrite hasn't done his homework. But, I agree, if you're not willing to make that leap, don't. Pick a technology like Java, or PHP, or something a bit more OS neutral.

However, .NET /is/ moving out away from being tied to IIS. There's already a module for Apache in development to allow it to run .NET on Windows boxes, and the fellows working on Mono never stop amazing me with their progress. Are they ready now? No. But, in a couple years, I expect it to be a viable option. Do I see Java going away? Nope. However, I think alot of companies (like the one I work for, which happens to be the same one Adam does) will do the route of mixing Java and .NET applications on the enterprise. They both have their strengths and weaknesses, and I really think the best solution is to find a way to allow those strengths to play off each other.

As far as the Pet Shop benchmarks, I personally don't think what MS did with it was wrong at all. It wasn't about "playing by the rules." It was about building an application that showcased the technologies used and provide a "best practice" to model applications by. And that's what MS did. You develop .NET and java apps in a different way, and the implementations of Pet Shop reflects this. If the .NET verrsion ended up being slower, do you think Oracle would of complained that they did it differently? MS had better numbers, so Oracle had to do somthing.

I have a few things to point out. First off, check out this whitepaper:
www.microsoft.com/.../IISOverview.doc

IIS6.0 has been completely redesigned from the ground up. I played with the Windows.NET server beta a few months back and there was a mysterious IBM logo bundled in with the IIS management console. I have yet to get any real indication that IIS was replaced with something else, however the paper above does explain very well what has changed in IIS6.0.

Secondly, developing in .NET does not only mean developing ASP.NET applications. Don't forget about WinForms applications. Developing any more windows apps in anything other than .NET just seems ridiculous at this point, with all of what you can do with .NET (and considering all that you WILL be able to do in the future) it would seem almost ridiculous to develop new windows applications in C++ or VB6. Also don't forget about web browser hosted executables. Say you go to http://foo.bar/myapp.exe. That application can be written in .NET, hosted on Solaris (I know one company doing this right now) and run on a Windows 98 client.

Thirdly, the argument of people not choosing Microsoft applications because it ties you to the Microsoft bundle of applications is getting more and more tired with me. Say you buy Windows 2000 Server. Say you then need to write an ASP.NET application. You can use IIS and (very soon) the Windows version of Apachi. Say then that you need a database. MySQL does the trick easily for those who don't want to buy SQL Server (and yes there are native ADO.NET data classes for MySQL). Or maybe you already have Oracle, just use the Oracle data classes. So by using ASP.NET you can limit yourself to only one Microsoft product, their server.

Soon Mono and others will come out and you'll be able to have right once test anywhere just like Java. But Mono will be so far behind Microsoft on new features of .NET it'll take them so long to get caught up -- is one possible argument. True, however I do recall MacOS not supporting Java 1.3 until almost a year after 1.3 got released.

The last reason I dislike this argument is for the simple reason that large businesses make technology decisions all the time. Take the insurance industry for instance. 20 years ago they thought COBOL mainframe applications were the way of the future. 10 years later they have tens (or hundreds) of these applications hosted on mainframes all over the place and the companies that created these apps are out of business or no longer supporting the software or all of the people who worked on that stuff has either died or retired (as my company is experiencing now). What's their way out of this situation? You never know what is going to happen in many years and every investment is always a risk. If nothing else, don't upgrade your server software to new versions if you dislike the new pricing schemes. Not to mention the fact that a lot of "medium to large sized companies" (such as the one I work for) have a great working relationship with Microsoft which is one where no one gets screwed in the end.

jbeaumont wrote on January 23, 2008

Well I think we're mixing up our arguments here. I wasn't dismissing .NET or companies that choose to use it. Instead I was saying that <strong>at this time</strong> choosing to develop in .NET is forcing you into being tied into one vendor. Bringing up what happened with Macintosh and Java or what may happen with Mono is kind of moot. Saying that recommending against .NET adoption at this time isn't saying that .NET will never get there, or that the decision won't change, but that it's not a product that currently meets what I personally would consider acceptable for recommendation for the reasons I said above.

It's true that businesses make technology decisions all the time, but your COBOL example is actually a counterargument to your points. COBOL wasn't widely adopted before the late 60s due to the lack of a standard. Once ANSI standardised it, it took off. Yes I know that MS submitted C# to ECMA, and that's the exact right move. Everything MS is doing so far is right. The trick now is waiting for adoption and competing implementations. Once I can be sure that I can serve a .NET or Winform application from a number of different servers on different platforms then it's time to break out the champagne.

One other point to consider is what the current skill set of your existing base of developers have. If you have an MS based enterprise with lots of VB, etc. developers than the move to .NET right away makes complete sense. But if you have one with loads of Java developers and *nix boxes, then before you can adopt .NET you need to decide how many devs do it, for what projects is it appropriate, how will it play with your other stuff, etc. All of a sudden it looks like a larger economic burden to bear for a nebulous return on investment. Developer time is a fixed cost, you're paying them anyway.

jbeaumont wrote on January 23, 2008

Oh and I'm reading the whitepaper now, thanks.

And Paul, you're probably right about the benchmarks now that I think about it more. It still seems like the two can't be compared, once you deviate from the technology used and then the architecture used the only thing you have in common is the problem set. I'm not sure if the Pet Store was originally designed to be a "this is the best way to build a Pet Store" or "This is the way you build something according to the J2EE spec and using the MVC design pattern." If it was the former (or something close to it) than MS is right, if the latter, they're wrong.