Recently we've had a couple of CF developer positions open up on the government contract I'm currently working on. One has been filled but the other is still open. Incidentally, it's for a mid to senior-level CF developer in RTP, NC, and if you're interested you can read more about it here and here.

However, the real point is that I've been interviewing a number of people for these positions. Based on these interviews, it seems like there is something of a "skill gap" out there in the CF world.

On one hand is the group who would read ColdFusion-related blogs like this one in the first place. I'm talking about the people who prowl the CFC-DEV mailing list. These are people who can't wait to download the ever-growing set of ColdFusion podcasts. The people who read blogs by folks like Sean Corfield, Ray Camden, or Joe Rinehart. The people who jump head first into bleeding-edge topics like ColdSpring or Reactor. These are the kind of people just about anyone would probably want working with them. Unfortunately, this group, while growing little by little, seems to be relatively small.

Then there are the folks who might have been working with CF for awhile but haven't progressed much past the page-centric approach. They might bang out apps and get things working, but may still embed queries in their display pages. They don't seem to have embraced software development as an engineering discipline yet.

I know there is a certain amount of, shall we say, exaggeration involved when creating a resume or applying for a job. That's fine. I'll usually ask a question like "on a scale from 1 to 10, 10 being high, how would you rate your CF skill?" I want to see where this person *thinks* they are. They might say "7". OK, they have 4 years of experience with CF listed so that sounds reasonable. But then the same person will admit that they've never created a CFC. It will become apparent that they have no real understanding of what a layered application architecture is or why you'd even want to use one. Many have heard of frameworks or MVC but don't really understand what they are.

I'm not sure if it is just the sample of people I've been dealing with, but there don't seem to be very many people in the middle. My anecdotal experience on mailing lists and discussion forums seems to give weight to this perception.

This creates a problem. As our development group has kept advancing, we've embraced frameworks and design patterns and best-practices. I know these are buzzwords but I feel we've gone past the bling factor of these topics and are well on the way to a deeper understanding of their benefits and drawbacks. So bringing someone in who isn't at least somewhat familiar with these ideas is going to require a substantial ramp-up period to become productive.

So I suppose my question to people out there who might read this is two fold: First, do you agree that there is a seeming skill gap out there in the CF world? And second, do you ever worry that if you or your team become "too advanced" that you might be inadvertently creating a problem later when you need to bring new people on to build or maintain these types of applications?

Comments Comments (78) | del.ico.us del.icio.us | Digg It! Digg It! | Linking Blogs Linking Blogs | 9213 Views

Related Blog Entries

