My Take On What Makes An Expert ColdFusion Developer
Posted By : todd sharp Posted At : May 17, 2011 9:58 AM Posted In: ColdFusion
9
Ray Camden blogged this morning What's An Expert ColdFusion Developer. It's a good post that folks should read because he makes some good points about some skills and qualities make up an upper tier CF dev.
I certainly don't mean to steal Ray's thunder if he planned a followup, but his post got me thinking about those who might not yet be an expert and how they might get to that point. Ray cited some major points that he'd use to consider a developer an 'expert' which I'll summarize as follows. I'm over simplifying things here and adding my interpretation in parenthesis:
- Know how/where to find answers when you're stuck (problem solving)
- Have an understanding of the ColdFusion Application Server (performance tuning)
- Recognize code that can be made better (best practices)
I like that he addresses problem solving first off. I've said it before in conversations on Twitter and in person, but I truly believe that good/great developers are true problem solvers. They are absolute bulldogs when it comes to finding an answer and perhaps even lose sleep when it comes to figuring out a solution to a challenge their code has presented them. This is a quality that I would value almost higher then any other quality if I were hiring a developer because it shows tenacity and passion for the work that they're doing. Passion can not be underestimated and I'd hire a PHP developer with good problem solving skills over a mid-level 9-5 CF'er any day. Great developers don't have a switch that turns off at the end of the day. This passion usually manifests itself as a desire to consume blogs and Twitter feeds related to the language/tool/framework that they prefer to work with as well as a healthy respect for the languages/tools/frameworks that they do not choose to work with. We all have preferences but to turn a blind eye to the competition is ignorant. No business survives by ignoring what the 'other guy' is doing so why should a developer assume that nothing good is happening outside of their own realm?
I don't have much to say about performance tuning other then I agree with Ray's assessment. You should know that ColdFusion runs on Java. You should know basic ColdFusion admin settings and how they affect an application in production. An expert take an app that initializes in 60+ seconds and make it start up in less then 2 seconds with about 5 minutes worth of simple tuning. Beyond that, as Ray said, you should know about the tools at your disposal and know who to call (and possibly hire) should things get above your head.
I like Ray's third quality as much as I like the first one. To me this is about gut feeling. It's a quality, like passion and tenacity that can not be taught but can be fostered. You should be able to immediately 'sense' when code is not 'right' and be able to refactor as needed. At the same time you should know when it's "OK" to move past a block of code that isn't the prettiest instead of wasting time and interrupting your mental flow to solve a problem. But an expert will always come back to that code and refactor it to make it 'right'.
In addition to the points above I'd also add that Expert level devs can read a block of code and understand the flow and what is going on regardless of the language. They may not be able to write code in that language but let's be honest, as long as we're not talking about BrainF*ck (Google it), code is code.
Experts are, to a certain extent, born with the abilities that make them experts. They've just taken the necessary time and displayed enough passion to take advantage of those abilities. It's also true that a person who displays the qualities mentioned above but who has yet to rise within their field can some times present solutions to problems that even shock the experts within their field. Consider a few of the 'happy accidents' that have changed the world (via):
The discovery of penicillin, for example, was the result of Alexander Fleming noting the formation of mold on the side of petri dish left uncleaned overnight. Vulcanized Rubber was discovered in 1839 when Charles Goodyear accidentally dropped a lump of the polymer substance he was experimenting with onto his wife's cook stove. More recently, 3M's post-it was also the result of an accident in the lab. Breakthroughs aren't always about invention, but the intervention required, by the aspiring innovator, to notice something new, unexpected, and intriguing.
If you love developing and have the passion and gut feel that it takes to become an expert then you will become an expert. If you're punching a clock and expecting others to hand you solutions then you're in the wrong field.

I found both yours and Ray's article very useful for the main reason that it showed what I am missing in becoming a better developer.
Best practices and performance tuning are the two areas where I could probably work out if I had to, but I wouldnt think to much about unless it was actually making a noticable difference to the application.
I am wondering, is there a CF guide to best practices somewhere? My knowledge of CF has only grown from the CF8 Application construction kit books, the docs and my own developing experience. So i feel this is something that my brain is kinda ignorant a bit of
Similar deal with performance tuning - is there an overview of performance tuning in CF that I could use for my knowledge or as a reference?
http://wiki.coldbox.org/wiki/DevelopmentBestPracti...
http://tutorial178.easycfm.com/
There's some gray area when it comes to best practices - especially when you get into area that are subjective like case (camelCase vs under_scores) and naming conventions (qryTest vs getTest vs test). The most important thing when it comes to the gray areas is consistency. Choose a standard for you (or your organization) and *stick with it* -- it'll make your code more readable and eventually make everyone happier down the line. I'd also add that learning an MVC framework is important to ensure a maintainable codebase.
As far as performance tips - there are tons of them available on the blogs that Ray mentioned (Mike Brunt, etc) but you can also find some general guides via google too. Here's a few:
http://192.150.16.60/devnet/coldfusion/articles/co...
http://www.webapper.com/blog/index.php/2009/08/03/...
There's not a (recent) all-encompassing admin guide that I'm aware of ... maybe I'll look into putting one together (with advice from others of course).
Really? Are you talking about just throwing more RAM at the JVM or breaking the startup process into a lazy-loading implementation or what? Either way, 5 minutes from diagnosis to remedy sounds pretty far fetched.
If not please distribute the wisdom, thanks.
http://www.birthdaybless.com/
http://www.prestigepackersmovers.com/
http://www.maxfortrelocation.com/movers-packers-pu...