An Architect's View

CFML, Clojure, Software Design, Frameworks and more...

An Architect's View

Why CFML? Why not Java?

December 13, 2009 ·

David Tannersyn commented on my blog post about MFG.com taking three years to overhaul their web site. He's interested in a balanced argument as to why anyone would choose CFML over Java in this day and age. Here's David's comment, with my answers interspersed.
I spotted your comment on the Tech Crunch, MFG.com article (among many other CF advocates), found your blog, and had a look around.
The TechCrunch article received a lot of commentary from CFers, much of which bordered on fanboi-ism - which we as a community do tend to slip into because of our passion for CFML. Some of the comments were downright insulting (to TechCrunch and to MFG.com) which might be a whole bunch of fun but doesn't do our image much good when viewed from outside our community. Given some of the heat in the comments, I'm glad David still took the time to come here and ask questions - many folks reading those comments probably just wrote us off!David continues:
It is clear that you have a much more solid programming and architecture background than I have in diverse development languages. I feel compelled to ask you a question after reading the some-what over the top comments from the CF community. I hope you do publish this post as it would be great to get more feedback from the type of people that would read your blog.
Well, I know many of the same people who commented on the TechCrunch article also read this blog so if folks comment on this post, try to be more balanced and level-headed than what we saw on TechCrunch, OK? If we want other folks to take CFML seriously, we need to respond pragmatically and calmly to questions and criticism rather than just piling in...
I have worked in a number of software houses, and also have some experience in asp.Net, Java, and a good number of years in CF. In the past there was no doubt that CF was the avenue for a quick time to market, scalable and fast site .
So, before anyone tears into David in the comments here, note that he is a CFML developer and he recognizes the benefits that led to the rise of ColdFusion...
My question/thinking: In Nov 2009 why recommend Coldfusion in good conscience for a new project or a career when Job postings for ColdFusion developers are remarkably low compared to Java and .net, it will unlikely be found on a university syllabus (is it taught anywhere?) while Java and .net are ubiquitous, and has even a lower take up outside of the USA (about zero take up in non-English speaking countries) where Java is thriving. This all seems to be the symptoms of a dying technology. The job postings are very, very key for those starting new projects or careers. Also, the frameworks and capabilities of CF are getting so similar to Java why not use Java, and ensure you have resources to work on your project in the years to come?
If you look at the job postings in isolation, it doesn't paint a very good picture of ColdFusion's health, but the reality is that a lot of CF jobs are filled by networking, personal recommendations and word-of-mouth. CF jobs are also filled internally with "non-programmers" slowly transitioning into CF developer roles - because CF is so easy to pick up and has been designed to make even non-technical people productive in a short amount of time. Evans Data - an independent research company that analyzes IT trends by surveying a very broad range of people in the industry - has estimated the number of CF developers has grown steadily to nearly 800,000 which includes a huge leap in numbers since Adobe acquired Macromedia. That's based on developers who self-identify as CFers - not download numbers, not something Adobe cooked up. I know independent CF contractors who are fully booked for months ahead and referring leads left, right and center. I get contacted by recruiters all the time asking for referrals for CFers (for positions that often aren't posted publicly). I refer them to user groups in their area (so if you are looking for work and you are not a member of your local user group, you may well be missing out on job opportunities!). Adobe are also working hard on the educational sector. ColdFusion is free for students and faculty for use in education. Adobe's curriculum is freely available for anyone to teach. There are universities and colleges teaching CFML - not too many right now, admittedly, but it is a steadily growing number. As for Java and .NET being ubiquitous, dynamic scripting languages (and other specialized languages) are on the rise with some high profile companies basing their entire infrastructure on Ruby, Python, Scala and so on. Increasingly, these "new" languages are targeting Java and .NET to leverage the platform ubiquity (I say "new" since many of these currently 'hot' languages are actually as old as CFML!). CFML also targets the Java platform so CFML runs wherever Java can be found (and, with New Atlanta's BlueDragon.NET, also natively wherever .NET can be found). CFML is no longer just a niche, proprietary application server but a rapid application development language and framework that runs on top of ubiquitous technology. CFML is also no longer limited to one vendor, with two free open source engines available that are bringing new developers into the CF community from the PHP, Java and .NET communities. Don't believe me? Railo surveys folks downloading the server and we've published numbers supporting this expansion on the Railo mailing list. So, for me, it's easy to recommend CFML for new projects because it's a powerful, dynamic scripting language that allows people to rapidly build complex web applications. Recommending CFML (alone) as a career path is definitely a little trickier. I never recommend anyone be wedded to a single language and I've been urging CFers to become polyglots for years. Even Java has a shelf life and is slowly becoming the next C++ (a language still thriving but subject to questioning within its own community about its long-term survival). Microsoft has a history of changing technology out from under its developer community and forcing them to learn new languages to survive - so C# is not a safe bet for a long-term career either. CFML is over ten years old and the community is still growing and the language itself is still evolving and each engine is adding innovative new features. The bottom line is that the more languages you "speak", the more employable you are likely to be. As an adjunct to that, the more your experience includes a variety of approaches - including OO, design patterns and so on - the more employable you are likely to be. Back to David:
My assumptions:
  • I am focusing on very dynamic, constantly changing websites that are there for the long haul, and development teams greater than 2 resources that will have rotating over time - the site will need a framework, coding standards, releases processes, and scheduled refactoring i.e. real, maintainable websites (the goal of any website regardless of its start).
  • The level of experience of the CF developers and, say, the Java developers are at an intermediate to senior level. They know their stuff and have a good solid background in the type of website above i.e. real, experienced programmers who are concerned about processes and standards that will see the site through a number of years (the goal of any developer regardless of their language).
