I spent a considerable amount of time today in two different e-mail threads, both from individuals trying to compare ColdFusion development to .NET development. So that I won’t have to wade through all of this again any time soon, and in the hope that this discussion proves useful to others, I have extracted the core messages from both threads, and compiled them into this post.
Before going into specifics, there is a more fundamental issue that must be laid to rest. You have been asked to compare ColdFusion to .NET so as to determine the path for future application development. And frankly, what you have been asked to do does not make a whole lot of sense, and demonstrates a remarkable lack of understanding as to what exactly ColdFusion is and what .NET is not.
.NET is a platform and framework on which to build applications, and not just web based applications. .NET is the underlying engine which powers all sorts of applications (server apps, client apps, web apps, and more), and applications written for .NET leverage the .NET APIs to deliver needed functionality.
If you want to build .NET powered web applications, then you will likely do so using ASP.NET. ASP.NET (which is similar to classic ASP only in name) applications can be written in many languages, but VB.NET and C# tend to be the most popular. ASP.NET applications are collections of pages and controls that, together, create a complete application. And ASP.NET tends to be used to build the presentation tier of web applications (although that is not always the case).
ASP.NET applications are compiled and executed by a virtual machine, and at execution time the original language used to write the code becomes irrelevant. The application just runs, leveraging the framework within which it is running.
Of course, you can’t do much with ASP.NET without knowing something about the underlying .NET world. But exactly how much of the guts you’d need to be aware of depends on what it is you are building and how you’d want to go about building it. Obviously, the more an ASP.NET developer knows about .NET and all it is capable of, the more he’ll be able to leverage the power afforded by that platform. But that does not in any way suggest that simpler applications cannot be built without paying much attention to the .NET framework itself. (And indeed, Visual Studio .NET hides much of the underlying complexity from those who’d rather not pay attention to it).
So, .NET provides the framework and architecture, and ASP.NET is used to build web applications that take advantage of that underlying framework and architecture.
Now let’s look at J2EE (or Java EE), an alternate and competing platform, created by Sun and supported by a whole slew of vendors and products. J2EE is a platform and framework on which to build applications, and not just web based applications. J2EE is the underlying engine which powers all sorts of applications (server apps, client apps, web apps, and more), and applications written for J2EE leverage the Java APIs to deliver needed functionality.
If you want to build Java powered web applications, then you have a few choices. You might use JSP which provides a page based scripting interface to Java based web applications. Or you may use ColdFusion which runs on top of Java. Both JSP and ColdFusion tend to be used to build the presentation tier of web applications (although that is not always the case).
ColdFusion (and JSP) applications are compiled and executed by a virtual machine, and at execution time the original language used to write the code becomes irrelevant. The application just runs, leveraging the framework within which it is running.
Of course, you can’t do much with JSP without knowing quite a bit about Java. By contrast, you can do quite a lot with ColdFusion without knowing anything at all about Java, but you can do much more armed with Java know-how. The extent of Java exposure required depends on what it is you are building and how you’d want to go about building it. Obviously, the more a ColdFusion (or JSP) developer knows about Java and all it is capable of, the more he’ll be able to leverage the power afforded by that platform. But that does not in any way suggest that simpler applications cannot be built without paying much attention to the Java itself.
So, Java provides the framework and architecture, and ColdFusion can be used to build web applications that take advantage of that underlying framework and architecture.
Do you see a pattern here? Comparing ColdFusion to .NET is a bit like comparing one vendor’s finished car to another vendor’s engine. It’s just not apples-to-apples.
If you want to compare ColdFusion to .NET you have two avenues you can follow. You can perform a top-down comparison, first comparing the platforms (J2EE and .NET), and then comparing the web application development experience using ColdFusion on top of J2EE to that of using ASP.NET (on top of .NET). Or you can perform a bottom-up comparison, first looking at the development experience of ColdFusion and ASP.NET, and then comparing underlying architecture and platforms.
But either way, you need to separate the engine discussion from the application development experience discussion. Only then can you make educated recommendations and take defensible positions.
Oh, and for an overview of ColdFusion and how it relates to Java, see this post.

