I'm a Worldwide Developer Evangelist for Adobe. My job basically entails me traveling the world and talking about the developer tools and technologies that Adobe has to offer or that we support. I'm also the author of Driving Technical Change. It's about convinving reluctant co-workers to adopt new tools and techniques. Terrence is a DZone MVB and is not an employee of DZone and has posted 40 posts at DZone. You can read more from them at their website. View Full User Profile

Dear ColdFusion Skeptic

  • submit to reddit

Hi, how you doing? Your day going okay? Cool. I'm not looking to fight you. It got a little heated on Twitter. I know our community is passionate; sometimes that "passion" becomes "an angry mob of flame warriors."

You think bad things about ColdFusion. You're certainly entitled to your opinions, but I think you're mistaken. I think it's possible you haven't tried ColdFusion in the past few years, or ever. If you haven't, I invite you do so.

But let's be civil. We can disagree without it being a whole flame war thing.

Let me respond to your issues, we'll see if I can't persuade you to see things from a different view. First, let's start with why you say you dislike ColdFusion:

"ColdFusion encourages spaghetti code."

It doesn't. Unfortunately, it enables it, just like most other languages. However, we do have a number of features and community driven projects around enabling well-architected applications. Those include:

All of these combine to make it easy to create well-encapsulated, modern projects in ColdFusion. Here's an example of some modern ColdFusion code I used in a recent project.

"ColdFusion is just tags."

Actually it isn't. In addition to CFML, ColdFusion also supports CFScript. Most of the core features that CFML enables are available here. There are a few view related features (for example AJAX driven html form tags) that aren't implemented in CFScript because they don't make sense to.

One thing I've found about writing in both script and markup is that writing an app entirely in markup is painful and silly, as much as writing entirely in script is. I've come around to the idea that views should be in markup. Views contain hierarchies of content, containers, and other features that are easy to express and understand in markup. On the other hand, when you are dealing with large libraries of functions and business logic while trying to figure out what each piece of code does the less extraneous characters the better. That's why scripting is better on back-end code.

ColdFusion enables both. Do what you like, where you like. You have the choice in CF to do so.

"ColdFusion isn't free."

It isn't. Sure there are open source clones out there, and if you like the rest of what I have to say, but can't get over this, feel free to check them out.

ColdFusion is a productive language. If you look at Total Cost of Ownership versus similar products, you'll see that the cost of licensing is a small part. Development and maintenance is the largest chunk of TCO. Every solution pays this cost, and a language that is more productive will be cheaper in the long run, despite upfront licensing costs.

Total Cost of Overship Chart

All that being said, I skipped out on one part of the story here: development is free. The developer version of ColdFusion is free. If you do move to a production environment, shared development, testing, and disaster recovery servers are free too. The IDE, ColdFusion Builder, isn't free, but there are free and open source alternatives. If you are using ColdFusion for educational purposes the server and IDE are both free.

ColdFusion does have low cost hosting out there. Additionally, ColdFusion 9 tweaked the EULA with regards to cloud hosting, making it both possible, and economical.

It's not free. It costs money. But we at Adobe feel that we provide a lot of value for that cost.

"ColdFusion doesn't have any open source projects."

Riaforge.org, which requires included projects to be open source, lists 716 ColdFusion projects and 39 ColdFusion Builder Extensions at the time of this post. Brian Rinaldi's open source list lists 352 projects.

Enough with your arguments let me tell you why I think ColdFusion rocks:

I've already written extensively on this, so I'll sum up and invite you to check out some of these other posts.

ColdFusion makes hard things easy. Most things in ColdFusion are single operations. By "most things", I mean "things that every web programmer has to do but other technology solutions don't integrate at a language level." Send an email? Wrap 2 lines of code around your message content. Talk to an LDAP server? One ColdFusion tag call (or script object.) I don't have to manage database connections. ColdFusion has features that make it easy to work with results from a database. It doesn't take me 80 lines of code to talk do an HTTP get request.

ColdFusion already integrates with lots of technology. Need to talk to LDAP, Microsoft Exchange, Microsoft Office or a Java Portlet server? ColdFusion comes equipped to do so. Need to integrate some Java or .NET project into your application? ColdFusion can talk to either. Need to talk to printers or cell phones via SMS? ColdFusion can do it. The great thing here is that I don't have to search for and rely on third-party code to do so. I can if I want to but for a lot of these commonly used technologies, ColdFusion already talks to them.

