I already know that this post won’t be popular with my close friends, but I think it needs to be said anyway… Don’t worry, this isn’t a “ColdFusion is dead” article.
I was recently asked to sit down for lunch with two computer science professors from two different schools in my area. For the most part, I was in “a fly on the wall” mode as these professors talked about various things such as how they catch people copying code, to how they teach good memory use, etc. This wasn’t a formal meeting by any sense, but rather just a meeting of two friends who happen to work in the same profession.
About half-way through lunch, I decided to ask about using a more stable language, like ColdFusion (CFML) to teach web programming. Currently one of the schools teach Python (and considering Ruby) and the other teaches PHP for their courseware. After both chuckled at me, I dove into my Adobe taught ColdFusion isn’t dead, ColdFusion has a growing population, ColdFusion has some open-source alternatives, etc. Both sat there and soaked in my sales pitch. One of the two even used to use ColdFusion on some side work in the past.
“It’s not about the servers — it’s truly about the language.” spoke the gent from the larger school. “For a formal, introductory computer science class, ColdFusion [CFML] really doesn’t offer us anything that another language does. And it adds in a lot of complexities and guessing that make other languages easier to teach in the classroom”
As he explained his position, it started to soak in to me — ColdFusion while really easy to pick up and learn teaches some really god-awful practices. And if you take a look at the ColdFusion community at large, it seems to be a real mess. Some of the great points from his argument :
- CFML is not a typeful language. For the end user to not be able to specify to the language/compiler that you want to store a String vs. a Number can be troublesome and confusing to both sides. What is often worse is that to force ColdFusion to choose a particular variable type is very awkward and more-or-less a hack.
- There is no good CFML debugger. If you do your work in the current Official CFML editor by Adobe (Dreamweaver) there is no debugger. You have to install another, 3rd party application (Eclipse) to do your debugging. Even then, it is cumbersome, and not really feature complete. How much memory is this CFC using? Why am I getting this response from the Query? These are the questions that the debugger still fails to answer properly.
- The documentation is poor. The LiveDocs, while OK, are very un-organized and seem to be very short on examples. The community is good at sharing examples, if you can find them. The Adobe search engine is a joke on their site. There are only 4 current books, by two authors (although, one plus to this is they both live in Michigan).
- CFML, by its design will fight you in implementing the most common design patterns. Lets face it, most of the MVC frameworks are a hack. In fact, when you take a look at it, most frameworks that exist for ColdFusion — even Adobe’s own Model-Glue are exceedingly complex because they have to implement so many workarounds to get their pattern to work.
- Available Open Source / Free / Alternative engines are not 100% compatible. Even BlueDragon, the engine that has implemented the most compatibility, is only about 90% there. This is a huge disadvantage if you use the “there are other engines out there” argument — most, if not all, examples and documentation are written for the Adobe engine.
- Some features are just some “black box”. This is one item that raised a huge concern, while being a huge advantage for the regular business community. Programmers, specifically students want to know how things work. They want to know the nuances of why FTP would be a sessionful protocol, rather than something like LDAP. These tags/engines are essentially black boxes with ColdFusion, with very limited visibility as to what is happening on the back end — all we know is that they ‘work’, and get the job done.
Some of these things are changing in future versions of ColdFusion, I’m sure. Others are just breed from the history of ColdFusion, and for the regular community, that’s not a bad thing. For example, does a web / CFML programmer really want to know how the POP protocol works? No! That’s why they use ColdFusion!
So parting from my experience, I do ask the question — where SHOULD CFML be learned? That is a really tacky question, one that is really hard to answer. From the above, CFML shouldn’t be chosen to be taught in a formal programming class, but how about in a web programming class? Rather than teach HTML, how about HTML and CFML? Should CFML be taught at a community college? How about at the high-school level where programming theory is not nearly as important? What are your thoughts?