I've been following with some interest the discussion regarding a Coldfusion IDE that has been raging on CF-Talk since yesterday. Ok, maybe "raging" is a bit much. How about "simmering". The thread started when someone requested that CF-Talkers get the word out about a survey being done to determine how Coldfusion Coders use development tools. I blogged about the survey a couple days ago. Of course anytime you bring up Integrated Development Environments (IDEs) and coding practices you inflame the passions of the CF faithful. In the next post or two I will try to boil down the issues into some nice categories that may prove useful for discussion. Today's issues are:
Muse Note: My regular readers know that I love and appreciate comments - but topics like this always invite people to air pet arguments or grievances against this platform or that. Keep in mind as you comment that you are invited to do so as a guest. Be civil and reasonable - even if you are disputing something that I or another guest have said - thanks!
One issue that inevitably crops up when discussing any tool or software is it cross platform compatibility. Mac users in particular are very concerned that a software product be cross platform. Actually this is painting with too nice a brush. With their usual hubris what they really mean is that it's not fair that a windows application won't run on a Mac. With torch and pitchfork passion, what they really want is an entire world of opaque white and gleaming grey (and mice that are ridiculously small and impractical) run by hip 20 somethings with black clothes.... young men who can't help putting their hands in their pockets and saying "dude"... and young women with pierced tongues, pale cadaverous make-up and overpriced handbags who role their eyes at guys in mini-vans while saying "like" this and "like that" into their overpriced (but really cool) iPhones.....uh... Ok... sorry, but you can see how these issues sort of bring out the worst in people - even the Muse.
For the record I like some Apple products in spite of their often irritating, holier-than-thou users. I can't decide if I have Apple’plexy or Apple envy. Still, there are enough PC and Apple users in the world to make being at least dual-platform a laudable goal. Until there are more Linux desktop users I can see no reason to go out of the way to create a commercial product for Linux (they would just hack the serial numbers and post it online anyway). One possible middle ground is a product like an Eclipse based IDE. Such a product would be able to run in any environment supporting the JVM. Therefore, I am coming out in support of an Eclipse based CF editor - believing it might be the best of both worlds. You might ask, "what about CF Eclipse?" I think it is a splendid project and a dandy CF Editor. I fear, however, that unless something is a commercial product the impetus to maintain and expand it falls on too few people with too little incentive. I say that with no ill will toward Rob Rohan and Mark Drew and the other community members contributing to CF Eclipse - I applaud their effort.
The second issue that is sometimes mentioned is that Adobe already has a product that it promotes as a Coldfusion IDE. Dreamweaver (DW) has been around a long time and has garnered support and wide adoption. In fact, Ben Forta points out in CF Talk thread that inspired this article that as he travels around the country about half of the Coldfusion developers he meets are using Dreamweaver. I found that surprising. Since Dreamweaver is touted by Adobe as the Coldfusion product I would have thought that the number was more like 75 percent.
For Coldfusion developers Dreamweaver is a bit like the Clintons - either adored or despised depending on which side of the fence you are sitting. Speaking for myself and most of the developers working for my company we are in the "despise" camp (for Dreamweaver, not the Clintons). What is it about Dreamweaver that is so polarizing? The issues have to do with how you approach Coldfusion development.
People arrive at the Coldfusion camp from a variety of paths but, to varying degrees, they fall into two general categories. Let's call them "Technical" and "Design". The technical folks come from some branch of Information Technology (IT). Perhaps they have worked with some other web scripting language like PHP or ASP. Maybe they were hard core programmers using Java or .NET - or maybe like myself they came from some other technical field (Network Engineering) and Coldfusion was a tool to solve some specific problem. The thing that ties them together is that see technology from a practical point of view. They are likely to have an "operational" way of thinking. When approaching a project or task they ask:
On the other hand, design people come to Coldfusion from design and marketing fields. A good number of design folks actually come from print shops or marketing firms where their real job was high res graphics. Most of them have a inner eye for visual aesthetics. They are concerned with how things "look" and how the "experience" feels to the user. They often have some experience with HTML and possibly JavaScript. While technical people think in terms of "systems" and "applications" a designer might see a website as a collection of "pages". A technical person sees himself or herself as "modifying the code" whereas a designer might see himself or herself as "editing a page". Perhaps you think this is mere semantics, but the way these two types of developers see these tasks directly impacts the approach they take to coding.
Designers are much more likely to use a visual coding style while technical folks are much more likely to use a "ground up" approach that emphasizes structure. As a hypothetical example let's use a "Create/Update/Delete" tool (often referred to by the unfortunate acronym - CRUD). Let us suppose we must create a tool to do the following:
Our designer (let's call him Carl) starts by asking himself this question - "how many pages will I need". He comes up with a list. He will need a page with a form for adding a user, a page with a form for showing the users in a list and a page with a form for editing. Carl already has a site template. He opens Dreamweaver in design view and, using his template, he begins building his form. The form has name, phone, email, and other contact information on it. When Carl is satisfied that the form looks ok he creates another copy of it. This other copy is the one he's going to use for editing. He takes this second copy and changes the names of the button from "add" to "update" and makes a few other changes that indicate the form is really an update form. So far so good. Next he uses his template to create a page for his "list" view. Using the design view he adds a table with column headers for name, email, and phone number. He adds a few rows to the table with some sample data and styles it to his liking.
Carl now has three pages that look exactly like he wants them to look. These pages represent the three views he has imagined presenting to the user. His next task is to add some "code" to his lovely pages. First he creates a table in the database that matches the data from his form. Next, he adds a query that inserts the data from the form into the database. He adds a query that grabs all the data from the database for his "list view" and he edits his table code to use cfoutput and display the users in a list. He adds a query to get a single row of data based on the user ID (passed from the URL) for his "edit" form. He edits the "edit" form with cfoutput to contain those variables. Finally, he adds an "update" query to update the database from the "edit" form. Depending on his level of experience or sophistication (or specific requirements) he might add error handling, JavaScript etc.
My contention about Carl is this - as a designer he sees this task as reflecting his impression of how a user might experience an application. After he created his three pages Carl may have even thought to himself "I'm practically done".

A few more notes on designers. A designer is comfortable using his mouse to interact with his code. I have found that designers and coders use their input devices quite differently. Designers love those little property windows that pop up everywhere with drop downs and choices and tooltips. They actually like dragging and dropping and click select functions. These are the things that make them more productive. Since they are visual to start with, such things fit nicely into the relationship the designer has with his tools. Designers like wizards too. I don't mean Gandalf and Dumbledore - I meant the little popup step-by-step guided choices that create underlying code. Technical people often find that these things get in the way.
Now before we unpack how a technical person might approach this project I need to say one more thing about Carl. I know I said I wasn't going to touch on frameworks so let's just call this a comment on "code organization". Because Carl sees this application as three "web pages" he is much more comfortable mixing Coldfusion into his HTML. On the list page, for example, you might find the query for all the users right above the table displaying said users. You might say that Carl sees this application as three pages with some extra properties or functionality attached to them.
To Carl, adding data to the database might be on the same level as adding roll-over behaviors to the menu. In fact, Carl often blurs the line between "client side" code and "server side" code in his own mind. If you think that is unlikely, take a look at some of the email lists questions that occur from time to time about "How to access a Coldfusion variable from a JavaScript function." I'll wager that just adding that sentence to this article guaranteed another 500 visitors from Googling, novice designer types.
To put it as succinct as possible, Carl would see the above task as "Creating three forms and saving the information to a database table". Ask Carl what he was doing and he might say, "I'm making contact information forms." I would guess that about 50 to 60 percent of all the Coldfusion code that exists in the universe is written this way - largely by web designers who are using Coldfusion as a sort of performance enhancer for their web pages. Now let's discuss how the technical person might approach such a project.
The technical person (let's call him Warren) will spend more time outlining the "application" he is going to create. To him this is not a set of three pages working together. No indeed! This is an "application" with several "behaviors". It is designed to collect certain "data". These are the important words to Warren. He could go days without calling a web page a "page". Warren starts his project by figuring out what information he intends to collect. He then creates a table for that information in the database. He refers to this as his database "schema" (Carl rolls his eyes). Next, Warren outlines a CFC. The CFC will contain 4 methods:
As he is making this CFC he uses a test CFM to instantiate the object and test each function - dumping out the results. After creating his tables and CFC, Warren, like Carl before him, might be found reflecting that he is "practically done".
Warren now has a database table that reflects the data concerned and methods to handle all the data interaction. His next step is to build his two forms and his list view. His approach is to use a single CFM template to load his forms using Cfinclude. He weaves a controller script together that calls his methods based on what his user has done; using form and url parameters to control the behavior of the application and to determine what is displayed.
My contention about Warren is that he starts at the other end of a project. His concern is over how things interact and behave. His thought processes center around the work that the application is supposed to accomplish. He sees the bulk of the project as creating an "application" that integrates with a "database".

Warren probably did not use a wizard during the entire process. He spent his time indenting his code and determining the correct "typing" for all his variables. He might have looked for whitespace issues. He probably created an exception handler and he may have tested each column to make sure it updates and inserts correctly. Like a designer who labors over how to squeeze an extra 3 pixels into a div tag, technical folks sweat the details too - they are just very different details. I'm sure it would not surprise you if I told you that Warren's code did exactly what was advertised but it was butt-ugly while Carl's code looked fabulous but had some problems with errors.
Now before I use this example to comment on Dreamweaver I need to say a couple of words about Carl and Warren. Admittedly I am a Warren. In fact, as I'm writing this blog I am using Homesite and hand coding all my HTML formatting. But the truth is that there is a place for both approaches. There are, in point of fact, thousands of sites and applications on the web written by Carls that are productive and useful (the applications - not the Carls). In the task above it is quite likely that Carl would finish in 2 or 3 hours while Warren (bless him) is still pondering over his "schema". So even though I'm a Warren I understand that it takes all kinds to make the Coldfusion Universe go around. I would add that the only way to build an intuitive application that is also structurally sound is to have some of the qualities of both Carl and Warren. If you are building a team of developers you will be better served with 1 of each than with 2 of the same. Each brings something important to the table. Now let's talk about Dreamweaver.
Carl really needs something like Dreamweaver. He needs something that feels like an extension of his own aesthetic and visual approach to development. The wizards and property windows don't stand in the way of Carl. Instead they feel like a natural and intuitive way of interacting with his templates and pages. He "gets it". He loves an editor that is "appealing" and "intuitive" and has widgets like color panels and property panes.
For Warren the story is different. Why does he need a property window when he can examine the code directly? He'd rather read the help file and slog through all the options of a tag than use a wizard to obscure them. The "tag based" nature of CF is neither a disadvantage exacerbated nor an advantage mitigated by DW. Warren codes his behaviors and interactions quite separately from his HTML, JavaScript and CSS. His HTML code has some variable output code in it and little else (maybe a cfif here or there). Indeed Warren hates seeing any code that is not related to display in the HTML. He wants an editor with really good contextual help that is easy to use. He wants to control code formatting and indenting. He wants it to perform well for saving, synching and source control integration. He wants to see code on the screen - not widgets and panels. He does not want his editor doing "black box" things behind the scene that he does not explicitly ask it to do.
Excuse the Biblical reference but it's so appropriate here. The Apostle Paul said in 1 Corinthians 9:22:
I think Dreamweaver's last two or three versions are a crack at the same thing. The DW folks have given it the attributes of a great coding IDE and the attributes of a great design tool. Unfortunately I think that many of the attributes of the design tool still stand in the way of the technical coder. I think that while most design folks have great affection and loyalty to DW, most technical folks find that it falls short. In my view DW never really managed to get past its roots as a web page editor. The whole "Dreamweaver Template" idea certainly runs counter to the ideas of code separation. DW is replete with panels, widgets and property panes that get in the way. In short, I would have to say that for the "technical" developer DW is simply not up to the task.
So I think that moving forward we should acknowledge which group of developers we are trying to satisfy as we discuss the possibility of a "Coldfusion IDE". I contend that most design oriented CF programmers using Dreamweaver are probably quite satisfied and don't know what all the hubub is about. What we are really talking about is an IDE that allows those of us who are in the other camp to work with CF in a way that matches the way we code. I will have more on this topic tomorrow as I explore the next set of issues from the thread in a follow up post. In the mean time, let's keep those comments civil - or at least funny.
I really hope they don't try to come up with one solution for both groups.
I caught some of the thread on Cf-talk and actually started tuning it out because the arguments devolves into focusing on what folks "hate" instead of focusing on what we would *like*. For instance, your ridiculous and irrational Apple rant above...please, there are far too many Mac users out there right now for you to continue to lump folks into your overly simplistic generalizations. Interesting that you ask folks to be "civil and reasonable" when you are not.
On the other side we get the irrational Eclipse-haters. Yes, Eclipse isn't perfect, but the argument never focuses really on what they would like to see it have rather than just the simple fact that they "hate" it, we might get somewhere. Anyone who has used Flex Builder knows that you can build an excellent (even if not perfect) IDE based upon Eclipse. Has anyone actually found a "perfect" IDE for anything?
My point is...so we are looking at a code-editor....so what? What would you like it to do? Nothing you described above for "Warren" can't be done in CFEclipse. I am not criticizing that aspect, my point is though, what do you want it to do? What do you expect to gain from Adobe building it other than official support for an IDE? That isn't critical. I am really asking. I think that would make a much more useful post both on CFTalk and here.
A very thought provoking post indeed. You highlight two radically different perspectives in ColdFusion development.
I would argue that the offerance of a ColdFusion IDE is directly positioned at Warrens (coder). That being said, such care should be brought to tend to those needs. I find dreamweaver in design view, on the few occasions I've used it, consistantly does unexpected things, like delete an opening div tag when all I wanted to do was rename a nav item.
Such things are maddening to me. I want full control over my code and I am willing to hand code everything just so I am aware of whats going on. And so all side effects are caused by me, not a WYSIWYG engine thinking for me.
Make Dreamweaver the PREMIER tool for designers. Give me my IDE.
Also, to touch on an earlier point. Just because the software is build on eclipse doesn't mean it is available on all platforms with a JVM. For example, Flex Builder, built on eclipse 3.3, requires a special version for Mac, and isn't even released for Linux yet. Flex Builder is the tool keeping me on a windows platform right now. Imagine that, platform specific java tools. Wasn't the promise of Java "Write Once Run Anywhere?"
Thanks for the long detailed post. As an engineer, I often forget about the many designers out there working in ColdFusion.
DW
DW
Adobe just needs to look at those things that were done right in the past, whether they be pieces of code from Macromedia or Allaire and do it again in a 2008 kind of way and release them for both Mac & PC as they do all their other major software.
The linux users will figure out a way to run one of the two.
When installing Dreamweaver, for me it just works. A little site configuration and a CF8 tag patch and I'm ready to code and fast. I don't use the WYSIWYG interface execept to create an image map once in awhile. I love the quick and in-depth tag completion including the automatic forward slashes, the tag insight, a great selection of font and color coding, plus the ease of FTPing.
Now on to Eclipse, for me there is a huge curve. I must figure out how to navigate through the whole open source website structure and figure out the terminology. I must then find the CFEclipse website, read its instructions on how to install the plug in, and go through a multi-step process just to edit ColdFusion files, not to mention the CF8 update that must also be installed. For me, the color coding and font layout is not as readable without customization. I still haven't figured out how to FTP in the file explorer window. I keep getting this unknown error occured while updating my preferences. Also had to learn how to use the whole workspace/project setup. And I never did get the Flex plugin the load, forcing me to use the standalone version for now. Oh, and if I want to edit CSS, text, or JavaScript files, I'm off to find another plugin.
In conclusion, once again Dreamweaver just works (for me at least), while I feel like I have to go take a class just to learn how to use the CFEclipse IDE. I have very limited time, and hate to spend hours just learning how to use basically an enhanced version of notepad.
Sorry for my rant, but something really does need to be done.
@Dan - I agree with you on all points - and I was not aware that 3.3 requires a "special" version for te mac... thanks for the additional information.
@Jim - thanks for the input.
@John - yes... file management vs. "project managent" is another dichotomy I wish to address.
@Chris - While I agree with you regarding Eclipse, I'm not buying your viewpoint on DW. Compared to Homestie (aka CFS) I find DW to be bloated and finicky... and it forces me to do things in it's own way rather than conforming to the way I want it to behave. I have made 3 separate attempts at moving to DW - each of them involving more than 16 hours of coding. I have yet to be successfully productive. In the end it is probably just "too pretty" for me :) The most annoying thing about it is that it trys to do so much for you that it gets in the way.
For me the beauty of Eclipse is ideally you would get what YOU want via plugins. A common request seems to be FTP but for ME - I don't use it. I deploy to local servers via Ant. So for me FTP is totally unimportant. Why not make the entire editor plugin friendly? You want FTP? Get the plugin! You want framework support? Get the plugin! You want the bare bones ultra-fast editor - use it with no plugins.
Also remember - the Eclipse platform is open source - so Adobe could be REALLY good and contribute some things back to the Eclipse project itself.
Right now, I'm finding that development with CFEclipse takes about twice the amount of work as Dreamweaver to accomplish the same thing, largely because I take advantage of all the shortcuts it offers. But again, if I get comfortable with Eclipse, I'm sure that will not be the case. Just wish I had a little longer sunshine in the day to learn them all again.
So, it just comes down to the user's opinion, experience, and comfort level with each product.
I must say that once cfeclipse is in place and set up it is head and shoulders above DW (for the technical crowd). But the fact of the matter is that not everyone is our there running a local dev environment on their laptop, or dealing with some big SVN repo, using ant, etc.
Sometimes people just need to pull up a file on an FTP somewhere and do some work. CFeclipse leave a big hole on this issue.
Here's hoping either adobe or mark can some to the rescue, alas I wont hold my breath as it has been years now with no apparent headway on this front.
Otherwise the differences between DW and CFE are quite minimal to me. I use DW when I'm dealing with FTP based sites and CFE for source control work. I use DW in code view. The screens between both are pretty similar with sites/projects on the left, code on the right. DB, snippets, etc. are easily accessed in different panels/views.
Yes Chris, installing is more of a chore for CFE, but that is a one time deal. The parts I've grown to love in CFE would probably be easily added to DW:
- Some little known shortcuts (ctrl-alt-up/down arrow; alt-up/down arrow)
- Built in version history of edited files
- Better searching (can you say "search up?")
Also to expand on what ike started about the stereotypes. I'm a bit of a Warren-Carl hybrid myself. I have a marketing degree and started my computer career doing desktop publishing. But I would not label myself as a designer; I'm more of a wanna be in the creative/artistic area. I prefer MVC and OO based frameworks, but still maintain some spaghetti code sites. When faced with the name/address task from the blog, I may very well start with the forms (aren't we supposed to do the UI first?), but would definitely put the db code in a CFC.
Oh and please tell me people aren't doing a separate form for add and edit. That is a 2-page app if ever I've seen one. :)
So if you want ftp, here's your ftp: http://filezilla-project.org/
free, cross-platform client as well as a free server if you want it. Super simple to set up and use. While you're at it, stop working directly on your production server anyway.
</rant>
Finally!! Someone willing to post with a little humor. I feel like I writing to soviets in the 50s.
In my view FTP and file management in particular is avery large issue for many people. I love that homesite allows me to open a file via FTP/RDS and save it as if I were just working with a local file. Using FTP outside of the IDE is very very inconvienient and does not allow me to easily make incremental changes (making debugging more difficult).
And by the way - don't assume that folks are making changes to "production" servers just because they are using FTP - and also don't assume that everyone has a dev server... there are many many different flavors of development. If FTP is an issue for so many people I would guess that Mike's problem with them has nothing to do with FTP. He just doesn't like the way that particular wind is blowing :)
Meanwhile - what in the ham sandwidch is a "peanut butter slap". It's sounds both disturbing and delicious at the same time.
OK -- I feel much better now that you clarified that you're merely stereotyping ME, and not my putting down my computer. Please.
But I guess it's not surprising since your post is just full of stereotypes.
There are those of us who don't fall neatly into your categories. I've got a bit of both Carl and Warren and I've used CFStudio, HomeSite, DW, and CFEclipse. They all have their strengths and weaknesses, but in my opinion none of them is a clear winner over the others as a CF IDE. Like Matt, though, I'm wondering how Dreamweaver is trying to do things for you. You can configure and use DW to fit your dev style. If you don't like wizards and the drag-and-drop tools, don't use 'em. I don't. Heck, even when I'm using DW for XHTML/CSS, I'm in code view 99% of the time. I've been using CFEclipse a lot lately (for the CF8 debugger) and I like it. But I also find some aspects a bit "clunky", so I don't see myself dropping DW because frankly I don't see any a big difference in my productivity. Don't get me wrong, I'm not trying to convince you of anything -- use the tool that works best for you. I just don't think it's helpful to frame a discussion around some extreme stereotypes.
I also don't totally agree with this view of Dreamweaver being for "designers." Maybe back when people used to slice up images and stick them in a table for a layout, that was true. But anyone who has taken on coding an accessible, standards-compliant XHTML/CSS, table-less, cross-browser layout can attest that there is considerable programming and debugging involved which has little to do with colors schemes and fonts. In my view the "design" is done in Photoshop and Fireworks, not DW.
Thanks for the comments. Just a note - if you want to criticize me it's fine - I can take it. But at least TRY to engage in witty banter as opposed to blasting away? Your comments below regarding the editors are excellent - but your whining about stereotypes is beneath you I think. Of course I'm using stereotypes. Stereotypes are touch points for discussion. They serve as illustrations. They are not meant to single anyone out. Warren and carl are both stereotypes. If you read my comments about Apple I'm poking as much fun at myself and my stodgyness as I am at Apple... And did you miss the point where I said that a good developer needs some of the qualities of both Warren and Carl? I love the comments Tony - but at least try to be a little engaging. You are a guest on my blog.
I enjoy witty banter and sarcastic humor as much as the next guy, but I guess in my eyes your attempt to be funny just fell flat and rubbed me the wrong way.
More importantly -- like I said before just don't think it's very useful to bring out the Carl/Warren stereotypes. I see the relevancy of the frontend/backend developer dichotomy weakening with the advent of technologies like AJAX and methodologies like interface driven architecture and more backend programmers becoming involved with the UI. Basically, I don't see why we can't ask for an IDE that, in Paul's words is "all things to all" and does it WELL.
Though I believe I'm autistic and it may be that alters my perception of the search in a way that makes the list naturally more intuitive where others might find it naturally more intuitive to search forward or back one at a time. Of course to know for certain, someone would have to perform an actual study of multiple users to see which they prefer when presented with both options.
I also personally find the multi-file search in Eclipse unfortunately presented. I understand the idea behind showing the directory tree, but I would much prefer that at least once it got down to the individual file there would at least be some way to expand to show the list of individual matches in that file (in context). Though all-together I'd much rather have them show the directory (and I do wish Dreamweaver would show more of the path), the file name, the match (in context) and maybe (though less important) the line number in a table view the way dreamweaver does. Even in a case where there are thousands of results I find that easier to use.
With Eclipse by comparison I'm forced to open each individual file before I even know if the match is relevant to my task, whereas with the context in the list in Dreamweaver, I can see from a glance at the list how many of the matches (if any) are relevant. So I can just scroll down the list and see immediately without opening anything that "hey, most of these matches have nothing to do with x -- I need to think of a better search phrase, maybe a regular expression". That's the sort of reason why I say Eclipse is constantly making my job a challenge.
"...Habituation being one of the biggest reasons people rarely switch between IDEs..."
Thanks for that excellent comment - very well put.
Now, Dreamweaver's icky little tools to write "server behaviors" on the other hand... blech. The only thing I really wish Dreamweaver had is code collapse, like Homesite.
I could code in textpad. I do it quite often. But if I'm doing anything involved, it's just faster to code in dreamweaver since it autocompletes things
That said, I haven't tried CF Eclipse, half because I had to use Websphere Application Developer for a project a couple of years ago and despised it, and half because I haven't seen any pressing reason to do so.
When you come down to it, most of the people working with CF aren't Carls or Warrens, they're people trying to do a job and using whatever tool is handiest and makes them least likely to climb on top of a tower with a high powered rifle.