After being professionally employed writing ColdFusion for the past two years, here's my moderately informed opinion.

ColdFusion is the single best web-scripting language choice for an uneducated user with a small task at hand (that is, if you don't mind shelling out several hundred bucks to complete this small task). CFML is terribly easy to learn, and handles all the everyday tasks you'd expect from a web-scripting language. This allows you to get yourself in trouble very quickly. Why?

  1. ColdFusion is slow. How slow? Like, Short bus slow. Slow enough that you need to be wary of loops that iterate more than 1,000 times. That's pretty fucking slow for 2001. This doesn't even mention query times, which leads us on to:

  2. A typical ColdFusion corporate setup is to have CF as the web-scripting language and MS SQL Server as the database. How do these two communicate, you ask? ODBC. Which is really fucking slow. Like, Cousin no one in your family ever talks about slow.

  3. A marketing department was obviously heavily involved in ColdFusion's development. How do I know? Simple things like for loops are sort-of implemented, but in what someone obviously thought was a "user-friendly" way. Here's a typical for loop:

for(int i = 0; i < 10; i++)
{
   foo++;
}


Now here's the ColdFusion version:

<cfloop index=i from="0" to="9">
   <cfset foo = #foo# + 1>
</cfloop>


ColdFusion does this sort of thing a lot, basically trumping typical programming language conventions. What this means for you: If you're new to the world of programming, all the assumptions you'll learn from ColdFusion are subtly, annoyingly wrong.

  4. ColdFusion offers very little to help you, the programmer, manage complexity. At this time ColdFusion has reached release 5.0, and just now got around to giving users the ability to write functions. This lack of structure is where third parties come in, with products like the Fusebox method, but rote technique means little if your medium is crap.

If you're attempting to build a medium-large application with ColdFusion, you're looking at a minefield. You could, very easily, hire a bunch of schmoes from the local community college to learn CFML and write your application. Things would progress very rapidly, in the beginning. Given a bit of time and a few minor revisions, you'd be left with a grinding, slow application that was a nightmare to maintain. This is where you'd hire someone like me (at a mildly exorbitant rate) to come in, and essentially re-write your app from the ground up, in ColdFusion. Alternately, you could just hire me right away, but then what's the point of using ColdFusion?

Or you could just do it right, hire some programmers who know what they're doing, and build the thing with PHP. Which is what I'd have told you to do in the first place.

ColdFusion has evolved significantly since last a writeup was added to this node. ColdFusion MX (that is, version 6.1 as of this writing) was released in 2003, and (being professionally employed writing ColdFusion for the past 7 years) here's my moderately informed opinion.

With version 6, Macromedia did a complete rewrite of the ColdFusion system, making it run entirely within a Java runtime environment. On Windows servers running IIS, this meant generally packaging an integrated JRE (conveniently enough, since Macromedia also bought up jrun when they swallowed Allaire.) However, the farther implication is that with version 6 you can make ColdFusion run on anything that can run Java. Windows, Linux, and Sun are preconfigured, but I could set it up on Mac OSX if I felt like it.

There's no denying that earlier versions of ColdFusion were dreadfully slow and not particularly reliable. ColdFusion 5 installations were regularly set up to periodically restart in order to get around memory leaks and other technical atrocities. Beyond straight downtime, handling requests was slower than dog shit climbing uphill on a cold day. Particularly if you didn't reboot the server occasionally.

It's actually sort of sad that a transition from a program written largely in C to one written in Java and compiled to bytecode on the target server resulted in a dramatic performance increase. But, what's to complain about? It's faster, nontheless. Not actually being a Java programmer, I can't tell you exactly why, but I'm sure some clever person out there could explain it. I program in CFML. And, while I won't quote statistics, from everyday work on my development server, the feel of things runs close to twice as fast, at least once you let the system compile your templates.

Oh, I didn't mention that, did I? It's not just the application server that is written in Java. ColdFusion 6 takes your good old CFML templates and translates them (on the fly) to Java code, and then compiles it down to bytecode right along with the rest of the application server. No "compile" button need be hit, it just checks for new files and eats up your code automatically. It does tend to bog down the first execution of a new template, but afterwards, your code runs pretty much as fast as the app server itself.

That, and no more crashy. Uptime on my dev server is going on something like months (which I know is not really worth bragging about) but is a hell of a lot better than CF 5 ever did.

Now, as for the merits of the language itself:

ColdFusion is, in fact a very easy-to-learn web application development platform. However, like the game othello, it takes a moment to learn, but a lifetime to master. Continuity's opinion notwithstanding, you can, in fact, do some very complicated and graceful work in ColdFusion, and be very successful at it. You can also hire hire a bunch of schmoes from the local community college, people with no skill or experience, and they will produce a mediocre work.

Like Maslow's Hierarchy of Needs, the more basic requirements we fulfill allows us to focus on loftier, more abstract and pleasurable goals. I tend to believe that working in a high-level intepreted markup language like CFML frees me from a great deal of the technical baggage which otherwise would consume all of my time. I can spend that time designing more useful interfaces, more creative information designs, more flexible database schemas.

To paraphrase Jakob Nielsen, how helpful can a program be if the users don't want to touch it? Despite its shortcomings, I have found there is very little that I cannot do in ColdFusion.

Admittedly, I am painted into a corner by the forces of economics. I have to pay my bills, thus I work with what I know, and have no time to learn another language. I'm stuck with ColdFusion until I effect a major career change. But, necessity is the mother of invention, and it's really not that hard to invent with ColdFusion. Don't write it off, despite what some language snobs might tell you.

Log in or register to write something here or to contact authors.