Below is an editorial I wrote for CFDJ about ColdFusion 8. Given the publication’s untimely demise, I thought it might be worthwhile to publish my article here.
Several weeks ago in the #coldfusion channel on the Dalnet IRC network we had a rather spirited discussion about some of the new features of ColdFusion 8. The discussion in particular focused on <cfimage>, and its related tags, and if ColdFusion developers actually needed such functionality as part of the product we have all come to know and love. In recent weeks, as I have heard public discussions by Adobe about some of the new features of ColdFusion 8, and as I played with some of these features as part of the public beta, I realized that discussion could have been about any number of features that are a part of ColdFusion 8.
I cannot remember where I heard or maybe read, it, but sometime ago there was some buzz in the community because a respected member of the community made a claim that most ColdFusion developers only use about 10 tags. I will admit, I may have the number wrong, but I think you can understand the point. There are 2 new tags, and related tags, that I think will bump up that number, <cfimage> and <cfzip>. I know that currently there are several products we can use for image manipulation, as well as for creating and using .zip files. I also fully understand that most of these products are nothing more than a wrapper for Java functionality available to any ColdFusion developer using ColdFusion MX or higher.
For a lot of ColdFusion developers, using any of these products, or Java itself, are not options. There are a wide variety of reasons, but one that stands out in my mind is ease of use. Some of the products that exist which perform tasks we will have in ColdFusion 8 are not easy to use. Learning how to interact with Java, or for some people, learning to use CFCs, might be enough of a hurdle to dissuade their use. It might even come done to the cost of learning these tools that limits their usefulness. Keep in mind the ‘easy’ is a relative term. If you asked the developers of an of these tools, or any of the OO or Java gurus who are part of the ColdFusion community, they will tell you these tools are easy to use, and may even think they are not needed. However, for a lot of developers, they are not ease to understand, much less use.
I was drawn to ColdFusion because it was easy for me to create applications my employer, at the time, wanted. I spent about a year programming an intranet application in PHP before discovering ColdFusion. In about a week, I was able to recreate enough of the intranet application in ColdFusion to persuade my employer that cost of the server licenses would be more than made up for in the increase in my productivity. It took me about 6 weeks to completely rewrite the intranet application into a ColdFusion application. How was it possible to take an application which took a year in one language, and rewrite it in 6 weeks using ColdFusion? The answer is obvious, ColdFusion is easy.
So, to answer my question, do we really need <cfimage> or <cfzip>? Yes, we do. We need them so that ColdFusion will continue to be easy. We need them so that developers who may not, or cannot, use third party tools for image manipulation can create more powerful and compelling applications in a fraction of the time. We need them so that developers who only have access to shared hosting and cannot invoke native Java objects can create applications they desire, and deserve.
This discussion can go beyond the coding features of ColdFusion 8. Do we really need server monitoring? A lot of ColdFusion developers probably do not work on applications so large, or heavily visited, that server metrics would even be on their radar. I must admit, the server monitoring tools in ColdFusion 8 are awesome. The amount of information you can collect about your server is astounding. To be able to view live data about memory usage, database statistics pertaining to slow running queries and stats about individual page requests is quite impressive, but is it necessary? I think so, because ColdFusion is not only easy, it’s powerful.
<cfimage> and <cfzip> make it easier to accomplish fairly common tasks, Server Monitoring gives us a tool we can use to streamline our applications. I think that looking at the Server Monitoring tools, even on the smallest applications, offers us something no other language, or application server, can claim, the server itself can help us learn to be better developers. By studying the database statistics we can see which queries are taking longer to run. This may lead us to look a little closer at our SQL statements to see if we can make them more efficient. By watching the data about page requests, we may be inclined to look at our ColdFusion code itself and see how we can code more efficiently, or even to begin caching practices we have otherwise overlooked. At the very least, it will give us an idea of where to start looking when we eventually have the chance to work on the enterprise level application that is having performance issues. The bets part is, we don’t need to install anything else, we don’t need to fuddle with third party libraries or products. All we need is access to the ColdFusion Administrator.
There are two other groups of tags that I think make ColdFusion both easier and more powerful. <cfexchange> and <cfpresentation> give ColdFusion developers functionality I am not sure exists in any third party tools, or can be easily recreated by the average developer using Java. I will admit, when we got our first glimpse of <cfpresentation> at CFUnited last year my response was lukewarm at best. Yes, I thought it was cool, but what purpose could it possibly serve? As I started playing with ColdFusion 8 and tried out <cfpresentation> I realized that it has a myriad of uses. With very little code, developers could create presentations covering a vast array of uses including new employee orientation, annual reports, online training and in-services for new products or procedures. <cfpresentation> makes it not only easy to create, but update, these presentations.
I know of quite a few developers who would love to easily include some basic e-mail functionality, via Microsoft Exchange, into their applications. I know that a lot of information can be gleaned from later versions of Exchange using <cfldap>. However, I think some might be more inclined to try and learn Java than muddle their way through LDAP and the directory hierarchy that exists in Exchange. <cfexchange> offers not only the ability to retrieve mail, contacts, appointments, etc from an Exchange server, but to create new contacts, tasks and appointments as well. I know of a handful of developers already working on applications that will mimic Outlook Web Access (OWA) functionality using ColdFusion 8. So now their intranet mail application is written in a language they feel more comfortable with, as well as having the mail application fit within the standard web template for their respective companies (I know this can probably be done now with OWA, but its ASP, or whatever flavor Microsoft is using these days, and what ColdFusion developer wants to punish themselves like that?).
I have not had the time to play with every new feature of ColdFusion 8. But I have made a point to try out all the features I thought were excellent additions to ColdFusion, as well as the ones that initially made me wonder, ‘What were they thinking?’ I can say without hesitation I do not think there is any new feature that does not add value to ColdFusion and to ColdFusion developers. Each new feature makes ColdFusion easier, more powerful or both. Whether you will use any of these new features immediately, or six months down the road, ColdFusion 8 gives us new tools to make it easier to create powerful applications even faster than before. Don’t get me wrong, there are some things I would have preferred over some of these new features, but each of the new features adds something to the language we have all come to love.
So, do we really need all these new features? If you want ColdFusion to become more powerful, yet easier to use, and if you want to become even more efficient at creating applications and making your application code more efficient, the answer is a resounding, ‘Yes!”