Today, me on twitter:
now considering myself primarily a rails dev rather than CF as it’s so much more productive. Let the good times begin.
So, how did this come to be? How did I find myself effectively transitioning from a tool* which I have used for near on 11 years, to the relatively new, and very different Ruby on Rails? Well, essentially it comes down to a rule I set myself about six years ago, which I had adopted from the superb Pragmatic Programmers, and in particular, one of their books. In essence, the rule is that, as a developer, you should strive to learn a new language each and every year. The reasoning behind this is a) that you become more marketable, b) you have more tools in your box and c) you’ll find yourself adopting some of your learning to your current work in the way of new techniques etc.
Over these years, I’ve been looking at things like Javascript (learning it properly anyway), Java, Flash, Flex and so on. Back in 2006 I first looked at Rails and have kind of been looking at it ever since. Recently I’ve found that it makes more sense for most of the work I have on at the moment rather than anything else in my toolkit, so I’m using it more and more each day hence the tweet.
So, why am I blogging this fact? Just to tell everyone?
No.
Recently there has been a lot of posts comparing ColdFusion to technology X. These posts are generally written by ColdFusion developers (no-one ever seems to want to compare themselves to ColdFusion for some reason), and unfortunately more often than not, show some naivety about other technologies (specifically in the comments that normally follow).
Therefore, I’m making a little call out to the ColdFusion community. I would like to set a 24 hour challenge for anyone willing to take it. The challenge is this:
1) Spend at least 24 hours (even a hour a week) learning and using something other than ColdFusion. It can be what you want, but must be a tool that achieves the same end result as CFML. Some suggestions are PHP, Rails, ASP.NET (MVC), Groovy / Grails or Python / DJango.
2) Post a comment below stating who you are, and what you’re promising to try out.
3) Post your own blog post (or comment here) when you’ve done your 24 hours about how you found the new tool you spent time with, and what the benefits of it are. Also mention what the benefits of ColdFusion are over what you chose.
Hopefully, by doing this, you’ll all learn something that will make your day to day development better by adopting ideas taken from elsewhere, and also generally become a little more savvy about some of the other options out and about. You may even find, like me, that there are tools out there that fit you better.
* Yes, Fanboys**, a tool – these things are nothing more, nothing less
EDIT: After talking to a couple of people I thought I should clarify the term ‘fanboy’. There are a few people who believe that their tool of choice is the be all and end all, almost a way of life and they will not listen to others. These are the people most would refer to as Fanboys, and the ones that would probably benefit most from the above challenge. 95% of people are absolutely sound.












