[thelist] CF: Advanced? How do you know?

.jeff jeff at members.evolt.org
Thu Aug 1 02:37:01 CDT 2002


frank,

><><><><><><><><><><><><><><><><><><><><><><><><><><><><><
> From: Frank
>
> If you were looking for a developer to partner with, or
> contract out to, what are the benchmarks that you would
> use to determine whether or not his is advanced? What
> are some of the questions you would ask him or her
> (rather than giving a test. Tests to prove your mettle,
> but tests aren't something you give until you're pretty
> convinced that this person might indeed be advance).
><><><><><><><><><><><><><><><><><><><><><><><><><><><><><

here's a list off the top of my head of things that i'd hope an advanced developer at least understood and preferably had worked with at least once or twice.

 - structures
   - how would you go about determining all the keys
     in a structure and their values?  the less than
     advanced developer will say something like do a
     list loop over the list created by calling the
     StructKeyList() function.  the more advanced
     developer will say he'd either use a for/in
     loop in a <cfscript> block or a collection
     <cfloop>.
   - how would you access a key in a structure
     dynamically?  if they have some experience with
     structures they'll probably either say they'd
     use the Evaluate(), StructGet(), or StructFind()
     functions.  if they're advanced they'll use
     bracket notation.
   - how would you determine if a key in a structure
     existed before trying to access it, thereby
     avoiding an error?  the less experienced
     developer would use the IsDefined() function.
     The advanced developer would use the
     StructKeyExists() function.
   - what scopes are exposed as structures in a
     normal template in cf5?  cgi, url, form,
     session, application, request, cookie (i would
     not be surprised if you had folks with fusebox
     experience list the attributes scope as being
     a scope available in a normal template request,
     though it never has been and never will be).
   - what scopes are exposed as structures in a
     custom tag in cf5?  attributes, cgi, url, form,
     session, application, request
   - what scopes are *not* exposed as structures?
     variables, server, caller
 - lists
   - for performance, what should you do prior
     to looping over the contents of a list?
     convert it to an array using the ListToArray()
     function.
   - how would you determine how many words are in a
     string?  ListLen(myString, " ")
   - is there a difference between these two lists --
     "a,b,c,,e,f,g" and "a,b,c, ,e,f,g" besides the
     space between the commas?  the first has one
     fewer elements than the second.
 - csv string parsing
   - name three ways to work with csv string, most
     likely to do a mass import into a database
     without bulk copy capabilities?
     - parse it as a cr/lf delimited list and parse
       each list element as a comma or tab
       delimited list
     - use a custom tag developed for reading csv
       data
     - use the <cfhttp> tag.
   - which of the three methods would you use? when
     and why?
     - lists -- try to avoid wherever possible
     - custom tag -- for fixed width data
     - <cfhttp> whenever possible
 - <cfscript>
   - how much do they use it, when, and why?  make
     code more readable by doing large groups of
     sets in a <cfscript> block instead of a bunch
     of <cfset> tags
   - do they know how to output a query within a
     <cfscript> block?
   - can they write a udf?
 - database/cf code
   - some things you're better off letting the
     database do the work, name a couple.
     sorting, concatenation, bulk insert, deleting
     child data when parent data is deleted,
     retrieving aggregate data (avg, sum, max,
     etc.), etc.
   - you should *never* see the <cfquery> tag
     inside of a query <cfoutput> or query <cfloop>
   - are they adept enough to be able to know when
     to it's better to use a join and not a
     subselect and vice versa
   - name 3 tags that can create a query.
     <cfquery>, <cfhttp>, <cfdirectory>, <cfpop>,
     <cfldap>, <cfregistry>, <cfsearch>, <cfwddx>,
     <cfscript>, <cfstoredproc>, <cfmodule>.  some
     of these are trick answers, but nonetheless
     can create a query.
   - do they know how/when to use stored
     procedures, views, and other more complex
     database techniques beyond simple select
     statements
   - can they rationalize when and when not to
     use cached queries?
   - do they use <cfqueryparam> when using
     text strings in queries on publicly
     accessible applications?
   - do they know how to properly architect a
     group of database tables for one-to-many
     and many-to-many assocations?
 - consistency
   - how consistent is the developer in the
     things they develop?
   - is there a methodology they use when
     developing apps?  things like indenting,
     directory structure for applications,
     naming schemes for files, variables, and
     database tables and columns should be
     descriptive, concise, and consistent.
   - are they careful to variabize anything that
     gets used more than once or twice in their
     applications like datasource names, folder and
     file paths, email addresses, etc.?
 - function use
   - do they use Trim() to force data to it's
     minimum length?
   - do you see conditionals with checks like
     <cfif url.id EQ 0> or like <cfif NOT
     Val(url.id)>?  do you see conditionals like
     <cfif url.keywords EQ ""> or like <cfif NOT
     Len(url.keywords)>?
 - do they have experience with verity?
 - do they have large, complicated conditionals
   or neat, concise switch statements?

i know there's a fair amount i'm still missing, but hopefully this, combined with the other responses you've gotten, will give you a start.

good luck,

.jeff

http://evolt.org/
jeff at members.evolt.org
http://members.evolt.org/jeff/





More information about the thelist mailing list