Should you use CFML for new projects? I do.

  Follow me: Follow Bruce Kirkpatrick by email subscription Bruce Kirkpatrick on Twitter Bruce Kirkpatrick on Facebook
Mon, Apr 08, 2013 at 10:55AM

I think people would choose CFML because they don't know how to program very well and want to get things done quick. CFML may be the fastest way to prototype something on the backend. A lot of modern apps are using javascript more now, so that part of the work wouldn't be wasted.

Why did I start to use CFML?

My previous employer choose CFML because he wasn't a programmer and usually hires young inexperienced people who may never have worked professionally before. When you are rushing through new custom projects every few days, you don't concern yourself with building "applications" - or at least they didn't. I tried to correct their flaws by adding functions, objects and a shared code-base.  It's a bit easier to deploy a shared codebase with CFML thanks to mappings, the shared memory scopes and the framework for Application.cfm/cfc.

Why did I continue to use CFML?

I am using CFML because when I had a choice between PHP or CFML at that fast paced company, I saw that the Coldfusion 5/6 platform was helping me get the work done faster or better at that time.  Even though hosting ColdFusion is not free, developing it is, so thankfully, I could dabble with things at home, and I often spent my weekends doing just that.

I continued my work on Coldfusion and then Railo since then and I'm not looking to stop using it. I continue to build everything on CFML unless there are edge cases, and then I use shell scripts or php.  I change language for specific reasons usually.  When I want to have unreliable / insecure things run outside the Railo process in the most common reason.

For example, its easier to run PHP as root (cronjobs) to perform system admin tasks, that are securely disconnected from the Railo app. I don't build substantial code with PHP, because a large library in PHP is MUCH slower performance.  It's quite difficult to improve php performance since it uses individual processes for each request that are designed for having a short lifespan, whereas Railo/Coldfusion exist as a single process that lives potentially forever.  

PHP Fastcgi attempts to solve the short lifespan by giving you a pool of processes that don't need to spin up from scratch, but then you losing the shared global state you can have if you use the apache mod_php approach.   So the fastest PHP approach is not as secure or losing some other benefit.  

When using CFML, your cpu simply does less work when all redudant code is no longer needing to run due to being cached or pre-processed.

Already have a solid library and experience on another language? Good, stick with it.

If you are an already experienced programmer, it doesn't seem like you'd choose CFML exclusively if you didn't have any code written with it. You'd have very few "geeky" reasons to choose it and all your geek friends would fiercely disagree or not care about languages.

Open Source vs Proprietiary Software

Choosing open source vs proprietary is a more important decision to make. Does your team need commercial support or do they want to hack on things themselves? Do you want familiar windows GUI or command lines, etc.

Short term license costs may be a big consideration for someone just starting out with the language. My software budget is usually close to zero. It was quite painful for me to buy Adobe Creative Suite 5 for $1800. Buying ColdFusion license is certainly another major cost even for the standard edition.  So this is part of why I switched to Railo.  But I could only justify using Railo in the end because of the excellent stability, compatibility and free support from its development team and the community.  Railo is more then free open source, it just does everything better especially if you already know CFML.  At the moment, you still need to use a lot of ColdFusion resources to learn things, but that's okay.

Everything besides Creative Suite is pretty much good enough as the free version now aside from your development machine operating system, which is generally more affordable then ever for Mac or Windows. Having a big team paying for the nicer features of Visual Studio is extremely expensive, but then the labor costs are still way more. You might not always be to afford/justify staying on the latest version, so then you'd wish you had used some other language potentially where you don't need to keep paying to use it.

You might have to deal with old software issues, old os issues longer the proprietary way. My open source stuff is always latest version on development and production and it's pretty sweet. My Windows and Adobe stuff is usually on a slightly older version and they have more problems because of that. For example, Adobe Photoshop CS5 on Windows 8 requires the hardware acceleration to be reduced to basic settings and Dreamweaver CS5 is fairly unstable for me with CFML files (Odd that PHP/html/js/css files never crash it though). Illustrator is losing my workspace settings sometimes. Pretty annoying for software I paid so much for.

Debugging / OOP Tools for CFML are weaker, but not critical to productivity.

Free CFML tools are currently behind tools for other platforms and Railo debugger is not free, so it's somewhat incomplete in comparison to PHP and other languages on the tools side.  However, CFML is so easy for me, that I get by using just Dreamweaver.  I never ran debugging sessions on Coldfusion (debugging is included) or Railo (requires fusiondebug license).  

I also dislike running Eclipse (cfeclipse / builder / etc) since it makes me more unproductive compared to Dreamweaver and it can be unstable at times depending on what extensions you have running.   In Dreamweaver, I often quickly upload small changes to over 100 sites.  Very few apps let you do that with the simplicity of Dreamweaver while still having support for PHP, Javascript, HTML, CSS, and CFML.

Someone who can program well might choose ASP.NET or Java since they can do all their geek concerns so much better.  Or perhaps another dynamic language built on top of their virtual machine which lets you integrate with them like CFML does.   I don't need to explain why ASP.NET or Java are "better", go read someone else's blog for that.   Nearly everything including CFML is built to run on the CLR or Java for good reasons.

A language by itself doesn't define whether your business thrives or not

Making money really isn't about elegant code or languages. It's about meeting customer expectations, deadlines and making some profit. The languages and frameworks aren't going to build the app for you. It's quite painful to build code in more verbose / technical languages - you are often only doing it to gain performance and scalability benefits or to tap into hardware APIs. Every time you add complexity, you are adding a lot more time to debug and make progress.  

Another language would be cripplingly slow for me to use after having been used to the rapid pace of CFML for so many years.  I'd be spending a lot more time on geek concerns instead of writing code.   Perhaps once my core library is done in the new language, it will be easier again, but its hard to justify spending years to get there for what may only be a little bit faster performance and more elegant code.  