For the first bullet - "dynamic, constantly changing websites" - you definitely need a language that supports that speed of change. Java is not that language. That's why dynamic scripting languages are on the rise and becoming so much more sophisticated. Because of CFML's ease of use, the sole developer, operating without decent processes has historically been the way sites have been built but that is changing (and the same criticisms can be leveled at PHP and Perl and...). Fortunately that is changing. CFML has a broad range of frameworks available now. CFers are recognizing that version control, testing, release processes and so on are very important these days. As Joe Rinehart observed in a Fusion Authority article, when web development became popular, developers seemed to forget everything they'd learned about structured client / server development! I think we saw a huge intake of new developers who actually didn't have any of that experience and the two worlds - web on one hand and enterprise software development on the other - tended to stay separate for a long time until learning web development became inevitable for many enterprise developers. Those "new" enterprise developers coming to web development brought all of their traditional process and control with them and it's taken a while for that to spread to all the other (web-only) developers... That shift in the web development community at large is also going to support your second bullet. Web development has grown up in the last five years (and a lot of CFers - and PHPers - are finding things have changed around them). My team at Macromedia - that rebuilt macromedia.com with ColdFusion MX 6.0 - were Java and C++ developers. They were used to standards, version control, formal bug tracking and release processes, with dedicated QA teams, multiple staging server environments and all the trappings that go with enterprise development. They adopted a CFML framework eagerly (Mach-II because that was really the only choice for OO developers at the time). It took me a few years to realize just how atypical my team was! Finally, I think one of the key things we need to bear in mind is that when CFML got started, there were very choices for easy ways to rapidly build dynamic web sites. These days, there are a lot of choices. That alone makes it less of a slam dunk to recommend any particular technology over the others. We, as CF developers, know how powerful CFML is and we're a steadily growing community that survives on the back of that technology. At the same time, the web market has exploded and no single technology is dominant (despite the apparent ubiquity of Java and .NET - which are both platforms on which multiple languages run).

Tags: coldfusion

