Yesterday I received an interesting question from an individual who used ColdFusion extensively in the CF3-CF5 era, but has no experience with ColdFusion MX or later. He is now getting back into ColdFusion development, and wanted to know what it is he needs to know about ColdFusion today. It’s an intriguing question, and I decided to blog my response because A) others might be interested in the same thing, and B) others may have different answers, and I’d like to see them myself. So, comment away, and here is my response …
Hi,
You’ve asked an important question. ColdFusion went through a significant metamorphosis going from CF5 to CFMX, and while you can still write code exactly as you used to, I strongly believe that you should not be doing so. Despite being able to run the same old CFML, ColdFusion (as of CFMX) is a radically different product from what it was previously, and being able to fully take advantage of it does require learning some new skills. So, here is where I’d like you to concentrate (in no particular order):

  • ColdFusion MX and later (all the way to ColdFusion 8.x today) is all Java internally. While there is actually no need to know Java to be able to successfully use ColdFusion, understanding the ColdFusion Java relationship is very useful. Just knowing what ColdFusion’s Java underpinnings make possible ensures that you’ll know what your options are in the future, whatever that future may be.
  • ColdFusion Components are the most important change to the CFML language since, well, since we created CFML. While it is entirely possible to build reusable, organized, structured, manageable, and scalable code without CFCs, I’d not advise doing so. ColdFusion Components are clean, simple, and sophisticated, and form the basis of just about any structured ColdFusion development. (They also are they key to working with Web Services, Flash and Flex integration, using gateways, Ajax integration, and more). While CFML is not an object oriented language, ColdFusion Components provide CFML developers with some of the core benefits of objects, without much of the complexity typically associated with OOP development. Simply stated, ColdFusion Components encourage (and even reward) better development practices. And not using CFCs nowadays raises a major red flag for me.
  • Understand frameworks, methodologies, and more. And no, I am not going to get into a Mach-II vs. Fusebox vs. Model-Glue debate, nor am I going to enumerate all of the invaluable community projects and initiatives in this space. The fact of the matter is that I don’t care what framework or methodology or data abstraction layer or standards or best practices you use. I just care that you use something. If one of the established projects works for you, great, use it. If not, then roll your own. You may truly need the discipline encouraged by MVC implementations, or you may just need a document that clearly lays out your rules for variable naming and code organization and more, or you may need something in between, or some combination of options. There is no one size fits all, and what works for one project won’t necessarily be right for your next project. What you use is far less important then understanding why structure and organization is necessary in the first place. The just-start-writing-code-and-then-figure-it-out-as-you-go mentality of the 90’s is thankfully long gone. And nowadays developers understand that the planning and structure that was the norm pre the instant-gratification .com era is still as important and relevant as ever. That’s a good thing indeed.
  • Way back in the late 90’s I wrote a column entitled “When Not To Use ColdFusion” that argued that the best ColdFusion apps are not pure ColdFusion apps. Rather, they know when to take advantage of other systems and options, be in SQL stored procedures, Java code, and more. And nowadays this is more true than ever. ColdFusion provides an amazing array of integration options, from Java object invocation to web services support to JMS connectivity to all sorts of gateways to new .NET integration and more. ColdFusion is great at lots of things, but is not ever going to be the best at everything. As an example, just about every DBMS can sort, process, group, summarize, and manipulate data far more efficiently than ColdFusion ever will. In addition, lots of what you may need in your apps may already exist elsewhere, and you should be able to leverage the best-of-breed whenever appropriate. This kind of goes back to my first point, it pays to understand what options are available, so that you’ll be ready to use them when needed. The best ColdFusion developers I know are skilled in more than just ColdFusion. They may indeed create and deploy projects that are all ColdFusion, and that is often completely appropriate. But they also know when and how to pull all sorts of pieces together to craft the best possible solution to any problem.

The bottom line is that ColdFusion is richer, more powerful, and far more mature than it was back in the 90’s. You can do exactly what you did before, and you’ll probably be successful. But, that would be kind of like buying the latest top of the line gaming system and using it to play Pong. Ok, maybe not that extreme, but you get the idea.
Welcome back, there has never been a better time to be a ColdFusion developer!
— Ben