Hiring a CFML expert is hard, but do you really need one?

Sure, there may be fewer experienced CFML developers available to hire now, but anyone who claims to know programming should know CFML with a very short learning curve.  It will most likely only be an issue the first 2 weeks, and then they'll be productive.  Your business will not die because you asked someone to use a different language then they are used to.   Now other developers may feel like this is a waste of time to them to not use PHP or something else because it doesn't help their "career"/"resume" as much, but they should be thinking about helping your business if they are going to be an employee.  You should try to create an environment where they are excited to work on your project.    Will a non-CFML developer quit because you asked him to write CFML?  I'm not sure.    

It is important to know whether you can continue to be productive as a company if you lost certain employees.  People who frequently switch to another company to earn more pay or experience are going to destroy your company if you let them build arcane / complex technology in a more difficult language your team doesn't understand.  I've seen people who are uber-confident run down the path of "I can build that" in "my favorite language", and then less then 6 months later, they have moved on to another company and the people left behind have to maintain it.   It's likely that some bad code they leave behind in a simple language like CFML will be easier for others to maintain.  

The company should standardize and probably reduce the amount they depend on experts.  No one wants to pay double for something, including labor if they can help it.    If you have code reviews and some company-wide conventions, this kind of problem is probably going to happen less frequently.  Using complex / low level languages in a rapid environment is probably dangerous unless your business depends on high levels of performance and integration only possible with those solutions.

I work pretty hard to provide tools so that non-experts can perform most tasks.  For the, I just make people wait or reject helping them in order to focus on our core priorities.  One of the biggest mistakes you can make as a web developer is to accept projects across widely diverse industrys and feature sets.  You need to figure out your long term goals and stick to a more narrow feature set to be able to compete against bigger companies.  Try to avoid the urge to take every opportunity that comes your way.  It usually just makes it harder in the end.

In web apps, disk overhead is harder to solve compared to language performance

So much of the performance is based on whether your app is using the disk or not.  The language overhead is usually far less noticeable once you've successfully eliminated I/O usage.  Changing database technologies is much more useful then changing languages.  At the moment, I'm working on moving some search features from MySQL (I use MariaDB - a drop in binary replacement) to Sphinx search server right now because that's the only way to speed up some of my real estate search features further.  I also continue to utilize more in-memory caching in Railo and later with Nginx's proxy cache.  

Things that are easy to do with CFML and MariaDB are harder in other languages to get "right".  Sure you can do shared memory in PHP, but it's slower then Railo because of interprocess communications and there is a lot more boiler plate code in PHP to do anything - very geeky level of control.   Most other newish languages/frameworks favor convention over configuration.  CFML has always been simpler and less "low level" - it was ahead of its time and maybe still is.  The original concept of encapsulating code with HTML tags was pretty clever and it really is still useful despite having plenty of object oriented and functional programming features in the newer versions of CFML engines.

Other dynamic languages are inferior to CFML from my perspective

To me, CFML is better then Ruby on Rails, PHP and many other dynamic languages because I have a ton of fast code written with it, I use all open source software, and I've automated most common web development tasks. When you don't have all that available for your environment/language, you'll be spending a lot more time to get things done. Relying on third party code for everything is pretty scary. A lot of people build on PHP frameworks or Wordpress and it's kind of hard to maintain stuff you didn't write. You may have huge security problems you don't know about. You'd probably struggle with other people's bugs and documentation most of your day instead of feeling like you're in control. Scaling out to many domains could be very difficult to optimize on a platform mostly designed to be a single installation. I'm 99% sure PHP caching solutions are much slower then CFML, ASP.NET and Java solutions.  CFML has the easiest caching options I've ever seen in a language - my favorite CFML feature is the application scope.  CFCACHE is pointless.  Just wrap CFSAVECONTENT tag around something and throw it in application.mycache=mycontent; and you're done!

Ruby is known to have a lot more overhead, but that continues to improve.  I really don't have experience with Ruby, but Ruby on Rails is probably more interesting to look at then PHP for a new developer.   I'd wonder how Ruby could be better then CFML in terms of being productive and building a fast performing app.   They approach things differently, but with common goals to CFML probably.  CFML tends to have 1 way to do things and it decides on the implementation details for you many times especially with I/O (http, email, database, filesystem) and predates Ruby on Rails, so potentially there are more resources for CFML if you need them.  Ruby is popular because they have done better marketing it perhaps.  Ruby on Rails proposes compelling reasons to use it and a lot of recent framework have copied them so if you wanted to do things like Ruby on Rails with CFML, you have the Cfwheels framework as an option. 

Does it matter in the end once you've built a complete app which language it was written with?  Probably not,  CFML, PHP and Ruby would all be a valid solutions to many web app problems.  I can't tell you how hard it is write Ruby, but it's very simple to write CFML.  I think PHP is much more tedious / verbose to write compared with CFML.  You might be able to learn CFML in just 1 week and have things memorized your first month using it.

Proprietary solutions tend to change for the sake of profit, not because they should.

If you choose the Microsoft ASP.NET route, you'd have to be concerned if they'll try to replace your knowledge and tools every few years for something they thought was a better solution and something that might not be compatible with Mono. Open source software more rarely drops compatibility / replaces technology.

X popular language isn't going to stop me from using CFML.

I can't say CFML is definitely the right choice for everyone, but I'm confident you'll code faster in it and having fewer bugs to deal with.   If being productive is more important to you then choosing a language by popularity, then download Railo and my upcoming free open source CFML project, Jetendo CMS, when it is available to get started.

Why do you use your favorite language? Comment below:


Bookmark & Share



Popular tags on this blog

Performance |