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).
30 responses so far ↓
1 jason dean // Dec 13, 2009 at 10:51 AM
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
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
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
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
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
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
8 Mike Brunt // Dec 13, 2009 at 4:14 PM
"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
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
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
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
"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
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
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
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
@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
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
19 Micky Dionisio // Dec 14, 2009 at 8:45 AM
20 Sean Corfield // Dec 14, 2009 at 8:46 AM
@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
22 David // Dec 14, 2009 at 12:08 PM
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
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
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
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
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
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
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
Perhaps this could increase the usefulness of cfml?
30 Sean Corfield // Sep 12, 2010 at 9:06 AM
Leave a Comment