A Challenge for ColdFusion Developers...
This is a callout to all ColdFusion developers young and old whether your brand new to ColdFusion or you have been working with it for years--whether you are a seasoned programmer from another language or you have only ever written a Hello World application, I have a challenge for you.
In response to both Sean and Brian's posts about the community focusing on non-ColdFusion developers, I wanted to have some what of a discussion about this.
I strongly feel that one of the main issues that is holding back the ability for ColdFusion have this huge involved excited community is the lack of today's standards that it enforces in software development. Don't get me wrong, I think that ColdFusion 8 is a great step ahead for ColdFusion than past versions as far as being extremely integrated with other technologies like Java and .NET as well as incredible PDF document support, AJAX, XML etc. However, the one thing that I really feel ColdFusion is missing, is the promotion of good software design out of the box.
I do not know of any developer that got started with ColdFusion that got right into learning it in an object-oriented manner. I personally did not learn it this way. In fact, it was until I took Java programming courses in college that I had the desire to program ColdFusion in this manner. I think part of the issue lies in the available documentation for ColdFusion, such as published books and articles. Rarely have I seen object orientation promoted in the early phases of learning ColdFusion. Yet in other classes that I have taken on the very languages of Java, C#, C++ and Visual Basic, every single one of those classes was centered around programming in an object-oriented manner.
Now I know that ColdFusion has always boasted in being the language of choice in having a very small learning curve and being very powerful at the same time. In my opinion, that is also it's weakness. Yes I will admit it was great in the beginning when I was first learning it, to be able to pull up database queries in a snap and send stuff back to the database with ease. Now, however, after I have worked at Boeing and have had to deal with some legacy applications that were built in ColdFusion I am not a happy camper.
I am thrilled that there are the communities centered around the frameworks for ColdFusion such as Mach-II, Fusebox, and Model-Glue, but there needs to be an even stronger urge to those that are new to ColdFusion to also take that extra step and learn how to develop ColdFusion code in a structured well designed manner.
I will say this as my final remark because I have a feeling I will get comments that allude to this anyway, perhaps it is the fact that ColdFusion is not meant to be an object oriented language and that is not it's end goal. If the goal of ColdFusion is to be a rapid application development language then all these are moot points. I think that if ColdFusion is really going to succeed in the next 10-20 years, than it better be prepared to be setup with the same architectural structure as other languages like C++ and Java. Ten years ago, we did not build Internet applications the way we do today, but let's face it, the Internet applications today are much more powerful and do a lot more than they used to. It's time we start building them right.
Please share your comments, thoughts, constructive critcism, ideas, etc. I really want to know what the community thinks at large. Get this out to your friends who are new to ColdFusion and encourage them to post. What is missing from the community, what can be improved?
Thanks.



