Programmer Competency Matrix
Programmer Competency Matrix
Note that the knowledge for each level is cumulative; being at level n implies that you also know everything from the levels lower than n.
ComputerScience
2n(Level0)
n2(Level1)
n(Level2)
log(n)(Level3)
datastructures
Doesn'tknow
thedifference
betweenArray
andLinkedList
Abletoexplainanduse
Arrays,LinkedLists,
Dictionariesetcinpractical
programmingtasks
Knowsspaceandtimetradeoffsof
thebasicdatastructures,Arraysvs
LinkedLists,Abletoexplainhow
hashtablescanbeimplementedand
canhandlecollisions,Priorityqueues
andwaystoimplementthemetc.
Knowledgeofadvanced
datastructureslikeBtrees,
binomialandfibonacci
heaps,AVL/RedBlacktrees,
SplayTrees,SkipLists,tries
etc.
algorithms
Unabletofind
theaverageof
numbersinan
array(It'shard
tobelievebut
I've
interviewed
such
candidates)
Tree,Graph,simplegreedyanddivide
andconqueralgorithms,isableto
understandtherelevanceofthelevels
ofthismatrix.
Abletorecognizeandcode
dynamicprogramming
solutions,goodknowledge
ofgraphalgorithms,good
knowledgeofnumerical
computationalgorithms,
abletoidentifyNP
problemsetc.
Understandskernelmodevs.user
mode,multithreading,
synchronizationprimitivesandhow
they'reimplemented,abletoread
assemblycode.Understandshow
networkswork,understandingof
networkprotocolsandsocketlevel
programming.
Understandstheentire
programmingstack,
hardware(CPU+Memory+
Cache+Interrupts+
microcode),binarycode,
assembly,staticand
dynamiclinking,
compilation,interpretation,
JITcompilation,garbage
collection,heap,stack,
memoryaddressing...
systems
programming
Doesn'tknow
whata
compiler,
linkeror
interpreteris
Basicsorting,searchingand
datastructuretraversaland
retrievalalgorithms
Basicunderstandingof
compilers,linkerand
interpreters.Understands
whatassemblycodeisand
howthingsworkatthe
hardwarelevel.Some
knowledgeofvirtual
memoryandpaging.
Comments
Workingwith
someonewho
hasagood
topcoder
rankingwould
bean
unbelievable
pieceofluck!
SoftwareEngineering
sourcecode
versioncontrol
2n(Level0)
Folderbackups
bydate
n2(Level1)
n(Level2)
log(n)(Level3)
VSSandbeginningCVS/SVN
user
ProficientinusingCVSandSVN
features.Knowshowtobranchand
merge,usepatchessetuprepository
propertiesetc.
Knowledgeofdistributed
VCSsystems.Hastriedout
Bzr/Mercurial/Darcs/Git
Cansetupascripttobuildthebasic
system
Cansetupascripttobuild
thesystemandalso
documentation,installers,
generatereleasenotesand
tagthecodeinsource
control
build
automation
Onlyknows
howtobuild
fromIDE
Knowshowtobuildthe
systemfromthecommand
line
automated
testing
Thinksthatall
testingisthe
jobofthe
tester
Haswrittenautomatedunit
testsandcomesupwith
goodunittestcasesforthe
codethatisbeingwritten
HaswrittencodeinTDDmanner
Understandsandisableto
setupautomated
functional,
load/performanceandUI
tests
n2(Level1)
n(Level2)
log(n)(Level3)
Abletocomeupwithreusable
functions/objectsthatsolvethe
overallproblem
Useofappropriatedata
structuresandalgorithms
andcomesupwith
generic/objectoriented
codethatencapsulate
aspectsoftheproblemthat
aresubjecttochange.
Comments
Programming
problem
decomposition
systems
2n(Level0)
Onlystraight
linecodewith
copypastefor
reuse
Notableto
thinkabove
Abletobreakupproblem
intomultiplefunctions
Abletobreakupproblem
spaceanddesignsolutionas
Abletodesignsystemsthatspan
Abletovisualizeanddesign
complexsystemswith
multipleproductlinesand
integrationswithexternal
Comments
decomposition
communication
thelevelofa
singlefile/class
Cannot
express
thoughts/ideas
topeers.Poor
spellingand
grammar.
longasitiswithinthesame
platform/technology
Peerscanunderstandwhat
isbeingsaid.Goodspelling
andgrammar.
multipletechnologies/platforms.
systems.Alsoshouldbe
abletodesignoperations
supportsystemslike
monitoring,reporting,fail
oversetc.
Isabletoeffectivelycommunicate
withpeers
Abletounderstandand
communicate
thoughts/design/ideas/specs
inaunambiguousmanner
andadjustscommunication
asperthecontext
code
organization
withinafile
noevidenceof
organization
withinafile
Methodsaregrouped
logicallyorbyaccessibility
Codeisgroupedintoregionsandwell
commentedwithreferencestoother
sourcefiles
Filehaslicenseheader,
summary,wellcommented,
consistentwhitespace
usage.Thefileshouldlook
beautiful.
2n(Level0)
n2(Level1)
n(Level2)
log(n)(Level3)
code
organization
acrossfiles
Nothought
givento
organizing
codeacross
files
Eachphysicalfilehasaunique
purpose,fore.g.oneclassdefinition,
onefeatureimplementationetc.
Codeorganizationata
physicallevelclosely
matchesdesignandlooking
atfilenamesandfolder
distributionprovides
insightsintodesign
Relatedfilesaregrouped
intoafolder
Thisisanoften
underrated
butverycritical
criteriafor
judginga
programmer.
Withthe
increasein
outsourcingof
programming
taskstoplaces
whereEnglish
isnotthe
nativetongue
thisissuehas
becomemore
prominent.I
knowof
several
projectsthat
failedbecause
the
programmers
couldnot
understand
whattheintent
ofthe
communication
was.
Comments
Thedifference
sourcetree
organization
Everythingin
onefolder
Basicseparationofcode
intologicalfolders.
Nocirculardependencies,binaries,
libs,docs,builds,thirdpartycodeall
organizedintoappropriatefolders
Physicallayoutofsource
treematcheslogical
hierarchyandorganization.
Thedirectorynamesand
organizationprovide
insightsintothedesignof
thesystem.
code
readability
Monosyllable
names
Goodnamesforfiles,
variablesclasses,methods
etc.
Nolongfunctions,comments
explainingunusualcode,bugfixes,
codeassumptions
Codeassumptionsare
verifiedusingasserts,code
flowsnaturallynodeep
nestingofconditionalsor
methods
defensive
coding
Doesn't
understandthe
concept
Checksallargumentsand
assertscriticalassumptions
incode
Makessuretocheckreturnvaluesand
checkforexceptionsaroundcode
thatcanfail.
Hashisownlibrarytohelp
withdefensivecoding,
writesunitteststhat
simulatefaults
2n(Level0)
n2(Level1)
n(Level2)
log(n)(Level3)
errorhandling
Onlycodesthe
happycase
Basicerrorhandlingaround
codethatcanthrow
exceptions/generateerrors
Ensuresthaterror/exceptionsleave
programingoodstate,resources,
connectionsandmemoryisall
cleanedupproperly
Codestodetectpossible
exceptionbefore,maintain
consistentexception
handlingstrategyinall
layersofcode,comeup
withguidelineson
exceptionhandlingfor
entiresystem.
IDE
Mostlyuses
IDEfortext
editing
Knowstheirwayaroundthe
interface,abletoeffectively
usetheIDEusingmenus.
Knowskeyboardshortcutsformost
usedoperations.
Haswrittencustommacros
API
Needstolook
upthe
documentation
frequently
Hasthemostfrequently
usedAPIsinmemory
VastandIndepthknowledgeofthe
API
Haswrittenlibrariesthatsit
ontopoftheAPItosimplify
frequentlyusedtasksandto
fillingapsintheAPI
Hasnotused
anyframework
outsideofthe
Hasheardaboutbutnot
usedthepopular
frameworksavailablefor
Hasusedmorethanoneframeworkin
aprofessionalcapacityandiswell
versedwiththeidiomsofthe
frameworks
Authorofframework
betweenthis
andthe
previousitem
isinthescale
of
organization,
sourcetree
organization
relatestothe
entiresetof
artifactsthat
definethe
system.
Comments
E.g.ofAPIcan
beJavalibrary,
.netframework
orthecustom
APIforthe
application
coreplatform
theplatform.
frameworks.
2n(Level0)
n2(Level1)
n(Level2)
log(n)(Level3)
requirements
Takesthe
given
requirements
andcodesto
spec
Comeupwithquestions
regardingmissedcasesin
thespec
Understandcompletepictureand
comeupwithentireareasthatneed
tobespeced
Abletosuggestbetter
alternativesandflowsto
givenrequirementsbased
onexperience
scripting
Noknowledge
ofscripting
tools
Batchfiles/shellscripts
Perl/Python/Ruby/VBScript/Powershell
Haswrittenandpublished
reusablecode
Knowsbasicdatabase
concepts,normalization,
ACID,transactionsandcan
writesimpleselects
Abletodesigngoodandnormalized
databaseschemaskeepinginmind
thequeriesthat'llhavetoberun,
proficientinuseofviews,stored
procedures,triggersanduserdefined
types.Knowsdifferencebetween
clusteredandnonclusteredindexes.
ProficientinuseofORMtools.
Candobasicdatabase
administration,
performanceoptimization,
indexoptimization,write
advancedselectqueries,
abletoreplacecursorusage
withrelationalsql,
understandshowdatais
storedinternally,
understandshowindexes
arestoredinternally,
understandshowdatabases
canbemirrored,replicated
etc.Understandshowthe
twophasecommitworks.
2n(Level0)
n2(Level1)
n(Level2)
log(n)(Level3)
Imperativeor
Object
Oriented
Imperative,ObjectOriented
anddeclarative(SQL),
addedbonusifthey
understandstaticvs
dynamictyping,weakvs
strongtypingandstatic
inferredtypes
Functional,addedbonusifthey
understandlazyevaluation,currying,
continuations
Concurrent(Erlang,Oz)and
Logic(Prolog)
database
Thinksthat
Excelisa
database
Comments
Experience
languageswith
professional
experience
Comments
platformswith
professional
experience
23
45
6+
yearsof
professional
experience
25
69
10+
Hasworkedonatleastone
productinthedomain.
Hasworkedonmultipleproductsin
thesamedomain.
Domainexpert.Has
designedandimplemented
severalproducts/solutions
inthedomain.Wellversed
withstandardterms,
protocolsusedinthe
domain.
n2(Level1)
n(Level2)
log(n)(Level3)
Limitedto
primaryIDE
(VS.Net,
Eclipseetc.)
Knowsaboutsome
alternativestopopularand
standardtools.
Goodknowledgeofeditors,
debuggers,IDEs,opensource
alternativesetc.etc.Fore.g.someone
whoknowsmostofthetoolsfrom
ScottHanselman'spowertoolslist.
HasusedORMtools.
Hasactuallywrittentools
andscripts,addedbonusif
they'vebeenpublished.
Imperativeor
Object
Oriented
Imperative,ObjectOriented
anddeclarative(SQL),
addedbonusifthey
understandstaticvs
dynamictyping,weakvs
strongtypingandstatic
inferredtypes
Functional,addedbonusifthey
understandlazyevaluation,currying,
continuations
Concurrent(Erlang,Oz)and
Logic(Prolog)
Hasnever
lookedatthe
codebase
Basicknowledgeofthe
codelayoutandhowto
buildthesystem
Goodworkingknowledgeofcode
base,hasimplementedseveralbug
fixesandmaybesomesmallfeatures.
Hasimplementedmultiple
bigfeaturesinthecodebase
andcaneasilyvisualizethe
changesrequiredformost
featuresorbugfixes.
domain
knowledge
Noknowledge
ofthedomain
Knowledge
tool
knowledge
languages
exposedto
codebase
knowledge
2n(Level0)
Comments
knowledgeof
upcoming
technologies
Hasnotheard
ofthe
upcoming
technologies
2n(Level0)
platform
internals
Zero
knowledgeof
platform
internals
Hasheardofupcoming
technologiesinthefield
Hasdownloadedthealpha
preview/CTP/betaandreadsome
articles/manuals
Hasplayedwiththe
previewsandhasactually
builtsomethingwithitand
asabonussharedthatwith
everyoneelse
n2(Level1)
n(Level2)
log(n)(Level3)
Deepknowledgeofplatforminternals
andcanvisualizehowtheplatform
takestheprogramandconvertsitinto
executablecode.
Haswrittentoolsto
enhanceorprovide
informationonplatform
internals.Fore.g.
disassemblers,decompilers,
debuggersetc.
Hasbasicknowledgeof
howtheplatformworks
internally
books
Unleashed
series,21days
series,24hour
series,
dummies
series...
CodeComplete,Don'tMake
meThink,Mastering
RegularExpressions
DesignPatterns,Peopleware,
ProgrammingPearls,Algorithm
DesignManual,Pragmatic
Programmer,MythicalManmonth
StructureandInterpretation
ofComputerPrograms,
ConceptsTechniques,
ModelsofComputer
Programming,Artof
ComputerProgramming,
Databasesystems,byC.J
Date,ThinkingForth,Little
Schemer
blogs
Hasheardof
thembut
nevergotthe
time.
Reads
tech/programming/software
engineeringblogsand
listenstopodcasts
regularly.
Maintainsalinkblogwithsome
collectionofusefularticlesandtools
thathe/shehascollected
Maintainsabloginwhich
personalinsightsand
thoughtsonprogramming
areshared
Comments