30 responses

  • 1 jason dean // Dec 13, 2009 at 10:51 AM

    Sean,

    Thank you for taking the time to do this. This is really well written and something I feel like I can show to others (including my employer) to help defend my position on CFML.

    You really made a lot of great points that even I, as a CFML developer, had not thought of. Awesome.
  • 2 walt // Dec 13, 2009 at 11:32 AM

    Great reading, Sean. Thanks!

    A few points that I agree with absolutely:
    1. If you learn only one language, you're not taking programming/coding/developing seriously. You HAVE to learn other languages just to learn how you can do things better. (my first CF code was atrocious, repetitive, disorganized, etc; I like to think seeing how other languages were organized helped me out some)

    2. Judging a language's strength by whether or not a school teaches it isn't really a good indicator. Is PHP that widespread in shools? Python or Ruby? (of course, I'm asking this without knowing off the top of my head if any of those really are pervasive or not in schools, so if they have become so, bad point, sue me)

    3. Why not use java instead of cf? Ok, why not the other way around? Start off with cf, then use java when you feel cf isn't quite handling something as well as java? Yes, ok, that's what a fanboi would most likely say.

    My experience has been that CF is always a good starting point, then you use other tools as necessary. But that's me.
    Good stuff, Sean!
  • 3 Sean Corfield // Dec 13, 2009 at 11:37 AM

    @Walt, I'm sure PHP is used for web development courses in some schools but I don't know what the 'norm' is for web development courses in general. ASP.NET is probably common in institutions where Microsoft goes in and gives the school a ton of free software (Microsoft's general approach when it wants its technology used somewhere!).

    I didn't really touch on using CFML with other languages in a single app so your third point is well made. My current main CFML project is actually using Scala for a portion of the project where the dynamic nature of CFML didn't give us enough performance but we wanted a more expressive and more compact solution than we could have achieved in Java.
  • 4 Kai Tischler // Dec 13, 2009 at 2:17 PM

    Hello Sean and Blog Readers !

    My questions are:
    - I'm aware of Barney Boisvert's CFGroovy project; is there something comparable for CFML and Scala available already ?
    - Many technologies/frameworks/approaches support only Java and/or .NET explicitly; out of the top of my head I know that I can access the Java and .NET universe from CFML; but can CFML also be accessed easily from the Java and .NET universe ?


    Cheers and Tschüss

    Kai
  • 5 Sean Corfield // Dec 13, 2009 at 2:25 PM

    @Kai, a prototype JSR-223 adapter for the Scala interpreter was built as an experiment about 18 months ago but it's not an official project and I don't think it was ever completed.

    Scala compiles down to Java bytecode, of course, and that's how we're integrating it, via an ant task to build and deploy a JAR containing the compiled Scala classes.

    As for accessing CFML from Java, there is a CFCProxy built into CF8 and Railo but it is still pretty darn ugly to invoke CFCs from Java - and it only works for Java code running in the same Servlet context as the CFML engine itself (because CFML engines are tightly bound to the Servlet container).
  • 6 Mike Chandler // Dec 13, 2009 at 2:28 PM

    You said: "For the first bullet - "dynamic, constantly changing websites" - you definitely need a language that supports that speed of change. Java is not that language."

    Why is Java not that language? An application built to be versatile and extensible in Java can be changed rapidly to accommodate frequent changes.
  • 7 Sean Corfield // Dec 13, 2009 at 2:53 PM

    @Mike, scripting languages have evolved precisely because many developers do not find Java suitable for the fast-paced world of web development. If you want to build web applications in Java, fine, feel free to do so but a team using a scripting language is likely to outperform a team using Java in terms of productivity every time.
  • 8 Mike Brunt // Dec 13, 2009 at 4:14 PM

    Sean, as always this is a very well written article, thank you. I have a question regarding this...

    "and it only works for Java code running in the same Servlet context as the CFML engine itself (because CFML engines are tightly bound to the Servlet container)."

    Are there alternative languages that are not, if so can you expand a bit, thanks?
  • 9 Sean Corfield // Dec 13, 2009 at 5:36 PM

    @Mike B, not quite sure what you're asking here?

    Are you asking whether there are other languages that can call CFML outside of a Servlet context? The answer is no - because CFML is tied to the Servlet.

    Or are you asking about whether other popular web scripting languages can be used outside of a Servlet context? The answer to that is yes:

    Ruby, Groovy, Python, Scala and many other languages (including Perl) exist as standalone languages that can be used for general purpose scripting or development - independent of Servlets and the whole HTTP request / response idiom.
  • 10 Kumar // Dec 13, 2009 at 8:16 PM

    Very insightful post Sean. I myself learnt Java as my first programming language, including leaning JSP for web development. I had also worked with ASP3.1/VBScript during college for a web application.

    But with my first job out of school, it was ColdFusion, and it has been a blast. The speed at which I can perform some of the tasks with ColdFusion is amazing. And I was amazed at the speed at which I was able to start coding in ColdFusion.

    I also agree, that as a developer, knowing multiple languages is very good.
  • 11 Micky Dionisio // Dec 13, 2009 at 9:15 PM

    "...but a team using a scripting language is likely to outperform a team using Java in terms of productivity every time."

    That's a blanket statement. Productivity of a team is not measured by the technology stack alone so you can't say "everytime". That's misleading. Productivity is measured by a lot of other factors both technical and management related. You said it yourself in this article,

    "CFers are recognizing that version control, testing, release processes and so on are very important these days."

    It's those points you mentioned along with others like development management, code quality management, QA and hosts of other things that measure productivity. Not just the fact you are just using a scripting language.

  • 12 Sean Corfield // Dec 13, 2009 at 9:37 PM

    @Micky, you say:

    "It's those points you mentioned along with others like development management, code quality management, QA and hosts of other things that measure productivity."

    No, that may impact quality but not raw productivity.
  • 13 ziggy // Dec 13, 2009 at 10:27 PM

    You didn't really answer his first point even if you can offer some tips on how to find cf coders. The point remains that it is MUCH easier to find other coders, especially overseas.

    Hopefully the answer will be different after 5 years of Railo, openBD and a future free Adobe version ;-)
  • 14 Allen // Dec 13, 2009 at 10:59 PM

    There are many good points. Personally, the question I'd ask people is if they want to be a software engineer or not. It's more than whether or not Java or CF will be around in 20 years.

    One minor point of contention, in terms of jobs keep in mind that just as CF has a lot of jobs not posted, the same will hold true for .net and Java. So it's not really an argument in favor of CF to mention that. A lot of recruiting has shifted from ads on Dice or Monster to recruiters surfing networks on LinkedIn or even Facebook. So it's valid to point out that using those ads isn't a great way to judge the size of the market. But there's nothing that would indicate CF's any different when it comes to that.
  • 15 George Bridgeman // Dec 14, 2009 at 3:11 AM

    "For the first bullet - "dynamic, constantly changing websites" - you definitely need a language that supports that speed of change. Java is not that language."

    I don't think that's entirely true as it's not just a language problem; it's influenced by the frameworks used and code-base present as well. You don't give a supporting argument so I'm not sure what you're basing that statement on.

    For a seasoned Java Developer, with a good domain model built in Java and using something like Spring's MVC framework, changing the website quickly and easily is definitely possible. With the latest version of Spring (the upcoming version 3), most of the time you won't even need to go through and modify MVC config files as it's annotation-based. Add to that the fact that (at least to me) writing Java code is generally quicker than ColdFusion because you've got an IDE with features like code-completion (when writing CF code I miss ctrl-space like you wouldn't believe), awesome refactoring tools and other such time-savers, and the gap gets even thinner (I haven't tried the latest build of CF Builder but wasn't overwhelmed by the first version).

    There's certainly a higher barrier of entry with Java than with ColdFusion, but once that's overcome (which might be key to your argument although you didn't mention it), if it is slower and/or harder to maintain such a site with Java than ColdFusion it's not by much unless you're using dodgy frameworks, working with questionable code or don't have a good handle on Java itself.

    George.
  • 16 Allen // Dec 14, 2009 at 7:46 AM

    "No, that may impact quality but not raw productivity. "

    @Sean,

    What's the use of writing code quickly if it doesn't work?


    I agree with the original statement assuming all things equal. For example, some new language could come out that really KICKS butt and I can write 12% more code a day. But if it doesn't have a nice unit testing framework, etc, etc a lack of those sort of things would easily chew up any gained productivity.

    Then again, is that an issue for most half-way common scripting languages these days? Or am I making a point that's theoretically true but really doesn't mean much?

  • 17 Micky Dionisio // Dec 14, 2009 at 8:35 AM

    Raw productivity? I don't even know what that means. If your definition of productivity is determined solely on the number of lines a developer can churn out and how quickly they can do it then we have two completely views of productivit. So lets agree to disagree.

    Anyway thanks for coming out and saying some of the comments on that article were offensive to MFG and did paint us like a whole bunch of fan boys.

  • 18 Mike Chandler // Dec 14, 2009 at 8:36 AM

    If version control, enforcement of best practices, unit testing, and QA are in effect on a ColdFusion development team just as they are on a Java development team, then we're comparing apples to apples. In that case, you can't say either one of the teams outperforms the other.
  • 19 Micky Dionisio // Dec 14, 2009 at 8:45 AM

    @allen - nope, you are spot on.
  • 20 Sean Corfield // Dec 14, 2009 at 8:46 AM

    @Mike, with the same practices in place, a CF team will still outperform a Java team I expect because CFML is a higher-level language than Java and requires a LOT less code to get stuff done. The same is true of other scripting languages that either contain higher-level constructs or a richer library. Empirical evidence supports that claim based on teams I've talked to and reports of productivity on mailing lists (not just CFML vs Java either).

    @Micky, not lines of code, no. That's a useless measure. Time to market is a better measure.

    @Allen, I didn't say code that didn't work. The processes affect quality but that was not my point.

    It seems I need to be clearer on the process issue. I commented that CF teams are improving their processes these days - since some people think CF developers are not "real" programmers, that needed to be said. That has nothing to do with overall productivity (and indeed better processes might improve productivity). Improved processes bring improved quality. There are plenty of Java shops with poor processes too - but awareness and tooling has had longer to improve there and has caught on faster due in part to more CS background folks in that sector of the industry, in my opinion.
  • 21 Allen // Dec 14, 2009 at 8:59 AM

    Thank you for clarifying that, Sean.
  • 22 David // Dec 14, 2009 at 12:08 PM

    The "Jobs available" argument is spent. Yeah, there are more .Net and PHP jobs out there, but there are more developers available for that work too. Those positions, in my view of the market, pay less, and well they should - it's a race to the bottom and the supply is plentiful.

    ColdFusion is niche, and niche pays more. You want PHP/.NET developers to realize the power of CF, embrace it, see it as a viable language? Be careful what you wish for!

    I'm in the minority on this, but I really don't care what other developers think of CF. I don't care if its considered as a "real" language. I want it to be seen as a solution, and if a company is looking for solutions, they give CF a fair shake, based on the needs it fills.

    Leave all the syntax mumbo jumbo out - you want an enterprise ready J2EE productivity suite ready to roll, right out of the box? Well, I have one of those for you, and the name is, ColdFusion.

    Cheers
  • 23 ziggy // Dec 14, 2009 at 8:47 PM

    >>ColdFusion is niche, and niche pays more.

    That's a reason for management not to choose CF to develop a website. Employees cost more. Harder to find and cost more. What sane manager chooses that?

    Of course the site might cost less or be better done overall because/if CF has advantages, but that doesn't change the other point made. It just means you better prove you're a lot more productive than others if you're already hard to find and asking more per hour. If the overall job cost is higher, well, then you really have a tough sell to make on the future advantages of having your code in CF not something else.

    And who's going to waste time contacting user groups just to find someone to do a website? It tells people they need to choose an alternative.

    Think realistically from the other perspective.

    This is the marketplace created by 10+ years of high-priced servers against the alternatives. Maybe an Adobe/community sponsored service providers website would help a little in the meantime?
  • 24 Joel Stobart // Dec 15, 2009 at 2:16 AM

    "about zero take up in non-English speaking countries" -

    but. I work in Brussels, Belgium (French/Flemish). Admittedly the organisation speaks English but there are more CF jobs here than in London. More than in England I might speculate. Some are English speaking, others not.

    If the English speaking world is codeword for "America", I would get it. ColdFusion is magnitudes of difference (or has the appearance of) being bigger there than here.

    Where counts as English speaking? India, China, hell 90% of the internet is English. Captains, Pilots, and anyone involved in international trade is English speaking. Note that Japanese car companies internal language is...

    Any way, I don't get the international point at all.

    As for the jobs argument, we are in a recession. Lots of people want jobs. Some of them are clever, interesting people, employ those people.

    - Joel

  • 25 David // Dec 15, 2009 at 7:05 AM

    Ziggy - by that rationale, why would any "sane manager" choose Java, or Websphere, or Weblogic, or Oracle, or...the list goes on. If price is the ONLY driver, we'd all be using LAMP, and nothing else.

    Sane managers deal in terms of requirements and total cost of ownership. They put themselves in a position to meet demands of the business.

    This isn't about calling someone "to do a website", it's about delivering business applications, business solutions, and that means selecting the right tool for the job.

  • 26 ziggy // Dec 15, 2009 at 8:11 PM

    >>If price is the ONLY driver

    Except I didn't say price is the only factor. In fact, I clearly said what you have to do if the price is higher. ???

    As I did say: "Think realistically from the other perspective."

    >>I don't get the international point at all.

    Joel: I'm in Asia and almost nothing CF going on where I am specifically. I have never actually heard it mentioned by anyone. Same in many areas around the world.
  • 27 Jason Dean // Dec 15, 2009 at 9:45 PM

    @ziggy,

    I am in America, a land of a little more than 300 million people, and I have been developing web applications for a little over 3 years and I can honestly say I have NEVER actually heard anyone mention doing a project in Ruby, Scala, or Python where I an specifically. So those languages are not really in us in the United States, right?

    Now, surely you do not think that no one in America is using Ruby, Scala or Python simply based on my observation of my local area, right?

    So would you really suggest that we take your feeling of how popular ColdFusion is in Asia (an area with BILLIONS of people) based on your feeling of its popularity in your area, or even the areas and people you have been exposed to?

    I am not trying to be rude, I simply want to point out that regardless of what the feeling is in any specific area, it can be completely different only a short distance away.
  • 28 Russ Michaels // Jul 11, 2010 at 6:22 AM

    You are right Sean, the CF community do often tend to be a very terse and offensive bunch and the comments they post are often arrogant and not constructive and seem to just come across as "CF is the best and you suck", which does nothing to paint CFML or its userbase in a positive light.
    But this is not something that is isolated to the cf community, linux fanboys for example tend to behave even worse towards windows users, and linux fanboys using CF, well lets not go there :-)
    Perhaps if people accepted that the technologies they use are not the centre of the universe and are not the only or even best solution for every problem then the different communities would be able to inter-communicate a bit better.

    I think the problem with most peoples view of CF is that they do not know the history and are basing their opinion on the current trends that they can see right now. The rest of us know that CF has always been a niche, there have never been many CF jobs on job sites, never been much in the way of cf software and things have always looked kinda dismal from that perspective, yet CF has kept going till version 9 and things haven't really changed much,, good or bad to the casual onllooker. However what has changed and what should be obvious is the massive growth in cf communities, there are now shedloads of cf community sites, blogs, tutorials and more that clealry show that people are using CF.

    I would however have to say that anyone who advises someone to learn CF as a career decision to get a job in web development is being an irrisponsible fanboy. Anyone looking for a job is clearly better off learning Java or PHP as their primary language as they are far more likley to get a job in this area. This has got nothing to do with how much you love CF, it is simply a fact and an obvious one at that.
    For someone looking to become a self employed web designer/developer or for developing custom solutions, then suggesting CF would be a viable suggestion for all the reasons we know well, I would always choose CF as my favourite web language to learn or use I think.

    However this still has its caveats, such as lack of ready made apps and scripts.
    If I did not know any web languages and I spent some time researching the options, I would quickly find that if I learn CFML then I will pretty much have to write everything from scratch bar a small number of exceptions ( yes I know all about Ray Camdens apps, but this is a drop in the ocean compared to php). But if I learnt PHP then I have a huge selection of ready made shops, forums, community apps, and anything else I could imagine, many of which are totally FREE. This would certainly make my life easier, allow me to work even faster and make more money out of my clients.
    So it rather depends on your requirements, yes CFML is obviously better for RAD, but you can't beat an app that is already made.

    With regards to colleges teaching CF, well I know for sure that some do, or give students a choice to learn whatever they like as I have always had students using the FREE Coldfusion hositng at www.cfmldeveloper.com, sure the userbase has always been fairly small as this is UK based, but it hasn't really changed much over the years, users come and go but the number of active sites generally remians the same.
  • 29 Danny Armstrong // Sep 9, 2010 at 7:41 PM

    I've always wondered why there aren't more ways to leverage the cfml language from within Java. Any insights on how this could be done? It would mean invoking cfml without responding to an HTTP request, eg no URL, FORM, or CGI (etc) scope variables would be set.
    Perhaps this could increase the usefulness of cfml?
  • 30 Sean Corfield // Sep 12, 2010 at 9:06 AM

    @Danny, that is planned for Railo 4.0 - the ability to run CFML outside the Servlet context and therefore the ability to write shell scripts in CFML etc.