What is CFML Good For?
There are two ways you can look at CFML. One is as a set of training wheels that allows someone with little programming experience to build working applications while they learn enough to port to a "real language". The other is as a RAD application development language that allows any programmer to build compelling web applications more quickly and cost effectively than they could in any other language . . .
Historically I would say ColdFusion was definitely the latter. There are many CFML developers who could easily use other languages but choose CFML instead. It's a dynamic language that allows you to deploy applications on the Java Virtual Machine (JVM) with a solid tag based templating language and (soon) a complete scripting language for writing your model code. Two years ago there was simply no credible competition for dynamic RAD scripting on the JVM so CFML had an excellent value proposition for developers irrespective of their skills. Along Came Groovy
And then over the last year or so I noticed a trend. Sean Corfield, Joe Rinehart, Brian Kotek and even Ray (the CF Jedi) Camden started to use Groovy for some of their business model code. Barney Boisvert introduced his CF Groovy library. Then Doug and the team at Alagad mentioned that they were going to use Groovy for their model in future. I had to wonder "what is this Groovy and why are so many top CF devs starting to use it?"
After working with both Groovy (a programming language) and Grails (a Rails influenced convention over configuration framework based on Java libraries such as Hibernate, Spring and SiteMesh) I now believe that they allow experienced developers to build web apps more quickly than CFML + (CFML framework of choice) currently does. Of course, it depends on the details of the use case and the background of the developer, but while I still think CFML is much easier to learn, I don't think it is any more productive than Groovy and honestly for a lot of apps, CFML is currently less productive than a corresponding Groovy/Grails solution.
Does it Matter?
OK, so Sean and a bunch of "rocket scientists" are gonna go use another language. Who cares?
If the best CFML developers leave, we're going to be left as a language for beginners, and the fact is there aren't that many beginners building important web applications today. We *need* people promoting initiatives like cfSpec for Behavior Driven Development, ANT for automating build tasks and MXUnit for Unit Testing, and if all the guys doing that start using other languages that won't bode well for the future of CFML.
Why Fast Beats Easy
I love that CFML makes hard things easy, and I think it should always continue to do that. It allows us all to write simple procedural scripts when we need them and makes it very easy for new developers to get started with CFML. But I also think it needs to make experienced programmers faster - here is why . . .
The Problem with cfmail
When they first came out, tags like cfmail and cfquery were revolutionary. A single line of code and you could connect to a mail or database server without worrying about the plumbing. It meant that every time you wanted to do a query or send an email you saved a bunch of time.
However, if you're building well architected OO apps, these days you probably find that you don't use either of these tags very much. You probably have an ORM like Transfer handling your db access and a custom built NotificationService that you call to encapsulate all of your mailing activities so you can easily add logging or other business rules around all of the notifications that your apps send out. If you do that, does it really matter whether the framework author (whether it's your framework or a third party) had to write one line of code or ten the one time they implemented the query or mail functionality?
A Change in the Web
At the same time, web applications are changing. They are becoming more business critical and need to be more maintainable, testable and better architected. As such, most companies are now increasing their budgets for web applications and the smart ones are looking for developers who understand and use best practices like TDD, automated builds and Continuous Integration to deliver maintainable applications that will grow with the business needs. Most such programmers are polyglot (they can code in multiple languages), and quite frankly the time they spent in honing their skills with TDD, their IDE of choice, understanding Continuous Integration, OO patterns, best practices and the like dwarfs the time it takes to pick up the syntax of another scripting language.
For such developers, they need a language with frameworks and tools that allow them to build maintainable applications more quickly and cost effectively, and with a vibrant community of other professional programmers also interested in using best practices to build their apps.
So, What Should We Do?
For the average ColdFusion developer it makes no sense for them to go out and learn Groovy and Grails. It isn't just learning a new language - it is entering a new world of Java servers and WAR files and libraries like Hibernate and Spring as well as the different syntax and IDEs. Most CF devs are not going to be able to do a one month pilot project in Groovy and Grails and to deliver a production ready app.
However, there are many things in Groovy and Grails that are attractive to experienced developers, and we need to bring those back into CFML so you can get your feet wet in the bigger Java world without giving up the frameworks, syntax and community that you know and love.
One of my goals with Railo is to make sure that we deliver a language that is both easy to get started with *and* productive for experienced developers who might otherwise choose something like Groovy. I think that is how we will ensure the future for the CFML community.
One thing some people have asked me is whether I think Railo is good for the community. I have thought long and hard about that and I believe that it definitely is. However, if you want to know why, you'll have to wait for tomorrows posting (yeah - I'm done for today so you can actually get some work done now :-) ).