Comments

  • # Posted By Sami Hoda | 4/5/06 10:09 PM

    Brian,

    You are not alone. We've experienced the same in SoCal for years. We've considered Java/JSP developers, and transitioning them. We've considered CF (low level) devs who dont know OO. I've interviewed scores of people now, and its hard to find the right mix. Few keep up to date... maybe because CF is popular in govt.. so things stay static, move slowly? Whatever the case, finding a good CF dev is like finding a needle in a haystack.

    Sami

  • # Posted By Jake | 4/5/06 11:41 PM

    Ditto for the Denver area. We often joke about interviewees been "so 1998" (maybe a little mean, I know, but...).

  • # Posted By JesterXL | 4/6/06 1:01 AM

    "bling factor"

    Nice one!

  • # Posted By Sean Corfield | 4/6/06 1:07 AM

    An interesting observation and it likely has some truth in it... but I suspect it's applicable to other language communities too?

    FWIW, we've had great success transitioning Java / C++ developers into ColdFusion and getting good code out...

  • # Posted By Damon Gentry | 4/6/06 1:29 AM

    Brian,

    Same here. I've noticed this trend in the last 12 months or so and I think the divide is significant and has impacted the direction of the CF community. The ColdFusion development team continues to make 'ease of use' a priority for the product. Fortunately, the CF community is responding to this with products like MG, ColdSpring, and Reactor. These types of apps actually help novice developers leverage the benefits of OO without having to write (or understand) the mechanics behind the scenes. Perhaps this is a double-edged sword, but I can't help but think that CF is leading the charge on bringing OO to the masses.

  • # Posted By Roger Lancefield | 4/6/06 2:23 AM

    Interesting and thoughtful post Brian. Whatever the size of the "gap" in ColdFusion, my guess is that it's every bit as bad, perhaps even worse, within the PHP development world.

    Without any intention whatsoever of trying to start a pointless PHP vs ColdFusion debate, I recently spent some time working with PHP 5 (which, missing application scope and awful error-handling framework aside, I rather liked) and was disappointed at the number of PHP developers within the various forums and lists more concerned with shaving milliseconds off each request rather than building a coherent and sustainable application framework (with a small 'f'). Now *that* seemed to me to be so-ooo last century. Developers for whom a Web application is principally about writing the most terse script possible and completing the current request in as little time as possible. Not that there's anything wrong with straight line performance as a concern of course, but when it's your only or overriding concern, then you know that odds on it's going to be cryptic spaghetti for tea.

    Back to ColdFusion, it's perhaps worth pointing out that this skills gap is a quite recent phenomenon and seems to have gone exponential over the last eighteen months or so. Model-Glue has been in the wild for about a year now? Out of beta for less. Ditto (I think) Tartan and ColdSpring, and Reactor for even less. Prior to the start of last year, this conversation would probably only have involved those using Fusebox and Mach-II, principally the latter?

  • # Posted By Frank | 4/6/06 2:42 AM

    I agree with you somewhat. However, some of this is the fault of our employers/jobs. I'm active in the CF community & have years of CF experience. I read blogs, go to conferences, etc. However, my work loads and projects seem to be on existing apps that are 'page' based. Its nearly impossible to rewrite the applications in frameworks, using CFCs (heavily), etc.

    I'd like to. But no matter how many presentations on OO, FB, Reactor, etc. I see, I don't quite grasp the concepts enough to implement them. Employers who use the skills refuse to hire someone who lacks the experience in them. Jobs we do get don't want the skills. Where do we learn?

    I've seen this happen in other disciplines. Employers want the experience but won't train (formally, or give time & mentoring to new staff). Catch-22. You can't learn on your own enough to get the jobs (generally), and the jobs won't hire you unless you learn.

  • # Posted By mark | 4/6/06 2:52 AM

    We should be coding apps that are easier to understand, not more difficult.

    Good CF code should be as easy to read as it is to learn.

    I am happy to embrace the best framework as soon as one emerges.

    Did any "intermediate" applicants for your job take one look at your framework and run a mile?

    :-)

  • # Posted By Gurdip Virdi | 4/6/06 3:47 AM

    Hello all,
    I have been a CF developer for 5 years and have watched this beloved easy development language evolve into an over complicated, hard to learn and quickly changing language.

    One has to spend 1-2 hours a day reading. Just to keep up.

    So in response to the complaints of no decent CF developers the blame doesn't lie at your door (my friends) it is the overcomplication of a once lovely language (CF5).

    MachII, ModelGlue are both ridiculous. You need about 4 different cfc/cfm files just to run a query and output the rows. Unless you are a born GEEK/NERD you wont pick this up easily. CF guys like myself will just move out of the industry in to other roles (as I am doing).

    Somebody needs to create a decent framework. Otherwise this problem will get out of control

    Gurdip

  • # Posted By Roger Lancefield | 4/6/06 4:44 AM

    Gurdip, while I understand your frustration, What exactly do you mean when you say that the existing frameworks are 'too complicated'? Too complicated for what? For enterprise-level development? Or too complicated for an application running dozens of sub-sites, with tens of thousands of pages, resources, events, with similar numbers of user and customers? No, Mach-II and Model-Glue are absolutely not too complicated for those types of application!

    You ask for a 'decent' framework. If you code procedurally, then you have a superb framework, Fusebox 4, which enables you to use MVC structure without needing to know OO. If you don't like the pre-compilation or working with XML, then there's good ol' Fusebox 3 which is even simpler still (and which runs very well on CF5 by the way). What would be a _good_ framework for you? If your answer is 'one that makes my coding life easier', are you by any chance really just asking for someone to give you a fully-featured CMS? Many experienced framework users have described both Mach-II and Fusebox as some of the least complex frameworks they have seen (and most Mach-II users agree that Model-Glue is more starightforward than MII). Try comparing any of them to Struts or Zope!

    I can understand that one's first experience of, for example, using Model-Glue's config bean functionality to set application constants, may at first seem like an insane amount of work just to create a bunch of values that could easily be set into an application-scoped struct. But Model-Glue's mechanism is there for a reason, and that reason is deeply embedded within the philosophy of object-oriented design. If you don't agree with the OO way of thinking, then you will never be happy with the philosophy behind OO frameworks either.

    Procedural is only simpler up to a point. After that point it starts throwing up more issues than it solves. A fact which undoubtedly has driven so many to OO. There comes a time when it's pretty much the only feasible way forward in terms of managing complexity, at least in my experience so far.

  • # Posted By Lola Lee Beno | 4/6/06 5:26 AM

    I think one problem is training. It takes time and money, and sometimes the company doesn't really want to pay for it. Another factor could very well be the nature of the work that the company has its employee do. If the company wants to keep the paying clients and the codes work just fine, then the status quo will be maintained, and that may mean doing it the way the codes were written 4 years ago. It does take a leap of faith to trust that the frameworks such as ModelGlue or Fusebox will be more efficient, and of course you do have to persuade the clients that it's well worth shelling out more $$$ to have the code rewritten to take advantage of these frameworks. Sometimes it's not the fault of the developers that they may be behind the curve, but that doesn't absolve them the responsibility of keeping their ColdFusion knowledge up to date, especially if you're able to install the developer versions of CF on your home computers.

  • # Posted By Patrick Whittingham | 4/6/06 6:29 AM

    That is an interesting article, but seems to focus on that a CF developer just knows CFMX 7 only. A good developer wants to know the in/out of HTML, XHTML, CSS, DHTML, JavaScript, AJAX, XML, SQL, UI, Accessibility and other web technologies. A good developer is one who is wants to learn other skills, just in case CF isn't the 'language' of their company in the future. I'm amazed that AJAX is 'important' now, since XMLHTTP and DHTML has been around since IE 5.

  • # Posted By Calvin | 4/6/06 6:48 AM

    There are always multiple camps in how to go about getting from point a to point b. In this situation, I think we are seeing some division along the lines of those camps.

    Camp Quickly, described here as unskilled folks who don't understand OO design and patterns.

    Camp Effectively, described here as folks who have spent time learning why and how OO works and the value it brings.

    Because putting out the fires, packing your stuff and trekking up the mountain to Camp Effectively isn't quick and takes a significant amount of investment, these folks often dismiss the gains offered by the view on the plateau that allows the development team to see the problem at a conceptual (higher) level and model the solution closer to the problem domain instead of closer to the solution domain.

    This viewpoint is often reinforced by many of the things so far mentioned, no immediate return on investement, no additional money, no opportunity at work, and so forth. But most importantly, folks are making good money and have secure jobs (today) working in Camp Quickly.

    I think the intermediate layer exists, and those are folks that are just starting to get the value of the advancements in CF in the recent years. They are struggling with the concepts and fumbling their way through stuff, but they are moving forward. I believe that the transition from procedural to object oriented may begin gradual for many folks, but once you hit it, the transition is sharp and clear and moves you into the advanced camp pretty quickly.

    Although, I think some of these folks often move away from the scripting layer languages and into the languages that much of the scripting layer translates into such as Java and C#/C++ once they realize the value of those languages and have begun to pass the most siginficant barrier of entry, understanding OO.

  • # Posted By Gus | 4/6/06 7:19 AM

    A couple of years ago I had to grow a CF development team from 8 people to over 40 in about 6 months. What I quickly learned was that the CF developer community was tiny compared to other languages.

    I think this is where the problem really lies. I was having difficulty finding people with good solid development skills, and a real desire to increase their knowledge.

    Then I discovered the Magic Key! I realized in my own experience, that once I gained a basic understanding of PROGRAMMING, learning new languages was relatively easy. I changed my job advertisements from "Seeking ColdFusion Developers" to "Seeking Web Application Developers" knowing that I could turn a decent Java/C#/VB or any other language developer into a good/great CF developer alot faster than I could turn a mediocre CF developer into a good/great programmer.

    Good luck with your hires, and let me know if you need any contract work!

  • # Posted By Trond Ulseth | 4/6/06 7:34 AM

    I would put my self in that "missing" intermediate group.

    I early understood and adapted the mvc pattern when cfc's became available. Even to such degree that I created my own mvc (but not OO) framework that I called newBee. While I never finished it up quite enough to make it available to the public, there are several live applications running it. I wonder if this would be the "perfect" framework Gurdip asks for ;)

    I am also closely following the OO scene, reading the before mentioned blogs, looking at presentations etc. I've recently started using MG extensively for several new applications in my job, and I do understand the very basics of OO. I understand what Reactor is about, but have not started using it yet. ColdSpring I don't get what it really does, but hope someday to understand and use.

    So as a conclusion, I'm defently not in the Camp Quicly group, but coming from a HTML/designer background it's a long and hard climb before I reach Camp Effectively. And I do beleive that there is pretty many in the same group as myself.

  • # Posted By tanguyr | 4/6/06 7:37 AM

    Look at it this this way:

    - there are probably fewer CF developers (at any skill level) out there than for most other comparable technologies like ASP, server side java, etc.

    - the good ones all have jobs, so they are less likely to show up at job interviews.

    So, from the p.o.v. of someone out to hire, it does seem that there is a skills divide...

    /t

  • # Posted By Jim | 4/6/06 7:46 AM

    I'm in with Frank. My current work load is so heavy I barely have time to keep up with new stuff let alone implement it. I finally forced myself to do a site in Fusebox/MVC which took longer than expected but I learned a lot and will be using it again. And like Frank we also have quite a few older applications that were written in CF5 (or older) that work and the client won't pay to update.

    I think another factor is a late move to MX - I'm still just starting to use CFC's etc.

    Right now I'm a bit frustrated because I *want* to learn more but it's a struggle to find the time to juggle work, family and learning new techniques. I envy people like Ray Camden who seem to find endless amounts of time!! :)

  • # Posted By Roger Lancefield | 4/6/06 7:52 AM

    Trond wrote:
    'So as a conclusion, I'm defently not in the Camp Quicly group, but coming from a HTML/designer background it's a long and hard climb before I reach Camp Effectively.'

    Heh, are you then saying that you are neither quick nor effective Trond! ;) But I agree. I'm sure there are a lot of us climbers similarly on route.

  • # Posted By Matthew Lesko | 4/6/06 8:45 AM

    I think it's about only knowing Coldfusion that creates this skill divide. So two points, which I don't think anyone else has talked about:

    1. In my experience, a significant number of Coldfusion programmers are from liberal arts backgrounds (including myself). Which means you have very little idea what OO is or what it can do. So you started using Coldfusion because frankly it was just so much easier than anything else to get up and running and do something. This makes for novice Coldfusion developers.

    Certainly you can learn. But evening knowing what learning mountain to climb is a daunting task. Took me years to have an idea of where to start grappling. And programmers from other languages often regard you with disdain or ridicule for using what they consider a toy language. So mentoring is harder to find I imagine than with other languages (see next point for where are all the advanced Coldfusion programmers - and this no mentors).

    2. To me, the best it seems you can do with Coldfuions is senior [insert programmerish title here]. But becoming an architect or director most likely means Java, C++ or .NET. This means advanced Coldfusion developers are either looking to get out or came from another language (so they learn Coldfusion, but it's not home base, and they often leave to do something else). This creates a situation where advanced Coldfusion developers are in short supply because career advancement is limited.

    I think Coldfusion is turning the corner, but when it does, the advanced programmers will most likely know Coldfusion *and* Java (and likely a few other languages). These people will either come from a Comp Sci background or have spent signficiant time learning other languages and concepts on their own.

    So how do you get there? Regarding training: very few if any people are trained in my experience. If they are, it's often the wrong thing, the wrong time or wasted on the wrong people. Better to teach yourself. Try new things on a project, take some risks. If you're wrong beg for forgiveness, which is better than asking for permission. Show initiative. It will make for some harder experiences, but life will certainly be less dull.

    OK I'm done ranting.

  • # Posted By Brendan | 4/6/06 8:52 AM

    To move from intermediate to advanced there is a fair bit of work involved and rarely (if ever) is this supported in the workplace.

    This extra work is not reflected in the salary of advanced coldfusion developers. So why bother? unless you want to be part of the community or do it out of academic interest the hours needed in your spare time just dont add up. Thats why people dont do it.

  • # Posted By Trond Ulseth | 4/6/06 8:58 AM

    Roger wrote:
    "Heh, are you then saying that you are neither quick nor effective Trond! ;)"

    Good call Roger, just don't tell my boss :)

  • # Posted By Brandon | 4/6/06 8:59 AM

    I have to say I am part of Camp Quickly, although I have attempted to make a switch to Camp Effectively. I currently have a Fusebox 4 I am in the midst of completing.

    However, the main issue I face is that it seems a better use of my time (and to ensure future employment) to learn a more "highly valued" languages (.NET, Java, etc...).

    I know I'm going to get killed for that statement that CF is not as valued as other languages, but it's true. Look at Monster or someother job page and you'll see that Java and .NET programers are making more $$ and their are more jobs available. Also look at http://www.indeed.com/jobtrends?q=coldfusion%2Cjav... to see that CF is almost off the map.

    Don't get me wrong, I really like CF. I have been using it for 5 years and I know I probably should have gotten to frameworks before now (but that's another issue!). So now that I'm ready to learn some more, it seems a better investment of my time to learn .NET or Java. I will use CF for my side projects, but for my family's security I need to learn something else. Sorry.

  • # Posted By kitty | 4/6/06 9:03 AM

    I have to agree with Frank and Jim. I term myself a lower intermediate developer. I really want to get my head around the different frameworks, but it's difficult finding the time, and there's nobody where i work to mentor me.

    I am currently still getting to grips with learning fusebox4 in my own time. Everytime i feel like i'm getting somewhere, i have to stop and don't have a chance to go back for a few weeks by which time i've forgotton what i've learned.

    It would be great if there was a way to create an online mentoring system. Where you could have an expert coaching a group of newbies or intermediates online.

    - If anybody has any advice about progressing from being an intermediate to advanced CF programmer, i'd be happy to hear it.

  • # Posted By Adam Cameron | 4/6/06 9:24 AM

    I think the "statistics gathering" that lead to this blog entry are flawed.

    I would like to consider myself as at the top end of "intermediate" as far as CF development goes. I know 95% of CFML very thoroughly, and am always looking to extend that. I also spend time reading blogs, participating on forums, and even reading the endless stream of mindless banging on about "framework of the hour" on CFCDEV. Some of my suggestions on CF betas have made it into the product. I do quite a bit of CF stuff in my spare time (geez... and I don't even *like* CF!). I know a number of other CF developers in this bracket, and some better than I am in some areas of CF expertise. But I don't personally know anyone at the experience level of the Sean Corfields - and his ilk - of this world.

    I also know a bunch of CF developers who are very proficient indeed at CF, and I would definitely call them "intermediate" through to "intermediate-double-plus". They know what they're doing, they understand all about CF's limitations and capabilities, and CFCs, and frameworks (and realise that there's good and bad in all the ones on offer), know all the TLAs, and what not. But they show up at work at 8:30am, go home at 6pm, and spend the rest of their time *doing something else* with their lives.

    I also know - although only by the reputation they expose via internet (eg: people on forums and blogs), who really are - bless 'em - rubbish.

    But MOST of the people I deal with are intermediate level or just shy of what I'd consider "advanced". I think why they don't show up on your radar is that a lot of them have better things to do after hours than witter on about CF in any way shape or form; and the others perhaps don't find conversations about frameworks very interesting, so don't participate ;-)

    --
    Adam

  • # Posted By Brian Kotek | 4/6/06 9:32 AM

    I agree that it can be daunting to try to get up to speed and stay up to speed in the CF world. Things have really been going like gangbusters for about the last year or two. It requires a lot of reading of books and blogs, and a lot of trial and error with new code to get your head around topics like OO and patterns and frameworks. I could give the old "I had to walk uphill both ways in the snow" type of speech about how I learned most of the programming skills I posess. Like some of the others who have responded here, I was not a CompSci major.

    All that said, I think things are actually easier now than they have ever been for people looking to tackle the more advanced topics. Sean Corfield has some great demo apps, Ray Camden has been blogging about Model-Glue, CFDJ has been focusing on some of these concepts, and even I have been trying to add to the knowledge pool with various versions of my small example bookstore application. (There's one on the way showing Model-Glue, ColdSpring and Reactor working together). I hope we can use these and the many other folks out there pouring their knowledge out into demo apps, articles and blog postings to help everyone who wants to learn more.

  • # Posted By Brian Kotek | 4/6/06 9:38 AM

    Adam, not entirely sure what your point is. If the folks you're talking about don't need to spend a single second after work "wittering on about CF", more power to them. It wouldn't stop those sorts of people from applying for a job though, would it? I don't gague a person's skill by how much extra time they put into learning, though I must admit that I think anyone who doesn't do any self-learning on these subjects is definitely falling behind and this will become evident at some point.

    Basically, if you know anyone in NC (or who wants to move to NC) is is good at CF, I'll talk to them about a job regardless of how much geek time they put in after hours. ;-)

  • # Posted By Gavin Brook | 4/6/06 9:56 AM

    I agree with Brian. Here in the UK I've had the same problem. I've interviewed dozens of candidates for mid level CF positions and most have never heard of a CFC. I found most could build a very basic site but had never made the transition to larger, or "enterprise level", applications.

    kitty rasied an interesting point about mentoring. ColdFusion is a very easy language to get into. You can build some relatively powerful, basic, sites. But companies put pressure on for the site to grow and evolve without the mentoring required to make that transition. As a senior developer I find it hard to make the time to mentor junior members of the company as I too am under a lot of pressure.

    I think a lot of companies, particularly smaller ones, must realise that there needs to be a progression in training that follows the evolution of a project. They need to step back and invest in developing their staff's ability to deliver, as opposed to increasing pressure for results.

  • # Posted By Adam Cameron | 4/6/06 9:57 AM

    Hi Brian.
    I was commenting on the subject line, and the perception that there's experts and newbies, and seemingly no-one really in between. I think that's inaccurate, and the yardstick people seem to be using to arrive at these demographics also seems to be inaccurate.

    I kinda glossed over the first two paragraphs of your original post, as I thought they were just scene-setting, and the gist of the thread was this "Skill Divide". I don't think there is a divide, I think it's pretty bell-shaped.

    That's all I meant.

    --
    Adam

  • # Posted By Jacob Munson | 4/6/06 10:07 AM

    There are two measuring sticks you use, if I read correctly:
    1. Involved with the community
    2. Use a framework

    I, like others who have commented do #1 religiously. However, I am /not/ using any frameworks on purpose. But do I do OO coding? Sure, I use cfcs, try not to repeat myself, and all that other jazz. If I lived in NC, would you turn your nose up because I'm not familiar with MG/FB/CS/[fill in the blank]?

  • # Posted By Daniel Greenfeld | 4/6/06 10:10 AM

    Sadly, there is a lot of truth to Brian's post. It has frustrated me to no end to see legacy applications released today. And when you have to defend CFMX against other languages, the value of building flat CRUD applications with tags and too many pound signs doesn't hold up very well. Which is a shame, because CFMX is a very, very powerful language.

    As for keeping up in CFMX, I spend 30 minutes a day doing just that, instead of playing solitaire or checking eBay. That keeps me up to speed on Model-Glue, Mach-ii, Fusebox, and more.

    But that is no longer for me. For a lot of reasons (including having to work with developers who insist on using pound signs at every possible opportunity), I've moved to Python and Plone.

  • # Posted By Brian Kotek | 4/6/06 10:14 AM

    Adam, naturally this is just an opinion, but it is based on my experience interviewing and searching for candidates to fill intermediate to senior level positions. If there is a large group of intermediate folks out there (the bell of the bell curve), I'm not seeing them in response to the jobs or even just out there on the web very much. Not saying there are NO intermediate people, just that there don't seem to be many and that the gap between the "advanced" people and the "novice" level seems to be expanding. Note that by "novice" I don't necessarily mean a novice at CF, because CF is so easy to learn it's hard to really stay at that level for long. I mean the people who don't go past knowledge of the tags and functions to the more nebulous knowledge of design, planning, and software engineering.

    Thanks for the comment though, I'm fully prepared to hear the other side of the story (that there are a good number of intermediate folks out there and I'm just not seeing them).

  • # Posted By Brian Kotek | 4/6/06 10:18 AM

    Yikes, easy Jacob. I'm not sure why you're honing in on just the framework aspect of my post. I view using a framework as ONE PART of being a more advanced developer. Even if you don't choose to use a framework, do you at least understand what one is and why you'd use (or not use) one? If you read the post you'd see that the people I am talking about have NOT written a CFC, and have no idea what OO programming is or why it might be a good thing. So no of course I wouldn't "turn my nose up" (not sure where this is coming from either) at you. I'm not turning my nose up at anyone: if I'm hiring for a mid to senior level position and the person applying is obviously not at that skill level, is not hiring them "turning your nose up" at them? I think not.

  • # Posted By Michael White | 4/6/06 10:27 AM

    ok, my two cents. I started with CFMX 6.1 and the first books I read to learn it barely mention components and then only once you made it half way through the book. After getting through the second half of the book, I re-wrote my helpdesk application to use components but that was a lot of work. But I get it. I understand the structure and reasons for it. Even though components have been available for a couple of years and CFMX 7 is out I don't think there's a good book that focuses on cfc as they are used in coldfusion today with all the DAO's, Gateways, etc. I'm starting to learn Model-Glue but haven't actually built anything with it yet (next app). So I think the problem is two-fold for most people, one is they learned it before components and developed such a library of code and experience in solving problems the old way they hate to throw it all away, and two, the books that teach beginners don't really cover the subject well and there isn't much for intermediate developers to learn from (certainly not in a central location like a book or training CD).

  • # Posted By Craig M. Rosenblum | 4/6/06 10:28 AM

    Well I have been programming for about 6 years..

    And frameworks are nice and can be very useful, but don't make you a better programmer...

    And the old argument about seperating layers is not always true. There may be times when it is, but for me, that not happened yet.

    So your definition of an advanced cf developer may be completely different from other people.

    For me what I look for as an intermediate to advanced cf developer..

    1. Certification.
    2. What project management process do they use?
    3. What documentation system do they use?
    4. Do they use source control?
    5. Do they know how to write optimal sql code and why that's important?
    6. Can they scale their applications.
    7. Do they understand the software development lifecycle...

    No where in my list does it say can they create a cfc, or if they know OO. To me that's part of their coding style. If it helps to create a better app, then fine use it.

    I mean if they die, will someone else be able to understand their code, their logic, and easily make fixes and repairs.

    That's what matters...

    Also can they teach and are willing to help improve the knowledge of other people...Or do they keep it all to themselves..

    Can they work well alone or as a team...

    Do they follow or have a set of best practices?

    What databases have they worked with, and how strong is their knowledge of them?

    Have they done any database modeling more advanced than Access 97/2003?

    Unfortunately in our industry, you can't take a portfolio of code you've worked on, because 99% of the time that is propriatary to your employer's or company's.

    What you can do is read code, write code, and that is a much better test.

  • # Posted By Jacob Munson | 4/6/06 10:35 AM

    Sorry, I didn't mean to come off so strongly, but when I read lines like this: "It will become apparent that they have no real understanding of what a layered application architecture is or why you'd even want to use one. Many have heard of frameworks or MVC but don't really understand what they are." It sounded to me like one of your measuring sticks was using a framework. I do understand the Model View Controller design pattern, but I choose /not/ to use the popular frameworks. However, I do think if I were looking for a job in NC, you'd probably take a serious look at me. But if I were hired, you'd probably try to shoehorn me into using whatever framework you prefer, and I'd probably not be a very happy CFer. I have read a LOT about frameworks, have downloaded MG and played with it a bit, and to be honest, I don't see the value they bring to the game.

    If I am totally reading you wrong, and you would be happy to accept my personal style of OO coding, than please accept my apology.

  • # Posted By Brian Kotek | 4/6/06 10:42 AM

    Craig, I'm sorry but when the person will be required to maintain a large application containing dozens of CFCs in a layered architecture, then that person had better know how to write a CFC and understand what a layered architecture is.

    The other topics such as knowledge of version control are good, and if they know them even better, but teaching someone how to use VSS or Subversion takes about 10 minutes. Though to be sure if a person says they have a high skill level and has never used a version control system, that would probably be a red flag.

    Advanced SQL is also definitely a requirement, and I should have mentioned it. Most people think they are good at SQL because they can write an outer join. SQL is an extremely vast topic, as is SQL tuning, and this should not be underestimated.

    Code is important of course which is why I ask for code samples before I will even talk to a person. This is often a good indicator but not the be-all-end-all because people can (and do) submit code that they didn't actually write.

    As an aside, the point of the post wasn't to outline in detail my criteria for hiring an advanced developer, it was to ask if people agree that there is a skill divide out there, whatever criteria you choose to base the divide on (SQL, scalable apps, CFCs, OOP, frameworks, software design skill, whatever).

  • # Posted By Brian Kotek | 4/6/06 10:47 AM

    Jacob, no worries. You certainly sound like someone I'd be happy to interview for a position like this. Though the position does entail maintaining existing apps (that happen to be Fusebox 4.1 apps) and working with others on new apps (and Fusebox is the standard way we build them). So I think if that would end up making you unhappy, then of course you'd want to turn it down. But in that case it probably wouldn't be me turning you down, it would be you turning me down. ;-)

  • # Posted By Michael White | 4/6/06 10:47 AM

    oh, yeah, I forgot, most of my database background is from Microsoft Access. Starting with 2.0 all the way to 2003. Even though it is a great program, most of the books on the subject don't focus on great database concepts and the Wizards that many beginners use don't produce good output. Even though the newer version claim web support it sucks compared to Coldfusion and that's why I've switched to coldfusion, so I can finally do a database-driven website. But old habits die hard and I find myself using naming schemes and database structures the same old way. It takes a while to beat that stuff out of people.

  • # Posted By Nathan Hunsaker | 4/6/06 10:47 AM

    I work in the advertising industry and then to do a lot of RIA projects. I've found it very difficult to find mid-level developers (both Flash and ColdFusion), so I doubt this is ColdFusion specific. I agree with some of the comments on here that some people move into the development field without any formal training. In the area of Flash, even more so, as it's seen as a "creative" tool. It's a huge leap to go from the idea of scripting to full blown OOP. Maybe of these developers are so busy with what's in front of them that they never are thinking of what's to come, or how to better themselves. The people who are at an intermediate level often jump quickly into the senior level range, if not in skillset then in salary.

    I look for someone who is self-trained, that also shows me they have the hunger for knowledge and investing in themselves. While some experience is required, understanding concepts over a particular language is highly desireable. If someone knows OOP, MVC and design patterns it will apply to any other OO language. Certification is the last thing I care about.

    In structuring your staff, and even your applications, it's important that developers of all skill level can contribute to a given project. I might be pointing out the obvious, but it's a way to slowly expose and train your people.

  • # Posted By Chris | 4/6/06 10:55 AM

    I would consider myself one of the "intermediate" CF developers. Obviously I'm reading this blog so I do spend some time trying to keep up with the language. My job title is unofficially the "arch-duke of everything that plugs into the wall". This kind of job is not uncommon in small offices that need some technical help. So while I would like to keep up my ColdFusion skills and build trendsetting applications, my employer has no need for such things, and I have no time to really dig into those kinds of projects anyway. I think this is one of the essential benefits (and problems) with ColdFusion. It was created as an easy, quick-script sort of language. Offices like my own appreciated this and jumped on the bandwagon because they like quick and easy solutions. So you can have someone who has worked with ColdFusion for 5 years but all he's ever really done is tweaking basic scripts (as opposed to constructing new applications). So, I agree that lack of intermediate CF developers is lamentable, but I think that you must realize that ColdFusion is an essentially different language than C++, for example, which requires a significant understanding of CS concepts.

    For the record, I would love to be a more advanced CF developer. I wish that my employer gave me time to simply write new applications and participate in the CF opensource community. But I don't have that option. And I don't have the financial resources to buy hosting from a CF hosting company. This is why PHP is so much more successful: it is completely free. Any kid with a spare PC can load up Apache and PHP, then share his IP with a couple of friends and soon enough you've got all sorts of interesting things happening.

    Because it costs money and because it is so easy to make simple sites that get the job done "good enough", I think that ColdFusion will always remain a second-rate language.

    (Sorry to get a little off topic there. Let me reiterate that I do really do like ColdFusion!)

  • # Posted By Craig M. Rosenblum | 4/6/06 11:08 AM

    Yes and that may be your environment, but in my exp, I rarely have to deal with or program in cfc's.

    I think my point ultimately, is that we have different ideas of what an intermediate to advanced cf developer is.

    Coldfusion is not a second-rate language, it is a Rapid Application Development language, now that doesn't mean there can't be bad programmers and programming, but that happens in any industry...

    We do want to be higher level in terms of programming, and a lot of us see that as being frameworks and OO. I disagree, but everyone has a right to their way of thinking and coding.

    The only reason i care more about the basics of a cf developer, than oo and frameworks, is that too often I am hired, called upon to clean up crappy code/database/scalability problems/lack of documentation. So I have to be more concerned about the core functionality than stuff that would be nice and interesting...

  • # Posted By Craig M. Rosenblum | 4/6/06 11:11 AM

    Oh and I obviously agree with you on training.

    I have only once been encourage and supported to go to a cf conference, then the next year it was too expensive. So yes I would like to go to more conferences, but afford them, that's not my reality.

    So i both have to self-teach, but also help others who are knewer, and I do like to help other people, so they can avoid the bumps on the road, I am sure all of us have experienced...

    I really wish companies would support training...

    But then it might mean, they should start caring about their people, which is quite rare.

  • # Posted By Daniel Greenfeld | 4/6/06 11:18 AM

    Craig,

    I agree on the conferences. In ColdFusion it is very expensive to go to a big conference. And every year it goes up. I would love to go this year, even though I have moved to Python, but there is no way I am going to fork over the cost of CFUNITED. And without active CFMX development anymore, I don't think I can get NASA to justify it either.

  • # Posted By Isaac | 4/6/06 11:45 AM

    I think a big problem with some of this, and have experienced first-hand, is that there are too many people from the "Advanced" camp when it comes to programming who lack the practical knowledge to understand when/how it is best to apply those skills. Truly you don't need a sledgehammer solution at all times to a rubber mallet problem.

    Granted, use of CFCs should be a critical skill as there is a great deal to be gained through their use. But if we're talking about DAOs for every shred of info you want to collect/save/pass around when you know the parameters of what your app will be tasked with in advance and you could easily not have them to function then why take the extra time to implement them if they have limited to no return value?

    Value to the client? Doubtful, they'd laugh at you if you discussed your architecture with them... they just want results, no points for how you get there.

    Future-Proofing? Can't be just dismiss this now as the complete and utter BS that it is? If you're the kind of person who is quick to adopt and utilize new frameworks you'd be lucky to leverage your current framework before the next came along and you were clamoring for an excuse to use it anyway.

    In the end for typical applications I see built in CF in a commerical business environment what framework you adopt has little to no bearing on your success compared to having intelligent, creative, and seasoned developers who solve problems and work through issues effectively and logically. Framework has only a small part to play in this.

  • # Posted By Roger Lancefield | 4/6/06 12:36 PM

    Veering off topic (again), but...

    I haven't heard the idea the frameworks 'future proof' one's site, unless by that people mean that future maintenance will be easier because the site is built to an objective pattern and/or standard.

    Isaac wrote:
    'Value to the client? Doubtful, they'd laugh at you if you discussed your architecture with them...'

    Often true enough. But they'll also laugh at you if you tell them that adding functionality to one's 'traditional' app:
    - is too dificult
    - will take too long
    - will be expensive on account of the difficulty
    - that it might destabilise the application
    - that no one in your company can remember how a complex* app works anymore.
    etc, etc.

    (*I say 'complex' because, as is repeatedly pointed out on the blogs and forums populated by framework enthusiasts, no one is suggesting that a complex framework should be used for small-scale, light-weight applications.)

    Isaac wrote:
    'what framework you adopt has little to no bearing on your success compared to having intelligent, creative, and seasoned developers who solve problems and work through issues effectively and logically'

    Also true enough, I doubt that anyone would disagree with that, but framework adoption is not not an and/or proposition. Besides, the point is pretty axiomatic! :)

  • # Posted By Matt Williams | 4/6/06 12:44 PM

    Reading all the different view-points has made me realize how lucky I am. I maintain an intranet application for the employees that manages our customers and products and the web site that the customers use to learn about and buy our products. I built the intranet app in a CF 5, non-OO, somewhat spaghetti-like method. After spending some time reading blogs and learning about OO and frameworks, I decided a rewrite of the legacy intranet app was in order.

    Lucky for me, I have enough pull at my company that I was able to make this decision, explain it to my superiors. My main selling point to them was the longevity and ease of maintenance of the application. This worked pretty well because for us, the customer/product database and our ability to use it are the business.

    So now I am able to take the time at work (though I do a lot at home too) to learn and play with different frameworks, OO, etc. But I do have to draw the line somewhere. As cool as Flex and AJAX look, I can't yet justify their use for my purposes. Maybe after the app is rewritten, I can go back and look at those tools for making the front-end more cool.

  • # Posted By Roger Benningfield | 4/6/06 1:33 PM

    I dunno. I guess by the scale suggested, I'm something like an intermediate programmer. I've been working with CF since '98, some of my CFCs are being used by an increasing number of folks in the CF world, and I've been using Fusebox for years.

    There are different scales, though. At the intersection of blogging/syndication and CF, it's probably fair to call me "advanced"... I know where the bodies are buried when it comes to writing CF code that deals with things like blogging APIs, the mysteries of RSS/Atom, and so on.

    It could be that there are a lotta folks like me out there... CF developers that are relatively specialized, with a focus on some specific niche.

  • # Posted By Brandon Harper | 4/6/06 2:02 PM

    From my viewpoint...

    1. Very, very few CF Developers have a formal CS background. Personally it can be very challenging to have this background in CF because when you start talking about things like sorting algorithms, threading, general CS theory etc, most CF developers have no education in these areas. That said, I personally prefer to work on teams with people who treat languages as tools rather than a specific language being their only discipline or area of experience. Personally I'd much rather hire a very green but eager programmer than someone who's worked with CF for at least 5 years and hasn't really got off of their duff to keep up with technology.

    2. Most CF work is not for products, it's to support businesses in one way or another... intranets, mom & pop sites, brochure-ware, etc. If you aren't working in a services or software shop that earns it's income directly from it's software, there is a high probability you're still doing CF 5 coding because there will never be any business support for technology other than spending the absolute minimum to keep things duct taped and running. Also, highly skilled CF developers don't want to work at places like that anyway and it's hard to find interesting work that is CF related in all frankness.

    3. Not every CF developer is going to be a ninja. In general I think your best bet is to have at least one or two really good all around pragmatic programmers who can architect applications and lead/mentor lower skilled/experienced developers while being language agnostic. It's interesting how many companies with CF jobs open want all ninjas OR put too much faith in employees because they "get a lot of stuff done" rather than taking the time to design and build solid applications (so that they aren't always in reactionary mode). No one has room to grow if everyone on your team already has lots of experience, etc.

    Anyhow, just my 2 bits. :)

  • # Posted By Doug Bezona | 4/6/06 2:16 PM

    I currently work as the lone CF developer (slowly, painfully converting to the "dark side" *sigh*) in a primarily .NET environment, and there is a very similar gap between the classic ASP/VB developers and those who have truly learned and embraced .NET.

    It's bound to happen when fundamentally new paradigms are introduced into a language, but the old methods still "work". In most companies, the business wants a solution ASAP, and often doesn't care exactly HOW it's done. Given a deadline, a lot of developers simply sit in thier comfort zone and get it done.

    The fact is though, there are way more programmers in any field than there are "good" programmers. And "good" doesn't always mean up to speed on the latest and greatest, but do they show they can solve problems, manage their workload, and produce high quality code (even if using older/different methodologies).

    If necessary I would fill a CF position with a .NET developer (for example) who had the right makeup, or vice-versa. It's much easier to teach someone a new language than to teach them to be effective problem solvers.

    The logic is the hard part, not actually writing the code. My first .NET project was porting an existing CF app. The CF app had taken a few weeks to develop initially, and it took less than a week to port it to .NET - and that's while poring through .NET books as I went. It wasn't so quick because .NET is faster to develop in, but the hard part - the application logic - was already done. I just needed to get through the syntax and architecture differences and then type.

    As for worrying about your team becoming too "advanced" - if your applications can't be understood by someone new coming in, one or more of the following is possibly happening:

    1. You aren't hiring good people. See above. Unless they are completely entry level (in which case I hope a more senior person is there to guide them), if they have the core underlying skills, they should be able to get up to speed on your apps regardless of methodology.

    2. Your documentation is inadequate. If the developer is good, and still can't figure it out, well....

    3. You are overengineering your apps to the point they aren't comprehensible. I see as many over-engineered applications as I do under-engineered.

    If a good developer comes in, and goes through your excellent documentation, and still can't figure out what the heck to do with your apps, maybe it's time to look hard at the methodology.

  • # Posted By Sami Hoda | 4/6/06 2:19 PM

    To talk about the last comment...

    To explain the benefits of OO from a Business Perspective to get buyin from upper mgmt, maybe its better that CS people arent doing a lot of CF. Whats needed is more CIS/MIS type programmers, who are rooted in business problem solving using IT to help bridge the gap. These people see both worlds.

    The work we do, building actual products in an ASP model, is using CF. Its a niche, but I do see it growing.

    And yes, I do agree, not all programmers are ready for this and are definitely not 'Ninjas'. If you guys remember that article on the growth pattern of developers, by Hal Helms, referenced by Sean, on the "Seven Stages of Expertise", you'll see that there is a definite growth curve, and one where companies need to help foster and assist developers in.

    That is one of the biggest vacuums.

  • # Posted By Ray Buechler | 4/6/06 3:08 PM

    I would consider myself at the low end of the intermediate category. I've been using ColdFusion since CFMX was released.

    I monitor a lot of blogs and basically have taught myself CF by using the resources available on the web and by reading Ben Forta's WACK book. I do use a framework and I do use CFC's. I've recently started using Reactor and am currently working my way through Ray Camden's Model-Glue tutorials.

    The problem I have sometimes is that I start trying to learn too many things at one time and end up feeling like I'm learning nothing because I'm trying to absorb too much at the same time.

    I am also trying to be more OO-centric in the way that I code and it has been a struggle and continues to be a struggle but from what I understand that is not unusual.

    I'm wondering if a lot of the other CF developers like myself that consider themselves intermediate feel a lack of confidence when they see some of the CF jobs that are advertised? I know I do. I'm the only web developer in my office and have no one to gauge myself against. I'm one of those folks with a liberal arts degree someone else mentioned who is completely self taught when it comes to CF and web development and I'm a little nervous when it comes to applying for some of the jobs I've recently seen posted.


    Ray

  • # Posted By Brian Kotek | 4/6/06 3:41 PM

    Ray, just based on the fact that you ARE trying to learn new ideas, that you are passionate enough about the field to tackle more difficult things, and that you are humble enough to know that you have more to learn, you're already ahead of many of the people I've dealt with while recruiting for this position. Don't worry, you're never going to know it all. I am also self-taught and I know how you feel. It seems like I've been learning like crazy for many years, and I still have an endless list of things I want or need to learn. If it's not CF it's SQL. If it's not SQL it's patterns. If it's not patterns it's OOP. If it's not OOP it's Java. If it's not Java it's Ruby. If it's not Ruby it's project management. If it's not....you get the idea. ;-)

    Basically I think you might be selling yourself a little short.

  • # Posted By kitty | 4/6/06 5:47 PM

    I can really relate to what Ray's saying.

    He's done great to pick up Reactor and be looking at Model-Glue. I feel frustrated because I so want to learn and understand OOP and the various frameworks, and be able to use them competently if not confidently.

    I want to be a better programmer, but there's no support or time at work for developing your skills, and because i'm so shattered from work, it's difficult to find regular quality time at home to try new ideas or learn new things. Thank gawd for the Coldfusion User Group meetings. At least i get a chance to see what real pros are working on.

    I've been using CF for a few years now and i feel i should be further ahead in my development than i am. The knock on effect being i don't feel confident to apply for senior positions. Most of the job opportunities available are for junior (ie 1-2 year experience) with crap money or senior (5yr+) but expecting you to lead a team, project manage and do Java!

    Like somebody said earlier where are the intermediate books to help you develop beyond being "okay" to being a good CF programmer with good habits. If we can't have a book, we need one definitive resource website, where everybody knows to go for user-friendly tutorials, good practice and explanations of all things CF.

    kitty

  • # Posted By Matt Williams | 4/6/06 6:18 PM

    Kitty and others are right that there isn't one easy source to learn this stuff. My recommendation would be to pick something and dive in. I think that the tutorial that gets you up and running the quickest is Joe's Model-Glue Quickstart (www.model-glue.com/quickstart/). It is easy to follow and gets you understanding the whole MVC-type framework quickly.

    From there you can decide if you want to learn more, try something else (Mach-II and OOP in general will be easier after doing his quickstart), or bail altogether.

    As far as finding the time, I have 3 young kids, a full-time job, and do some freelance work after hours. I was able to pick up some OOP concepts and Mach-II at home. Surely you can sacrifice a Sunday afternoon or an evening (skip your favorite reality show). It is an investment in your future.

  • # Posted By Tom Loyd | 4/6/06 6:19 PM

    Brian,
    Glad to see someone talking about this. I have a strange background in that my Bachelors is Linguistics/Japanese and minor in Spanish/TESL (I'm a language nut and am very interested in language acquisition (programming languages too)). I am pretty much a self-taught hardware/software/multimedia geek. Plus, to add some interest to the mixture, I am an active duty Air Force officer who does programming in my current job (career-broadening). In my real job I can't talk about what I do except that I go after bad guys. My only formal "programming" classes have all been in the MCSD track for .NET and also the MCDBA track for SQL Server 2000. I have been coding for about 3 1/2 years now and moonlighting as a web developer for many years on personal and small projects. I consider myself in the intermediate category of CF development because I REALLY like CF compared to .NET or other languages since I can get stuff done in it and now know it quite well. The funny thing was that my instructor for the above two tracks (I like to call him my "Code Daddy") used to hammer into our heads a couple of things. Since I started with the MCDBA track first I learned from him all the good practices of SQL coding (fortunately not just for MS) and the joys of Stored Procedures along with efficient database administration. This ended up being a good thing because I had a much better understanding and respect for database coding and database server maintenance since I learned from him how to be an efficient DBA and SQL coder. After that I had the same instructor for the MCSD .NET track and he would beat us over the head about good programming techniques like verbose documentation and making everything as reusable as possible so you didn't have to do a whole lot of redundant work. He also emphasized the importance of databases since they were the repository of your information and essentially the base of your whole application.

    .NET wasn't one of my favorite languages to code in because of the "code-behind" concept that I really didn't like and the amount of time it took to develop an app. So, one day while I was taking a break from my work and getting my geek on with the hardware gods, I noticed that we had a copy of CF Server 6.1 and talked them into loading it on to my webserver. I bought the respective WACK-job book and whacked my way through a CF app. Surprise! It worked and development time was way quicker than .NET (which quickly became .NOT in my book)! Yup, I converted quickly to CF. And talked them into getting me CF Server 7 when it came out. Since then, I was able to talk my work into sending me and one of the hardware gods out to MAX 2005 where I got some good training and learning there.

    I make an effort to keep up on all the wonderful CF-Blogs on the net. There's a lot of good information out there and all you guys that share your experiences allow an intermediate developer like myself to basically look over your shoulder to understand how and why you code the way you do. In fact, when I went out to MAX 2005 I was trying to see if I could recognize some of the Blog writers that I read. I also had the good fortune to sit right next to Sean Corfield in one of the seminars and watch him play around on that massive Mac that he had married to his lap (second-wife maybe?). It was fascinating to see them and also hear from some of them like Ray Camden and Simon Horwith. I was kinda torqued that Hal Helms fished on one of the seminars, but oh well, when you're a code-Ninja like him I guess that happens.

    Well, to make this rather long post shorter, I do use CFCs and some frameworks. Although, I really do tend to follow the Simon Horwith path of non-framework frameworks. Oh yeah, shout out to Neil Ross for theHub! I like its small footprint compared to the others. And, thanks for all your blogs!
    Tom

  • # Posted By Doug Laakso | 4/7/06 10:53 AM

    Ladies and Gentlemen,
    The problem is all of us. While many of us reading and writing blogs are learning the latest and greatest our co-workers and employer's are just trying to do the job.

    Bryan Kaiser ('The ColdFusion Podcast') said that colleges do not teach ColdFusion. Employer's are very spoiled by colleges teaching programming languages. If an employer wants better employee's they need to cultivate better employees. They need to train them, show them the respect they deserve. Set up mentoring programs. (Oh, how I wish I could work with people like Sean Corfield, Hal Helms or Ray Camden.) I have no doubt that if you do these things you will have, not only intermediate, but advanced programmers beating down your door.

    We programmer's need to work at this, too. We must spend 1 to 2 hours a day reading and learning new ideas, we need to mentor and/or promote ColdFusion. Tell your co-worker's about the latest and greatest and why you like it. Show your boss what you have done. Point to the happy client and say without that framework those changes would have taken months and not days. Your enthusiasm for what you do and how you do it will influence those around you.

  • # Posted By Nick | 4/8/06 4:34 AM

    I have pretty strong views on this.

    Background: I have a CS degree and many years' experience in enterprise programming. I know OO languages such as Java, C++, Ada and Smalltalk as well as plenty of procedural ones, and of course SQL, HTML etc. In my company I employ Java developers, CF developers, HTML people... whatever it takes to get a particular job done. I've used CF for 7 years and love its ease-of-use and functionality.

    The confusion shown in this thread between OO and frameworks is a symptom of the immaturity in the web development community (not just CF-ers) as regards software engineering. I see this in two groups of people in particular.

    Firstly, there are the masses of naive page-oriented semi-amateurs. Many of these people are doing a perfectly good job because the sites they are building are not complex.

    Secondly, there are the people who have grasped the fact that structure and method are required when building larger-scale software, but who do not have the breadth of vision, experience or self-confidence to understand that becoming a devotee of a particular ready-made "framework" is not the only way of achieving this. They either become fanatics about a particular framework or become framework junkies, always looking for the next magic bullet. Often, when they have learned the terminology of a particular method, they make it a barrier to communication or a way of hiding their own deficiencies. Devotees of "design patterns" are the worst offenders. Many times I have heard a really bad design suggested, but made to sound impressive by the use of arcane terminology.

    I hire people in the first group (and train them) but I do not hire people in the second group. I find their blinkered approach tiresome. They fail to understand that the simplest design is usually the best. I prefer to get properly trained and experienced software engineers who are capable of rationally analysing requirements and using the appropriate software architecture for each project.

    The other thing that amazes me is people who complain about developers' lack of knowledge but aren't prepared to train them. It doesn't take long. I have had a programmer turning out CFCs in his first day of using CF. Just set some standards and tell them to use them, for goodness' sake. Whoever said that using CFCs or not is just a matter of coding style, or the person who implied that a developer is responsible for the project management method, is clearly not a manager.

    Please. The definition of a good CF developer is *not* someone who keeps up with all the latest developments in Mach-II, Model-Glue or whatever. It's someone who produces documented, bug-free, efficient, secure, simple, readable code that meets requirements and is written according to the organisation's and project's standards.

  • # Posted By Roger Lancefield | 4/8/06 7:37 AM

    Thanks Nick, that was another very thoughtful and interesting contribution.

    Regarding your last paragraph, it seems to me that therein lies the rub. While I doubt that many would disagree with your definition of what constitutes a competent CF (or any other language) developer, I'm willing to bet that many of those who contribute to debates such as this one, particularly in the CF world, are to a greater or lesser extent _themselves_ responsible for creating the standards of which you speak for a particular project or company. Not many of us ever have the luxury (assuming you agree that it is such ;)) of senior architects or developers to set such standards. Many of us are indeed amateurs and novices from a CS point of view, and have found that frameworks have enabled us to provide our applications with something that is painfully absent in much sub-corporate (and by all accounts, much corporate as well) application building, namely coherence, predictable structure and (reasonably) objective standards or methodologies. For many of us working alone, or else in teams where, from a formal architectural point of view, it has been a case of the blind leadng the blind, then frameworks have proved to be a tool of very great worth indeed.

    To those well-schooled in formal CS theory and with long experience of corporate development environments, newbies and amateurs obsessing and waxing lyrical about frameworks must be both amusing and tiresome in equal measure. While I accept everything you say about the importance of using the right tool(s) for the job, and about the OO vs framework confusion, I still think that frameworks have provided many of us with one of the most palpably useful tools we have yet found.

    It also seems to me that implementing a framework as the basis for application building is a great leveller. FWs provide a basic structure and an architectural lingua franca that all developers can learn and come up to or (crucially at times) throttle back to. This common 'hymn sheet' effect seems particularly evident in blogs and fora dealing with architecture and framework issues, for they often serve as a meeting point for developers at all levels of knowledge and experience, who not all that many moons ago would rarely have had conversations. FWs seem to provide a common platform and approach that enables developers at all levels of experience to work together, or at least agree on a common approach. The less experienced will typically need to raise their game, the more experienced may need to accept some 'limitations' on their freewheeling, custom approach, but for many, although obviously not all, projects and applications this can surely only be a good thing?

  • # Posted By Phillip Senn | 4/14/06 8:57 AM

    When do you guys train?
    Sometime during 8-5 Monday-Friday, or do you train outside of normal business hours (like I do)?
    When you go to a conference, do you have to take vacaction days and pay for it yourself (like I do)?

  • # Posted By Brian Kotek | 4/14/06 9:23 AM

    Philip, I'm not sure if you are responding to the original blog post (which has nothing to do with training per se) or someone else's comment. Personally, I get very little paid corporate training, so yes I train myself after work almost every night, and I do pay for my own training if I think the class will be worth it and the company won't pay (which they usually won't).

  • # Posted By Sean Corfield | 4/14/06 11:03 AM

    When I was freelance, I would take time off from paid work and pay for myself to go to training courses and conferences, mostly during the week although that didn't really matter to me. I typically spent up to about $5k per year on training and conferences.

    When I work for corporates that have a training budget, courses and conferences tend to during work hours (although it doesn't matter if it is a weekend) and it is paid for by the company and considered work time.

  • # Posted By James Ruzicka | 4/14/06 6:17 PM

    Interesting posts. My 2 cents. On one hand I feel that the engineering principles are crucial to the success of a project, while on the other hand I see individuals creating excel and Access applications to bypass the red-tape and greatly increased cost of developing web applications with a fully integrated software engineering process (CMMI, etc.) that now encompasses most web development departments in large organizations. A new concept to most CF developers.

    In my ten years of developing in small business, govt agencies, and fortune 500 companies, I have seen a lot of coding styles. I do notice that, the smaller the business the more efficient it needs to run and this is where you find the best talent. As you can see, more small businesses are adopting frameworks. In itself is a testimony to frameworks effectiveness. Why frameworks some ask, it is because they help in reducing bugs and easier and quicker to maintain, and there is no arguing that.

    As for the lack of talent out there; How about this: a comp sci grad with a masters degree developing elementary spaghetti code and barely 1st normalization database designs. He is currently finishing up his PHD (piled higher and deeper) and is going to become a professor. If we want to solve the problem with lack of talent across all languages it needs to start by weeding people like this out. I wonder if you can find the same scenario in China or India?

  • # Posted By Phillip Senn | 4/14/06 10:38 PM

    > a comp sci grad with a masters degree developing elementary spaghetti code and barely 1st normalization database designs.

    I suppose that irony is not lost on the programming profession. People have long sneered at MBA's who cost the company wheelbarrels full of money with their grand schemes.
    BTW, I'm a comp sci grad, and will have a Masters degree in Library and Information Studies in May. Yeah!

  • # Posted By Richard Clark | 5/22/06 12:58 PM

    I'm convinced that the reason for this divide is the lack of good documentation that can take a smart beginner and give him enough information to let him know how to use these new tools and why he should bother. I struggle with these questions every day. Can someone please write an English sentence that tells me why I need ColdSpring, please? Can someone show me a meaty Model-Glue application and show me what the parts do without resorting to straight jargon? The two camps on either side of the divide speak different languages, and there isn't a Geek to Newb translation option in Google.

  • # Posted By Brian Kotek | 5/22/06 1:14 PM

    Richard, the lack of good documentation is almost always a problem with non-commercial software. Most folks have full time jobs, and then on top of that spend time trying to learn all the new ideas that keep pouring out. This isn't specific to the ColdFusion world. The framework creators do their best to provide basic docs, sample apps, and the community is constantly producing articles and blog posts on these subjects.

    With regard to your two questions:

    1) From the ColdSpring home page: ColdSpring's core focus is to make the configuration and dependencies of your CFCs easier to manage. ColdSpring uses the "inversion-of-control" pattern to "wire" your CFCs together. Also part of ColdSpring is the first Aspect-Oriented-Programming (AOP) framework for CFCs.

    2) There are several examples of Model-Glue applications, including my bookstore sample app available in the links pod in the sidebar. Ray Camden has a whole series of blog posts on using Model-Glue. Creating sample applications is a double-edged sword: if you make them too simple, people fail to grasp the purpose behind using the framework, and if you make them too complex, people can't follow what is going on and give up. Unfortunately there is no perfect middle ground.

  • # Posted By Calvin | 5/23/06 8:14 AM

    Brian,

    I think the following items in your response may constitute 'jargon'

    inversion-of-control pattern (most 'newbs' to use Richard's response aren't aware of patterns, much less specific ones.).

    It's even possible that many newer developers don't think about 'configuring' CFCs! So why would it be important to manage their configuration?

    Aspect-Oriented-Programming simply isn't on the radar for many 'newbs' as well.

    Just some random thoughts....

  • # Posted By Phillip Senn | 5/23/06 8:27 AM

    Calvin,

    Here here.

  • # Posted By Brian Kotek | 5/23/06 9:40 AM

    Calvin, I can understand that someone might not know what "inversion of control" is. I didn't the first time I heard it. However, I did a simple Google search and found over 18 million results, and the first result is a full explanation of the pattern by Martin Fowler. In other words, while I wouldn't expect everyone to know what it is, I do expect someone to be able to do some very simple research. In this case, one has a full paper by a guru available to you within 10 seconds of starting their search.

    In more general terms, if someone isn't aware of patterns at all, or why one would want to "configure" a CFC, then there is a vast amount of background information that would have to be conveyed before any of this really starts making sense. It would be like trying to tell someone who doesn't know anything about cars how to rebuild their transmission. These things really do have to be learned in layers, one at a time.

    I suppose the real message here is that since the framework creators are so busy improving the frameworks and creating basic docs and sample apps, a good amount of responsiblity falls on the developer/student to take the initiative and research the information that is already out there on the subject. As the framework stabilizes, one would hope that more effort can be directed at learning materials and step-by-step guides that go from foundations to more advanced topics. But I think it's going to take a little while for that to happen.

    Thanks for your comment,

    Brian

  • # Posted By Phillip Senn | 5/25/06 2:57 PM

    OK, I have to revise what I said on 4/14/06 because my manager told me yesterday that the company will pay for my conference ticket and hotel room.

    But I had to kind of walk out on faith to get this one.

  • # Posted By Jack London | 6/1/06 9:17 PM

    I think i need to explain my situation.

    I am a CF developer who follows every new techniques and apply them in all new projects. I like MG, Mach-II and Fusebox but these are always problem for me. I changed 4 position within last 2 years because of problems with stupid collegues and managers. They really do not want new things. They just want to have a finished project. Nobody cares which tools you have used etc. When I suggest new things than I am a bad example for our dummy developers and they are lazy and against all my activities.

    I think to be clever more than expected is also not a good solution. I am working for a new company now and I am just looking to finish my duties without any suggestion. I just ask which method do they prefer and company policies and apply them for my project. I am more comfortable now. :)

    Who cares when a project takes more time. This is just a problem for project manager. Not for me as a developer! :)

  • # Posted By Sean Corfield | 6/1/06 10:58 PM

    Jack, sorry to hear that your colleagues and employers are so closed to new ideas. That's always something I try to establish in an interview - is my potential employer open to new ideas and tools. I wouldn't be happy working anywhere that treated me badly for trying to improve processes and increase productivity through tools and frameworks.

    While I'm here, I'm also going to defend Brian's assertion that if you don't understand a term, it's easy enough to look it up or, heck, ask people on a mailing list. There's no excuse for remaining ignorant of new technology or terminology. I've been doing IT for about 25 years now (argh!) and I'm always looking stuff up on Google and buying (and reading) books that people recommend on new technology thinking. I remember struggling to come to terms with OO (I started with C++ just over 14 years ago) and it was really painful at first but I didn't "blame" others for my inability to understand OO: I kept trying things out, reading a lot and asking people who knew better.

  • # Posted By Barry Whitley | 6/2/06 11:37 AM

    .. also posted this over on Rob Gonda's blog...

    It’s interesting that this topic keeps coming up recently. My company has just gone through a large (by our standards) expansion, and so we’ve spent the last two months trying to fill about 6 positions. Not all of them were strictly CF positions, but we were still looking for CF experienced devs as our primary filter (as in, while the job may not have very much CF work, and ASP.net dev would do us no good). A couple of them were strictly mid to senior level CF dev positions, though, and for all of these positions the hiring process was painful to say the least.

    I think several factors went into this:

    1.   Probably most important are the low unemployment rates right now. There are tons of tech jobs out there right now, and not that many power CF users. Just getting qualified people in front of us was hard, and I don’t think that is CF’s fault for the most part. Sure the available pool of experienced CF devs is far smaller than ASP or PHP (and maybe even Java), but they are still out there. The reality, though, is that there is lots of work out there for them right now, and the good ones have jobs…

    2.   Frameworks, CFC’s, and the whole OOP thing is still very new. Yeah, they’ve been around for a few years, and Fusebox for a few years longer, but for many many CF devs they have not hit maturity until only the last year or two. There is very little penetration yet into the dev community. Hell, I’ve been doing this stuff for years, and until only recently (and only due to a new job with large scope projects) the advantages of using them was just not there.

    Some others have touched on this already, but the reality of most CF projects is that they are small, on tight budgets (or are cheap freelance work), and are using CF in large part due to its RAD capabilities. Adding the overhead of more complex (in initial setup/planning time) development environments can often times undermine the advantages of using CF in the first place.

    As someone who is currently in the process of trying to switch a company over to CF from a proprietary language, I know all too well that trying to convince the other management that it is worthwhile to sink a month or two of dev time into creating the “proper” foundation for the move is HARD. Most CF devs aren’t in a position where they can even attempt this at all.

    3.   There are VERY few companies that undertake large software projects in CF. With the exception of a few major hotspots around North America, you will not find devs who have spent time working on large projects. Because of this, it is extremely hard to find people who have been an environment that had any training, any planning, or even any real roadmap. The vast majority that I have interviewed (and this was myself a few years ago too) worked on teams of one or two, often had multiple responsibilities (most often some IT support work), and little or no guidance on what was being developed other than “I need a place for sales to post documents and record sales contacts.”

    4.   For most of its life, CF has been almost a secondary language. Lots of people start using it solely because it was the simplest thing to learn. Heck, a couple of my devs now were English majors. Comp Sci majors do not go into Cold Fusion careers. CS guys get C# or ASP.NET or Java positions. The perception, while changing a lot, is still that the web is the bastard step child of programming and that really talented people do desktop application development. We’ve been turned down by kids just out of school because they weren’t interested in the web languages stuff before. My company does really cool work too (sports media), yet for many people starting careers CF development is seen as a dead end career move in some ways. While this may or may not be accurate (I think it can be in some ways), there is definitely an uphill battle when trying to convince coding superstars that programming video subscription services is more exciting than going down the road and building games with EA or helicopter targeting systems with the defense contractors in town. If you have a company building low tier shopping carts for local flower shops you can forget about getting any of these people at all.

    Tied into this, is the fact that ColdFusion is not taught very many places. Students do not come out of school with any CF knowledge, and many don’t even know it exists. These people all did Java or C++ and when job hunting, they look there first. When they get those jobs, they then start themselves careers based on those languages. Most of those also pay a lot more money at the mid to senior levels, and money talks. So you end up with a self perpetuating cycle where people enter the professional world as C++ devs, get experience at it, and then the money and current career path keep them locked into it. Barring some internal shift in their company, they will never have any reason to change, and in most cases a change would be counter-productive.


    5.   That gap in skilled/smart/driven CS types means that quite a few of the CF devs out there are self taught, and many of those are not programmers first. This doesn’t mean that they are all bad, but it does mean that you’re going to find a whole bunch of people who don’t care about performance, don’t understand OOP, have no idea what a large scale team project is, don’t worry about maintainability, and probably don’t go around coding A* pathfinding in flex app in their spare time.

    So is there a gap? Absolutely, no doubt about it. The only solution I can see to it won’t fix your problems fast, either. Those of us involved in serious application development will just have to bite the bullet and try switch our focus to kids in school and convincing new grads to give it a whirl. Take some internships on, or just create some part time positions, pay a lot better than a job in the bookstore, and then try to drag in some CS guys who otherwise might have gone into programming machine learning systems on UNIX boxes. Get them hooked into the business with some real experience, and then try hard to retain the great ones for as long as possible afterwards.

    We’ve done that here, and while in the short term we don’t have the output we’d really like, but in the long term our 4 current students will hopefully turn into at least 2 solid CF superstars that we’ll have for several more years.

  • # Posted By Marcantonio Silva | 6/7/06 10:58 AM

    Brian,

    Your link to the job post is broken, it shoud point to:
    http://www.induscorp.com/main/main.cfm?f=/joboutpu... (I'g guess you just misspelled the positionId).

    Regarding your post, I would say that this kind of level differences between developer self-developing skilss are not a ColdFusion specefic issue. Of course some technologies are more open to innovation, and a new branded one, like Rails for an instance, would logically atract the "early adopters", that's why most of Ruby developers are guys who are ahead of the average, regarding development tecnhiques and methodologies. ColdFusion is ooooold, I've been doing CF for more thant 10 years now, and more often that I would like I find people who, as you said, don't even know how to develop a CFC, although they are writing CF code for 3,4 years and even more.

    Letting you or your company out of the new development would be a downgrade, and this seems to be a rethorical question anyway, isn't ? We don't want to develop CF 4.5 code, do we? So why would I want to write plain CFML, with no frameworks, no OO and no design patterns? I rather would spend some time teaching my team how to do it the new (and right) way.

    Nice subject, by the way...
    Marcantonio

  • # Posted By Craig M. Rosenblum | 6/30/06 11:34 AM

    I really like the comments, it's nice to not be completely alone...

    I think we may have things we disagree about, but I really respect how we all care to create great web applications.

    But the main thing we all need is training...

    I think if we as a community can help crack that nut, we'll help oursevles tremendously.

    One possibility is regularly scheduled breeze chats/presentations...

    I loved it when we had the different macrochats, if i could get the time...

    But maybe make it more of teach/practice/test environment so we can learn, prove we learned, and then test as part of aiming towards improving ourselves and our cf community.

    In honesty, i'd rather be civilized, and try to help us all, get better training.

    Then better exposure to new technologies, and maybe as part of a more interactive community more, whether it be by a global instant message universe, where we can im each other about coldfusion problems, and globaly share methods/concepts/ideas of solving common/unique problems.

    I think we need new approaches to help grow our community, I don't have all the answers, but I'd love in any way to help.

    Let's get it going my fellow cf brothers and sisters!

  • # Posted By Phillip Senn | 7/3/06 3:16 PM

    Amen brother!
    Tell it!

  • # Posted By Phillip Senn | 10/20/06 6:59 PM

    Craig,

    Over on another blog, http://bennadel.com/index.cfm?dax=blog:360.view
    Ben wondered aloud if there were any mentoring going on.

    And Ray Camden is talking about a cfJedi Users group.
    I wonder if the pillars of the cf Community could put together a curricula to go from cfZero to cfHero?
    Or is that the job of Adobe?

  • # Posted By Brian Kotek | 10/20/06 11:56 PM

    I'm not on this contract at the government any more, but I can say that at that job mentoring was a core focus of mine and our group. Some of us had OO experience (my friend Qasim Rasheed). Some of us were SQL gurus (I thought I knew SQL pretty well, until I started working with Beth Bowden, whose SQL knowledge is almost ridiculous). Some of us were JavaScript ninjas (again, not me, but Mike Britton). And some of us were UI sledgehammers (again, Mike).

    We made a point to have regular lunch meetings to discuss books or go over topics to educate the group. When someone had a problem, they didn't bang their head against the monitor for 2 days, they asked for help. And they got it.

    This was a great environment, and one that I would hope any other development shop would love to emulate and expand upon. These are the sorts of things that make the group feel like they are learning something, and expanding their horizons and skill sets.

  • # Posted By Javier Julio | 10/21/06 4:48 PM

    I just want to point out something from another post. Colleges ARE teaching ColdFusion! In fact some teach more then just a beginner level course! For example, the community college I attended (Montgomery College in Maryland) offers a regular CF course (CA278) and an advanced one (CA288) while there is only 1 course for PHP. Yes only 1 for PHP and 2 for CF. I'm sure you can tell I don't like PHP. :) The point is CF is being taught at colleges and more should jump on the bandwagon. I continue to return to the CF courses taught at my local community college to speak about new things in CF. I'll be making a presentation next week on some of the cool aditions to CFMX7 (cftrace, cftimer, cfdocument, easy stuff for the noobs to enjoy). Although my area (Washington Metropolitan Area) is a real mecca for CF so that probably explains it. Nonetheless I have to agree with Brian as it is hard to find CF developers that keep up with the latest in CF such as frameworks and OOP. In fact I know Ben Forta had posted about something similar to this a few weeks ago saying the vast majority of CFers don't know what a CFC is let alone have used one.