ColdFusion can play many roles in a web application stack. Need to build a classic HTML driven web application, or and AJAX driven site? ColdFusion can handle that. Want to build a Flash based rich application? ColdFusion has special protocols that make it a snap to call from Flash, again right out of the box. Need to write a SOAP or REST API for your application? ColdFusion can do that, usually by just writing an easy façade on your existing code. Need to build an IM or SMS driven application without a web based front end… Yep, ColdFusion has you covered.

I hope you made it this far. I hope I caused you to question your stance. I can even hope that I encouraged you to try ColdFusion before you dismiss it.

Related Entries:
Published at DZone with permission of Terrence Ryan, author and DZone MVB. (source)

(Note: Opinions expressed in this article and its replies are the opinions of their respective authors and not those of DZone, Inc.)



Branden Makana replied on Thu, 2011/03/31 - 10:54pm

Oh look, a TCO graph showing Coldfusion as the best! Without even a source cited! How could we not trust it! Especially since the author is an evangelist for Adobe!

Erik Westra replied on Fri, 2011/04/01 - 1:41am

It seems clear to me that the author has never created a real application for customers. I have to work with ColdFusion on a daily basis and would never recommend Adobe ColdFusion to anyone. Things improved a bit with the better script support in 9. But it still leaves (from the top of my head) the following:

- Slow response to bugs and unwillingness to help
- Unusable bug tracker
- Session replication does not function properly
- ORM is implemented with limitations making it very hard to use in some cases
- Caching mechanisms are broken
- Webservices stop functioning after a period of time
- Webservice part of ColdFusion is incompatible with the new ORM features
- Default settings are not for production
- Documentation is faulty
- Requesting header information breaks webservices
- Development tools are buggy

If you like the CFML and/or cfScript languages, you better check out Railo. It's not completely compatible (which is why we can not use it yet), but seems to have a lot of these issues worked out.

Daniel Kvasnička replied on Fri, 2011/04/01 - 6:27am

To me CF looks pretty solid, but I can't stand one thing: why the hell is CFML such a horrid pseudo-XML ripoff??? Wouldn't it be much better for it to be just XML? It would open many doors (all the XML tools and techs) and made it easily editable in a lot of editors... Or am I mistaken? Can I write CFML as 100 % XML and are XML schemata available?

Erik Westra replied on Fri, 2011/04/01 - 1:41pm in response to: Daniel Kvasnička

No, you can't. If you write code in a tag based fashion you create a lot of illegal xml tags. A few examples:

- cfset
- cfscript
- cfif
- cfquery

On top of that, even properly closing some tags (with a /) causes errors. An example of this is the cfmodule tag which gets executed twice if you include a trailing /.

Sean Coyne replied on Fri, 2011/04/01 - 3:02pm in response to: Erik Westra

The cfmodule tag is used to execute ColdFusion custom tags. If you author your tag correctly to handle both the start and end execution portions this will not happen. It is not a bug, it is your incorrect use of the tag. If you simply want to include code, use the cfinclude tag instead.

Sean Coyne replied on Fri, 2011/04/01 - 3:07pm in response to: Daniel Kvasnička

CFML is not an "XML rip off" as you say. It actually predates the XML specification (CF, 1995, XML, 1996). ColdFusion was designed to let HTML developers quickly learn the syntax, so the syntax is a compliment to HTML. There are many editors for ColdFusion, CF Builder, CFEclipse, a Textmate bundle, a Notepad++ plugin, Coda, IntelliJ IDEA, Dreamweaver, and many others. It certainly does not need to be XML compliant to be "easily editable in a lot of editors". If you don't prefer the tag based syntax you can utilize CFScript which is a ECMA-style scripting language.

Erik Westra replied on Sat, 2011/04/02 - 3:50am in response to: Sean Coyne

I stand corrected, thank you

Shoaib Almas replied on Sat, 2012/08/25 - 6:02am

rom the perspective of making this post more transparent...

Where does the total cost of ownership come from; and who generated the numbers?

It was my understanding that "shared development, testing, and disaster recovery servers" are free only if you purchase a ColdFusion license. Is that understanding correct? Are such uses free for CF standard customers or just enterprise?

I use a managed VPS to host my sites; the host is the formal owner of the CF License. Can I install a "testing" version on my staging server?

Java Forum

Comment viewing options

Select your preferred way to display the comments and click "Save settings" to activate your changes.