9 thoughts

  1. LOL – geez Ben – you gotta pimp your book! 🙂
    1) Buy a copy of ColdFusion Web Application Construction Kit (WACK)
    1a) Read the book
    2) Start using CFC’s
    3) Start coding websites with MVC in mind (separation of content is good)
    4) Build an application or two in all the major frameworks and pick the one you like best
    5) Start using OO concepts (patterns, etc)
    6) Join a local ColdFusion user group
    7) Join several online ColdFusion groups (CFTalk, coldfusioncommunity.org, etc)
    8) Sign up to several of the CF RSS aggregators (MXNA, coldfusionbloggers.org, feed-squirrel!)
    9) Stir
    10) Enjoy!

  2. I would definitely say pick up the latest versions of WACK. Having come from other languages, I learned the most from those books in the shortest time frame. I also agree with Jim Priest in that you need to join a bunch of groups, ColdFusion users are very friendly, and willing to share ideas.
    I can’t comment on frameworks yet, just because I haven’t used one for ColdFusion.

  3. Ben, I’ve got to respectfully disagree with you here.
    "ColdFusion is great at lots of things, but is not ever going to be the best at everything."
    While that may have been true as of CF 7.0, as of 8.0.1 I think it’s pretty clear that ColdFusion is finally the absolute, indisputable best at every single thing there is.

  4. Every point raised is well thought out. Yes, I was one of these returning long time CF developers as well (last cut, cfmx7ish, I already started to use cfc even back then…), back to this game about eight months ago.
    Also, if I may, I’d add the following note, one shouldn’t compete on all thing and everything, I picked the UI piece, to me, the business value of improving user/customer web experience is very important, that’s where UI controls kick in…
    A bit disappointment at CF8’s embracement of open source js libraries such as YUI, Ext etc. is that, not sufficient customization for performance gain, for instance, any CFWINDOW would require a minimum of 45k underlying js libraries to be loaded, which slows down loading quite a bit. Yes, one can roll up his sleeves, do it on his own, then, one simply loses the benefit of CF”s new UI tools, catch 22, also, DIY in this case poses Opportunity Cost issue as well…
    Thanks.

  5. Hello Everyone,
    I am the original developer who inspired ben to post this page. I appreciate everyones posts. At the time when cfc’s and udf’s came along I said to myslef great, another new way to do things (sarcasticly). But taking time away from the industry and being able to come back to a more polished Coldfusion is great.
    I am going to list a couple of my findings in reference to a CF5.0 Developer Migrating to MX in general :
    This page is an old macromedia page that adobe still hosts. It is from the 6.0 MX release and lists migration instructions for a CF5.0 app and just gives general instruction of the general changes on the surface. Considering this is right about where my carreer ended, this was the ideal place for me to start.
    http://livedocs.adobe.com/coldfusion/6/Migrating_ColdFusion_5_Applications/cf_migration_guide.htm
    Coldfusion is built on top of java. At anytime you can dip right into the java layer and use Java functions that may not be available to you in coldfusion. This allows you more ways to approach a problem. This page shows great examples to get you to start thinking out of the box.
    http://www.bennadel.com/blog/241-Finding-Values-In-A-ColdFusion-Array-Using-Java-And-Other-Cool-Stuff.htm
    One of the other things to overcome is all of the new terminology. New acronyms and qute little terms for old stuff. IDE, MVC, SQL Injection, Web 2.0, Ajax, etc. just a few that me going ‘huh’ when I heard them.
    To Don, I dissagree with you. I don’t know how you managed to find a job in coldfusion if you concentrated in UI, unless you are talking about flex. I have been on several interviews at high level places and have been put through the ringer as far as having my knowledge tested in all areas of coldfusion. I think you succeeding with your advice might be a rare occourance and bad advice in relevance to this posting.

  6. I too am returning after a slightly longer absence… I left at 4.5 so there’s lots to catch up on… I get the CFC concept – pretty cool and very helpful.
    But I’m really confused about which framework model to use. I know each programmer will have their preference for a particular flavor of framework – but where I need help is understanding the different implementations of each of them. Some require other 3rd party frameworks to function, others appear like they have not changed or been updated in 24 months or so – which would imply they are not current with the new features offered by CF8, yet others look as though you had to be there from beta 1 to comprehend their system or process. Some were generated many years ago, others are recent developments. Are the older (legacy) framerworks being updated to account for improvements to CF?
    Is there a side by side comparison somewhere that examines the different implementations, core functionality, dependencies, popularity by placements, plugin availability, community support & ease of use?
    I know I could go get the three most popular and try to install / use them and then try to decide which one best suits my needs – but I’m betting there’s someone reading this that has a better understanding of them and can help cut the trial and error out of the equation.
    I’m really hoping to avoid making the mistake of adopting a framework system that is on its way out and being replaced by a newer product that is more supportive of the new CF8 application.
    Your thoughts and direction will be greatly appreciated.
    Gaver

  7. Gaver,
    I know how you feel. Picking a framework/combination of frameworks can be a pretty daunting task, especially because of a lack of resources to compare them without investing a good deal of time in learning what each do and what differentiates them through first-hand research.
    If you’re just now coming back to ColdFusion though, I think most developers would suggest that you take it one step at a time. Maybe read the Web Application Consruction kits first and get the language and syntax tight in your mind, and then start exploring frameworks.
    If you’re interested in frameworks in general, two of the most popular non Model-View-Controller options are Transfer and ColdSpring. Transfer is an ORM and ColdSpring is a "CFC dependency manager".
    If you’re looking specifically for MVC frameworks, my impression having done a medium amount of research is that ColdBox is far superior to all of the other CF frameworks (though I don’t use it myself), and Model Glue may excel at ease-of-use and adoption.
    Stay tuned for HotCore, slated to release in November or December of this year. It’s the most-exciting ColdFusion development I’ve come across in 4 years as a developer.
    Good luck.

Leave a Reply to Gaver Cancel reply