11 thoughts

  1. Ben,
    Great work. We’re just beginning to have this discussion at my work, and I’m sure I will use a lot of your points in my presentation.
    Sami

  2. Good to see clear positioning of .NET against the appropriate tier of the Java stack.
    One very important point you didn’t mention is that the .NET platform / framework is proprietary and runs on WinTel boxes only (Mono and Portable.NET are far from complete implementations of .NET and they don’t have standardized UI libraries – having said that, Mono is sufficient to run a fairly rich subset of ASP.NET).
    By contrast, the Java platform / framework runs on pretty much everything, allowing an organization to run a blend of hardware / system software and switch vendors as necessary without having to change their software.

  3. Sean, I actually deliberately omitted that from this particular thread because I did not want to get into the actual debate itself, and wanted to lay the unbiased ground rules for what the debate should be. But yes, you are correct, and that is an important point.

  4. I can’t agree with you more, Ben. It seems every day I hear someone asking to compare CF to .NET.
    After your previous post about the MACR job I decided to do a job search for "ColdFusion" in Connecticut (sorry, I’m not actually looking, rather I was just looking at competition :). At least half of them require experience in "ColdFusion and .NET." Do they mean to ask for BlueDragon on the .NET platform (which would be CFML and not ColdFusion), or CF and ASP.NET experience? Granted, most of these third party recruiting companies have no idea what they’re asking for (which is why I would never them again… I can do far better on my own). Its possible the companies really do want someone with CF and .NET experience, but not likely.
    With your permission I’d like to forward people to this post when asked the question again in the future :).

  5. Ben, your explanations are truly worthwhile, especially back when you posted some of the same info in the old .net vs cf thread at House Of Fusion.
    Rookies like me learn lots from these discussions. 🙂
    Thanks,
    Will

  6. I think three Macromedia tool suites is fine for CFMX tools. Heck, add in script libraries for Textpad, Editpad Pro, jEdit, EMACS and other IDEs and Text Editors and you get lots more support, just not often talked about. In fact, until cfEclipse became nice and easy to use, I did all my CFMX coding in Textpad or jEdit.

  7. How about doing a comparison of Homesite or DW to Visual Studio 2005. (Or doing CF developement compared to .Net web development with the Visual Studio Web tool.) It would be neat to also include the upcomming CFEclipse to the picture.
    I think we are forgetting that much of what drives .Net development is the tools. Sadly this is an area we are way behind the ball on. It seems like the .Net tools are still being "agressively" developed while the tool offerings for building CF apps are dragging way behind the language and the competition.

  8. Perfectly Said ! I really like the comparison .I have been working in both technlogies and like you said they both have some pros and cons .Nevertheless you always want to know the diffrences between them .Most of the people get confused while comparing the java2ee and .net

  9. A. I really love programming in C#. It’s a powerful, elegant language.
    B. I really love programming in CFML. It’s a powerful layer on top of Java that is easy to learn and use.
    These things don’t have to be mutually exclusive. I’ve written several applications over the last two years that integrate ColdFusion, Flash and the .NET framework.
    Anyone who gets into the "What’s better?" debate is simply grasping at clouds because when it comes down to it, neither J2EE or .NET is "better" for about 90% of what people use them for. What they’re really arguing about is "What do I feel comfortable with?" and don’t let them try to convince you otherwise.
    Off the top of my head, I can’t think of anything that framework does that the other doesn’t do. Sure, give me an hour and I could come up with some exclusive things about each, but we’re not talking enterprise level development most of the time… we’re talking web application development.
    And I can tell you from personal experience that for web development, CFML is faster than ASP.NET even with Visual Studio (which freakin’ rocks!). I do both, am very experienced in both, and will choose CFML every time if given the choice.
    For desktop application development, I’ll pick C# over Java any day because of Visual Studio (which freakin’ rocks!). For me, the tool makes the difference, not the framework or language. I know them both… it’s just semantics at that point.

Leave a Reply to Sami Hoda Cancel reply