Oh good, I am so glad that someone else is there with me on my thoughts. I was kind of half afraid that I would be blind posting this hoping I was not going to get torn down.
You brought up some very valid points. Are we pushing CF to be something that it is not? And yes, I want us to have the same kind of community that .NET and PHP and Ruby developers have. I would even go as far to say, I challenge our community to be as intense, expressive, motivated and excited as the Ubuntu community. Now there's commitment.
Although it took me some time to fully immerse myself in the online CF community I now have about half a dozen blogs that I read daily and provide me with all the news and support I could ask for (apart from that elusive intermediate procedural-to-OOP resource)!
I had to get full immersed into PHP a few years ago when CF was not an option for a project I was working on. I was surprised at the time, like you said, how watered down it was.
CF should be the same way. I agree that one of CF's major strengths is how easy it is to get into the language, so while we don't want to lose that, we also don't want to spend most of the time teaching people about the language features only to introduce CFCs as something "advanced." Introduce things "correctly" (IMO anyway) from day one.
I took a Flex course recently that drove this point home. After a very simple "Hello World" example we immediately dove into custom events because they're at the heart of well-architected Flex applications. The same goes for CF--CFCs should be introduced very early so it doesn't turn into a huge mindshift later down the road.
We need to do something about this in that we need to get developers to recognize that CFCs are integral part to developing code...and not just stop there. We then need to show them how CFCs fit in to good object-oriented design.
An artist never starts off creating masterpieces. The artist learns techniques, how to apply those techniques to different medium, etc. Then, after having found the techniques and medium that they favor, that's when they hone their skills, and eventually make incredible works of art.
I feel that any programmer has to (learn / be taught) the proper techniques. The programming languages are tools that one leverages to create internet goodness. Each language has different strengths and weaknesses. Sometimes you choose the language based on your proficiency, sometimes the language is chosen for you.
I guess after all this rambling, I agree with your basic premise, there needs to be a stronger drive in the CF community towards creating tutorials, example applications, etc. that focus on "the best practices".
I've seen plenty of posts on creating MVC applications in most of the frameworks, and that's all well and good. But once that "eureka" moment hit me, and I started <strong>really</strong> using CFCs as objects (instantiation, inheritance, etc.), it's really hard to even look at some of the old code that I wrote.
http://www.iknowkungfoo.com/blog/index.cfm/Primers...
Now that MAX is over, I'll be adding more very soon.
I was at Brian's BOF sessions and had a lot of fun. Hopefully next year we can get more time for them.
However, I think we as a community, need to be careful not to put ColdFusion into a box. We have to be very careful not to over-commit to the OOCF ways of doing things and forget that one of the biggest draws of ColdFusion is its strength as a rapid application development language. Thats one of the things that pulls a lot of newer developers to ColdFusion. We as a community have to conitinue to support that as well as do a better job of transitioning those newer developers to doing things in an OO manner.
@Russ - I fully agree that we need to ensure that CF stays at the top of its game with RAD. That doesn't mean, however, that it should be crappy code. You can do good RAD without any of the frameworks out there. As long as you are still using CFCs and functions to structure out good reusable code, you are already doing it better than the developer who writes it all in their CFM pages.
* CFML pages: for displaying data, creating forms, etc. Not for business logic except when related directly to the view.
* CFCs: contain business logic and as a rule don't output anything. (I know I'll get some blowback on that comment, but that's my opinion!)
* Custom Tags: great for reusing view logic, doing common formatting, etc.
That's just to get the discussion going. In short, I don't think this is an either/or situation where we sacrifice ease of use and low barrier to entry for "doing things right." Even if it's just telling people from day one to put queries in CFCs as opposed to CFML pages, and to call the method that returns a query from their CFML pages, that's a huge step in the right direction.
As a side note, I believe both methods have their place and both are necessary for CF to thrive in the future.
There's probably a book in all of this just waiting to be written...might only sell 100 copies, but I would buy it!
* I'm 100% for separation of logic from presentation, etc.
* I'm also 100% for making sure the applications are 100% portable, but it can be done without diving into OOP.
My code is far from straight procedural and OOP. If anything, I think I found a comfortable balance between them. Sometimes I wonder if everyone likes making everything more complicated than it needs to be.
ColdFusion applications, as they stand today, are not portable applications. They are only portable to other ColdFusion instances which cost a lot of money. Take PHP, ASP.NET, LAMP etc, which are completely free. If a company wants that, the products are free. This is of course set aside from hardware configs. We are just talking software here.
I am really hoping this doesn't get into another "You're condescending about my procedural coding so I am not willing to listen" kinda debates. The truth of the matter is that the other major players are all OO. If you go looking for a serious job, they want a basic understanding of OO at the *very least*. To be blunt, this war has already been fought, and procedural programming lost.
When it comes to the times of one of my developers needing to back up another (due to scheduled vacations or other reasons), I can truly say that it’s very tough for them to simply jump-in at times and take over. However, for my folks that provide web application solutions using frameworks like Mach-II, Fusebox, and Model-Glue, it’s much easier for other OO-skilled programmers to jump right in and provide support where needed – all while being very transparent to the customer (important for a manager).
I also find it very easy for developers to write procedural spaghetti code without using a good software design and framework. I know many other companies that have these same challenges and managers are looking for OO skilled folks to join their teams.
I am also hoping that the authors of CF books start sponsoring good concepts of OO. Like Kyle posted, I too have rarely seen object orientation promoted in the early phases of learning ColdFusion.