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:
- Custom Tags or encapsulated views.
- CFCs, which are analogous but not equivalent to classes in Java.
- Easily Created SOAP based web services.
- Various community REST based web service projects.
- Various frameworks.
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.
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.