Yeah, CF fanboys, they like to criticize other technologies not even knowing them. And CF is not even a language. It is just a library on top of servlet container. I really don’t follow their way of thinking. Neil, I’m sure you noticed that, most of so called “CF developers” are just what others call “5 taggers” tho they use 8 tags: cfif, cfelse, cfelseif, cfloop, cfquery, cfabort, cfdump, cfoutput.
@grover probably a bit harsh, but I think I see what you mean..
@grover “most developers” are just playing at being programmers, across languages. Very few people (relative to the total number) /really/ dig in there, and, like Niel, look at the big picture, try other langs, etc..
At least that’s been my experience.
Believe me, there are quite a few “CF developers” that are so far beyond what you call “taggers”… well, I guess I take offense to the “most of so called” stuff, as I’ve seen “so called” across the board– it’s part of the “tech industry”, as far as I can tell.
CF, for me, was a great bridge to other languages/tools/ideas. But I think any language would do that for *real* programmers (not that I’m one). I still do most my stuff in CF (sorta like Groovy, it makes some hard stuff pretty easy and fast), but using other tools is just plain *fun*, and most times gives me insight into how CF could be better.
@Neil Groovy and Grails has been a lot of fun. Been doing it for more than 24 hrs now, and, like everything (apparently), some stuff I really like, and other stuff, not so much.
Have you tried JRuby?
The PP book is wonderful, mad props to those dudes.
Anyways, guess that’s it. Big UP to trying new stuff and being “open”.
Well, I saw grover’s post and had to reply. Yes, I currently program in cfml. Over my many years of programming (going back to the early 80’s) I’ve programmed in php, PERL, c/c++, FORTRAN, Assembler and various basic’s. I’ve also done analog and digital circuit design and learned to program the 8088 processor back in the day. Just because you like your language there is no reason to criticize others because they currently program in a language you dislike. You obviously have no respect for someone that programs in a language you dislike and it appears you won’t bother to find out what else they know. So to you I am just a 5 tagger because currently I program in CFML.
Cheers,
Great idea Neil, but 24 hours doesn’t seem long enough to me. Whenever I learn a new language I commit to writing a working application in it–doesn’t matter what it is (address book, dvd/cd/book collection manager, whatever), but I personally don’t think you get a real feel for something by just reading a book and dabbling, all the while thinking “but in CFML I could do it this way …”
So I’d call for total immersion for a real test. Pick an application you’ve been meaning to write, or find a charity or organization that needs an app but doesn’t have the time/money to write it themselves, and use that as your testbed. Without that kind of commitment and clear end goal I think people will get bogged down in silly syntax differences instead of focusing on how to cross the finish line.
I use CF and PHP in my day job. I’m glad I learned PHP, because I think it forces one to think about how complex some of the tags that are used in CF development. For most, CF is just the 5-8 tags, but for an experienced CFML developer, its the ability to write complex code quickly with the least amount of effort (just like RoR). Also, one thing that most non-CF devs don’t realize is the community that revolves around CFML.
Great post Neil, congrats on learning Ruby (on Rails). I hope to make it my next language to learn.
@Neil,
Interesting post. I have a question for you – having nothing to do with how fast you get the work done, out of curiosity, do you feel like a better programmer using “Ruby on Rails”?
By that, I mean are you fully satisfied with your applications from front end to back end, all the way through? (regardless of whether or not the applications simply do what the client wants).
@Matt – Good point, although when I talk about 24 hrs I talk about building something, not reading a book – but that’s just how I work, I know other people are different. Saying that, I’m not setting a constraint of 24 hrs, just a guide.
@Ben – 100% yes to both your questions. One of the things that I am finding about RoR is that Ruby is a fantastically expressive language where there is practically no wastage of any kind. Plus the end result can be read almost like English. There’s also a fair amount of stuff in the framework that means you don’t have to worry about lots of stuff because it’s already there for you. The biggest thing for me about RoR is the speed and precision of development coupled with the sheer amount of stuff you *don’t* have to do.
If anything, I feel that due to the opinionated nature of Rails, that the product I end up with is generally of a better, more consistent quality than anything else I might write in CFML.
Maybe Ben, you should spend a day with Rails :0)
“There’s also a fair amount of stuff in the framework that means you don’t have to worry about lots of stuff because it’s already there for you. The biggest thing for me about is the speed and precision of development coupled with the sheer amount of stuff you *don’t* have to do.”
Sounds like some other languages and frameworks I know of…
@grover: Discounting machine code, all languages are a productivity layer on top of another language. And while jokes about “5 taggers” or “8 taggers” are pretty funny, we all know that’s only a sign of someone who is a beginner developer, not a trait of “most so called CF developers”, and it’s the same in any other language. When I was a kid and started learning BASIC or Pascal or C I’m sure 90% of the statements and functions I used could be summed up in a similar number for the first little while, and it’s the same with *any* language when you don’t already have a wealth of programming experience. However the wild generalisations you make are pretty sad, really…
I agree with you in regards to developers closing themselves off and becoming focused solely on their ‘chosen’ language.
I have ALWAYS been quite the reverse. I’ve been a CF developer for about 5 years, previously working with PHP, scraping the surface with Actionscript and Flash.
Over the last few years, I’ve made sure that I’ve played around with and learnt new / different technologies, and can now happily say that I’ve developed Flex applications, for the web and AIR, further PHP development with Classes and functions, Actionscript 3 Classes, jQuery, event some Java and .Net (gasp)
From everything I have learnt and continue to learn, not only does it increase my marketability and skillset, but also helps to highlight certain aspects of development that still help and increase my skills as a CF developer. Understanding Classes and methods in AS3 and PHP have further increased my understanding of CFCs, working with Flex and AIR have rapidly increased my knowledge of MVC frameworks and methodologies.
So, I suppose I’ve already done my ‘24 hour’ stint, and will continue to do so. I would assume that most ColdFusion developers would have also at least glanced at other technologies to expand their skills and knowledge, as they’re not all completely blinded by the CF love to not look elsewhere.
As far as I’m concerned, that is one of the points of being a developer. To develop in whatever you can, and to constantly learn new languages and skills.
It’s always a good philosopy to keep learning and growing as a developer. I’m currently learning AJAX (jQuery) and Flex is also on my list. However, I really don’t see myself learning another server-side language. A while ago I gave PHP a shot and it didn’t click with me, and hontestly, there’s really nothing that I haven’t been able to do with CFML. “Marketability” as far a getting a job isn’t really an issue for me since I’m a freelancer and my clients don’t really care (or usually understand) what server side technology I use as long as I deliver something that works.
Of course — being an expert a all languages would be great. But as Matt W. said — it takes a real investment of time to really learn them. If you have that kind of time — great! Me — I stuck with CFML to save my time and I’d rather spend my Saturdays playing ball with my son than sitting in front of a computer.
Just throwing in my 2 cents here. As always with these kinds of post comparing x to y, I compare the opinion with mine – which is that all these technologies do 99.9% of the same thing. There’s nothing I can do in .NET that I can’t do in Java, there’s nothing I can do in ColdFusion that I can’t do in Groovy, etc…
In short, I agree that learning a new technology on a regular basis is sound, practical advice. However, I always balk at promoting one technology over another because the same endpoint can be achieved with any of them.
It all comes down to total cost of ownership within an organization. A good example what my current employer is going through. In house, we have two major development tools: .NET and ColdFusion. There has been talk of just using one across the entire company in order to have a common “language” that our applications speak.
In my opinion, this is short sighted, because having two development technologies is not that large of a hurdle – in the extreme case in which these two “camps” would ever need to communicate with each other – because the tools and mechanisms exist to make access to these systems homogeneous.
@Neil,
Sounds interesting. Do you think what you’ve learned in Ruby on Rails can be ported over to ColdFusion? Or do you think that ColdFusion is not capable of producing the same sort of elegance?
@Ben – a bit of both I think. Some elements of Rails could be brought to ColdFusion, although CFML itself could never match Ruby due to the nature of the language.
However, if someone were looking to port Rails to ColdFusion, I would question why. Why not just port yourself to Rails?
The CFWheels framework uses alot of the Rails conventions. Its not a 1 for 1 port of Rails to CFML but more of an adaptation of it. They do a good job of blending “the rails way” into CFML and keeping with the strengths of CF.
Personally I love Ruby as well. I have been coding ColdFusion for almost 11 years but decided to learn Ruby and Rails about 2 years ago. The language is a thing of beauty for sure in its syntax.
I think the biggest problem I have since learning Ruby is that I find myself hating the verbosity of CFML now. With all of my clients still primarily ColdFusion, thats tough sometimes because you find yourself saying, “I could have done that with so much less code in Ruby!”.
grover your an idiot. you cant generalize all cf developers are taggers. I have programmed cf for 10 years and have a formal computer science background. I have also coded in c, c++, basic, assembly, cobol, and VBA. Cold fusion is a great language, maybe you havent taken the time to compare the differences between a cfif and a cfcase, and writting your own user defined functions in to pages, or the speed of a page written with several arrays or one mulit deminsional array, but cf does it all, and allows for faster and quicker turn around time then most languages. Why learn something else? Oh yeah does flex count?
@Greg: coldfusion is not a language
if you think so you’re an idiot.
Good post and good points, Neil.
I’ve been a CF-only guy for a very long time, mostly because there’s been no need to look anywhere else (and because I am so busy just doing the work that is ‘in my face’ at any moment, I don’t have much time for exploration).
But under the surface there’s this nagging feeling that i really *should* be at least semi-fluent in php, if nothing else. Now after reading this, I am very interested in Rails (not to mention Grails, and Groovy… ). Definitely need to do an all-php site at some point, just to keep myself alert (and humble I am sure!).
Can’t commit now – too much CF work to do! – but you’ve got me thinking, and inspired. Thanks.
@RussJohnson
>> I think the biggest problem I have since learning Ruby is that I find myself hating the verbosity of CFML now
that’s quite a statement! I think the same thing – about CF – when I have to dig through php or asp code!
( Note to self – find time to learn Ruby! )
Its funny, both these languages imho have the biggest “thumpers” of any i’ve ever seen. everyone thinks his/her chosen technology is the greatest, and cf/ruby people are by far the most opinionated.
With that said. i like your points Neil of any language being a tool, and we (as developers) have many (or should) in our chest. I think if you look and any language/framework/library you can achieve the same functionality as any other. So it seems all about preference. If your enjoying coding more in ruby great, if others are not fine. I thought the idea of pragmatism was just that, getting things done. So choose the right set of tools for you, your team, and the task at hand.
With the straight CF/Ruby comparison. Has anyone looked at JRuby. Its solid and compiles down to byte code just like CFML. So like cfml in jruby you can used java classes in jruby and jruby classes in your java. The same is true of coldfusion.
Personally i’ve been building on my knowledge of java, and working towards using both JRuby and a CFML engine on the same application server writing classes in both incorporating java libraries where needed. I find the stability and power of java most appealing of all and find more and more languages/frameworks/libraries being written ontop of it, its rapidly becoming the universal delivery envoirnment, just insert language of preference here:_____________.
…my two cents.
Neil, I would have taken this blog post seriously until you said “fanboys” that is just flamebating, and why CF developers specially? You are a RoR developer now, doing RIA as far as I know. No interest in CF. Great.
We all make our living one way or another, some with CF, some with Java etc. That doesn’t make people a “fanboy”. Simply using that word in an otherwise intelligent post really shows you up mate. Whats the agenda then?
@Mark – Fair points, although let me clarify a few things:
Fanboys – Unfortunately, as with any language there are some people who believe that whatever tool they use to build web apps with is a way of life, rather than a tool. Why these people do this I don’t know, but you’ll often see them defending something to the n’th degreee without any real evidence of a pragmatic viewpoint. It is this minority that I believe make us all look bad.
CF Developers specifically – It’s a community I know well, and one that I feel could raise it’s game. If we are to improve the perception of CFML, we need to improve other peoples perception of ourselves.
RoR development vs CFML Development – Just because I am now developing predominantly in Rails – the skills fairy hasn’t come along and sucked my CFML skills out of my head. I am simply using more than one tool. In some cases Rails will be a better tool – and in others ColdFusion. I am also an RIA developer – so does this preclude me from looking at the back-end?
I still have a healthy interest as it’s got me where I am today, and I will still be following it closely as nearly all of the legacy I have is CFML and I still work for a number of clients who want CFML which is absolutely fine in my book.
At the end of the day, Rails, CF, Java, Flex, Silverlight etc are all just tools – just things that you can pull of a shelf to achieve the end game in the easiest way possible. The most important thing by far is that the product we end up with suits the clients needs and desires and that we are not imposing a legacy that future development will suffer from.
Fair points Neil. I just think you could have come across a little less… antagonistic, but for clarification to readers, I know Neil and he is a good programmer and you should follow his advice. I program in and have programemd in (off the top of my head) : VRML, HTML, Perl, PHP, ASP, ASP.NET, C, C++, SQL (if you can call it porgramming), Java, Eclipse Java (trust me, its odd), oh, and something called CFML.
I shall take you challenge, I shall start up groovy and grails and post my findings on my blog (follow the link), and call it the NM challenge!
Neil, I think this would be a great exercise for someone to do on a regular basis. And I agree with Matt Woodward that spending time in the language and reference materials through the creation of an application is the best approach for many. I definitely operate this way.
Out of curiosity, what book would you recommend for someone wanting to try Ruby/Rails? What online resources would you recommend for Ruby/Rails. Folks may think the answer to this question is obvious, but you started with a heavy ColdFusion background. The things you’ve found valuable will likely be valuable to others.
as much as i would love to dive into rails, and have tried so many times, it’s very hard to do so since it doesn’t support some of the things I need it to do on a daily basis. For instance:
PDF creation – not there yet. sure prawn allows you to create pdfs from within ruby, but until the day when you can do this as easily as passing in html (like you can cf), it’s still too cumbersome.
GUID support – i use sql server as does probably tons of other businesses and developers around the world. the rails community looks down on anything ms, so while support for sql server is there, it’s lacking some things. in rails you can use migrations and validations for uniqueidentifiers (guids), they’re treated as strings, which can make for big problems.
IIS support – i know this isn’t the rails or ruby community’s fault, but let’s face facts, organizations use windows as their server operating system. right now there is no “formal” documentation telling how to setup rails to work under IIS. There are hacks using FCGI and mongrel clusters, but they’re just hacks, nothing you would use in production. Until rails can run under IIS the same way that CF and ASP.Net run under it, it will never get into the “enterprise”. hopefully when ironruby gets released this won’t be a problem.
i’m not trying to put down rails. i think it’s probably the most exciting thing to come along in a long time and i do plan to work with it at some point. however because of the current issues, it will have to be as a hobby and nothing too serious.
@Ben and Neil
rails is being ported to coldfusion as we speak and it’s VERY close to going 1.0. check out cfwheels.com
I remember a couple of years ago, one of the CFWheels developers was upset because they were getting no respect from the ColdFusion community. Why? Their framework wasn’t XML-based, it wasn’t like Struts, etc. I think he went on to say there was too much Java influence in the ColdFusion community, which is ironic in a way because a lot of CFML developers left Java because they didn’t like it.
My facts may be off a little. I hit 40 a couple of years ago!
@jeff,
my have times changed. i think leveraging xml in your framework, might have been the norm back then, not so much so now. personally i think we can thank rails for that. it was the first framework that got mvc right. do yourself the favor and take a look at wheels, you’d be surprises by it progress within the last year.
@Aaron very simple answer – Agile Development with Rails by the pragmatic programmers.
@Tony – if CFWheels is anywhere near as good as Ruby on Rails, I’ll eat my cat. Ruby is what makes Rails, not necessarily the framework
Programming is programming is programming. And one thing a programmer cannot do is remain static. ALL of the languages are evolving and require continual learning. However, if you keep changing languages, you can end up spreading yourself too thin. Too much time learning the entry level info and not enough learning the deeper nuances, controls, and abilities of your current language. It is like anything else in life, you can only get out of it what you are willing to put in.
By the time I got to coldfusion, I had already spent 6 years on C and 10 in Java. And one of the coolest things about coldFusion is it’s ability to ‘build’ on other languages. That really lifts a lot of limitations. Once you get past the syntax, logic is really the same, no matter the language. Ultimately, it is the job market that drives the language.
[...] reading the feedback to my last, apparently controversial, blog post about learning a new language to improve you own skillset I [...]
@neil
i accept your challenge. rules are simple:
you are to take the current project that you wrote in rails and port it over to cfwheels.
at the end you are to give us details on how the experience was.
if you find that working with cfwheels is anywhere as good as with working with rails, you are to eat your cat.
feline preparation:
feline is also to be force fed bacon for 5 days before cooking (strictly for flavor).
feline is to be baked in a 375 degree oven for 3 hours. and drizzled with bacon grease while every 30 minutes of cooking time.
I am primarily a ColdFusion developer, but I also love writing PHP. My promise is to spend at least 1 hour per week learning Ruby (and of course the RoR framework).
I’d also add a beginner/mid-level challenge to CFML developers who have used one framework only or have never used a framework. I know a number of intermediate CFML developers who stand to gain a ton by writing a small app using a (new) framework. Jumping to a different language may just be an exercise in syntax for some developers, where learning some good core concepts with a syntax they already know would be a great learning experience.
Even if you’re against frameworks for some reason, at least give one a try. Refuse to try an MVC framework? Okay, well at least take a serious look at ColdSpring! Check out the fantastic Quick Start Guide (by Brian Kotek, I believe): http://coldspringframework.org/coldspring/examples/quickstart/
FWIW, I think I’m up for the challenge. I spent the past few months building my first Model-Glue (3/Gesture) app, after years of Mach-II (preceded by a few years of spaghetti CF:), in which I also used some Transfer for the first time. I’m also currently swimming in books about Groovy, Spring, Hibernate and Object Oriented Design and Analysis. I hope to begin an application soon using CFML+Groovy+Spring+Hibernate.
Learning at this pace can be overwhelming, but incredibly fun and rewarding too!
Cheers,
Jamie