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.
Computer
Science
2
n
(Level 0)
Doesn't
know
the difference
between Array
and
LinkedList
Unable to find
the average
of
numbers in an
array (It's hard
to
believe but
I've
interviewed
such
cand
idates)
n
2
(Level 1)
Able to explain
and use
Arrays, LinkedLists,
Dictionaries
etc in practical
programming tasks
n (Level
2)
Knows space and time tradeoffs of
the
basic data structures, Arrays
vs
LinkedLists, Able to explain
how
hashtables can be implemented and
can
handle collisions, Priority queues
and ways to
implement them etc.
log(n) (Level
3)
Knowledge of advanced
data structures
like B-trees,
binomial and fibonacci
heaps,
AVLRed Black trees,
Splay Trees, Skip Lists,
tries
etc.
Able to recognize and
code
dynamic programming
solutions, good
knowledge
of graph algorithms,
good
knowledge of numerical
computation
algorithms,
able to identify NP
problems
etc.
Working with
someone who
has a
good
topcoder
ranking would
be
an
unbelievable
piece of
luck!
Comments
data
structures
algorithms
Basic sorting,
searching and
data structure traversal
and
retrieval algorithms
Tree, Graph, simple
greedy and divide
and conquer algorithms, is
able to
understand the relevance of the
levels
of this
matrix.
systems
programming
Basic
understanding of
compilers, linker
and
Doesn't knowinterpreters.
Understands
what awhat assembly code is
and
compiler, linkerhow things work at
the
or interpreter ishardware level.
Some
knowledge of virtual
memory and
paging.
Understands the entire
programming
stack,
Understands kernel mode vs.
user
hardware (CPU + Memory +
mode, multi-
threading, synchronization
Cache + Interrupts
+
primitives and how they're
microcode),
binary code,
implemented, able to read
assembly
assembly, static and
code.
Understands how networks
dynamic
linking,
work, understanding of
network
compilation,
interpretation,
protocols and socket
level
JIT compilation,
garbage
programming.
collection, heap,
stack,
memory addressing...
Software
Engineering
source code
version
control
2
n
(Level 0)n
2
(Level
1)
n (Level 2)
Proficient in using CVS and
SVN
features. Knows how to branch and
merge,
use patches setup repository
properties
etc.
Can setup a script to build the
basic
system
log(n) (Level 3)
Knowledge
of distributed
VCS systems. Has tried
out
BzrMercurialDarcsGit
Can setup a script
to build
the system and also
documentation,
installers,
generate release notes and
tag
the code in source
control
Understands and
is able to
setup
automated
functional,
loadperformance and
UI
tests
Comments
Folder backupsVSS and
beginning
by dateCVSSVN
user
build
automation
Only knows
how
to build
from IDE
Thinks that all
testing
is the
job of the
tester
Knows how to
build the
system from the
command
line
Has written automated
unit
tests and comes up with
good unit test
cases for the
code that is being
written
automated
testing
Has written
code in TDD manner
Programming
2
n
(Level 0)
Only straight
line
code with
copy paste for
reuse
n
2
(Level 1)
n (Level 2)log(n) (Level 3)
Use of
appropriate data
structures and
algorithms
and comes up with
genericobject-
oriented code
that encapsulate aspects
of
the problem that are subject
to
change.
Able to visualize and design
Comment
s
problem
decomposition
Able to break up
problem
into multiple functions
Able to come
up with reusable
functionsobjects that solve
the overall
problem
systems
decomp
osition
Not able to
think above
the level
of a
single fileclass
Able to break up
problem
space and design solution asAble to
design systems that span
long as it is within
the samemultiple technologiesplatforms.
platfor
mtechnology
complex systems with
multiple
product lines and
integrations with
external
systems. Also should be
able to
design operations
support systems
like
monitoring, reporting, fail
overs
etc.
This is an often
under rated
but
very critical
criteria for
judging
a
programmer.
With the
increase
in
outsourcing of
programming
tasks to
places
Able to understand andwhere
English
communicateis not
the
thoughtsdesignideasspecsnative tongue
in
a unambiguous mannerthis issue has
and adjusts
communicationbecome more
as per the
contextprominent. I
know of
several
projects
that failed
because
the
programmers
could
not
understand
what the intent
of
the
communication
was.
File has license
header,
summary, well commented,
consistent
white space
usage. The file should
look
beautiful.
log(n) (Level 3)Comments
Cannot
express
thoughtsideas
communicatio
n
to peers. Poor
spelling
and
grammar.
Peers can understand what
is
being said. Good spelling
and grammar.
Is
able to effectively communicate
with
peers
code
organization
within a
file
code
organization
across
files
no evidence of
organization
within a
file
2
n
(Level 0)
No thought
given
to
organizing
code across
files
Methods
are grouped
logically or by
accessibility
n
2
(Level 1)
Related
files are grouped
into a folder
Code is
grouped into regions and well
commented with
references to other
source files
n (Level
2)
Code organization at a
physical level
closely
Each physical file has a unique
purpose,
matches design and looking
for e.g.
one class definition, one feature
at file names
and folder
implementation etc.
distribution
provides
insights into design
The
difference
between this
and the
previous
item is
in the scale
of
organization,
source
tree
organization
relates to the
entire
set of
artifacts that
define
the
system.
source
tree
organization
Everything in
one
folder
Basic separation of code
into logical
folders.
No circular dependencies, binaries,
libs,
docs, builds, third-party code
all
organized into appropriate
folders
Physical layout of source
tree
matches logical
hierarchy and
organization.
The directory names
and
organization provide
insights into the
design of
the
system.
code
readability
Mono-
syllable
names
Good names for
files,
variables classes, methods
etc.
No
long functions, comments
explaining unusual
code, bug fixes,
code assumptions
Makes sure
to check return values and
check for exceptions
around code that
can fail.
n (Level
2)
defensive
coding
Doesn'tChecks
all arguments and
understand theasserts
critical assumptions
conceptin
code
2
n
(Level 0)n
2
(Level
1)
Code assumptions are
verified using
asserts, code
flows naturally - no
deep
nesting of conditionals
or
methods
Has his own library to
help
with defensive coding,
writes unit
tests that
simulate faults
log(n) (Level
3)
Codes to detect possible
exception
before, maintain
consistent
exception
Comments
Basic error handling
around
Ensures that errorexceptions
leave
error handling
Basic error
handling around
Only codes the
code that can
throw
happy case
exceptionsgenerate
errors
program in good state,
resources,
connections and memory is all
cleaned
up properly
handling strategy in
all
layers of code, come up
with guidelines
on
exception handling for
entire
system.
Has written custom macros
Has
written libraries that sit
on top of the API
to
simplify frequently used
tasks and to fill
in gaps in
the API
Author of
framework
log(n) (Level 3)Comments
E.g. of
API can
be Java library,
.net
framework
or the custom
API for
the
application
IDE
Mostly uses
IDE
for text
editing
Knows their way around
the
Knows keyboard shortcuts for
most
interface, able to effectively
used
operations.
use the IDE using menus.
Vast
and In-depth knowledge of the
API
Has used
more than one framework in
a professional
capacity and is well-
versed with the idioms of
the
frameworks.
n (Level 2)
API
Needs
to look
up theHas the most
frequently
documentationused APIs in
memory
frequently
Has not used
any
framework
outside of the
core
platform
2
n
(Level 0)
Takes the
given
requirements
and codes
to
spec
No knowledge
of
scripting
tools
Has heard about but
not
used the popular
frameworks available
for
the platform.
n
2
(Level
1)
Come up with questions
regarding missed
cases in
the spec
Batch filesshell
scripts
frameworks
requirements
Able
to suggest better
Understand complete picture
and come
alternatives and flows to
up with
entire areas that need to be
given requirements
based
speced
on experience
PerlPythonRuby
VBScriptPowershell
Has written and
published
reusable
code
scripting
database
Thinks
that
Excel is a
database
Knows basic
database
concepts, normalization,
ACID,
transactions and can
write simple
selects
Can do basic
database
administration,
performance
optimization,
index optimization, write
Able
to design good and normalized
advanced select
queries,
database schemas keeping in mind
the
able to replace cursor usage
queries
that'll have to be run, proficient
with
relational sql,
in use of views, stored
procedures,
understands how data is
triggers
and user defined types. Knows
stored
internally,
difference between clustered and
non-
understands how indexes
clustered
indexes. Proficient in use of
are stored
internally,
ORM tools.
understands how
databases
can be mirrored, replicated
etc.
Understands how the
two phase commit
works.
Experience
2
n
(Level
0)
languages withImperative or
professionalO
bject
experienceOriented
platforms
with
professional
experience
years
of
professional
experience
n
2
(Level 1)
Imperative, Object-Oriented
and
declarative (SQL),
added bonus if
they
understand static vs
dynamic typing,
weak vs
strong typing and static
inferred
types
2-3
2-5
n (Level 2)log(n) (Level
3)Comments
Functional, added bonus if
they
understand lazy evaluation,
currying,
continuations
Concurrent (Erlang,
Oz) and
Logic (Prolog)
1
1
4-5
6-9<
br>6+
10+
domain
knowledge
No
knowledge
of the domain
Has worked on at
least one
product in the domain.
Domain
expert. Has
designed and implemented
several
productssolutions
Has worked on multiple
products in the
in the domain. Well
versed
same domain.
with standard
terms,
protocols used in
the
domain.
Knowledge
2
n
(Level 0)n
2
(Level 1)
n (Level 2)log(n)
(Level 3)Comments
2
n
(Level
0)
tool
knowledge
Limited to
primary
IDE
(,
Eclipse etc.)
n
2
(Level
1)
Knows about some
alternatives to popular
and
standard tools.
Good knowledge of
editors,
debuggers, IDEs, open
source
alternatives etc. etc. For e.g.
someone
who knows most of the tools
from
Scott Hanselman's power tools list.
Has
used ORM tools.
Has actually written
tools
and scripts, added bonus if
they've
been published.
languages
exposed
to
Imperative
or
Object
Oriented
Imperative, Object-
Oriented
and declarative (SQL),
added bonus
if theyFunctional, added bonus if
they
understand static vsunderstand lazy
evaluation, currying,
dynamic typing, weak
vscontinuations
strong typing and
static
inferred types
Basic knowledge of
the
code layout and how to
build the
system
Good working knowledge of code
base,
has implemented several bug
fixes and maybe some
small features.
Has downloaded the
alpha
previewCTPbeta and read
some
articlesmanuals
n (Level 2)
Deep
knowledge of platform internals
and can
visualize how the platform
takes the program
and converts it into
executable
code.
Concurrent (Erlang, Oz) and
Logic
(Prolog)
codebase
knowledge
Has
never
looked at the
codebase
Has not
heard
of
the
upcoming
technologies
2
n
(Level 0)
Zero
knowledge
of
platform
internals
knowledge
of
upcoming
technologies
Has heard
of upcoming
technologies in the
field
n
2
(Level 1)
Has basic
knowledge of
how the platform
works
internally
Has implemented
multiple
big features in the codebase
and
can easily visualize the
changes required for
most
features or bug fixes.
Has played with
the
previews and has actually
built
something with it and
as a bonus shared that
with
everyone else
log(n) (Level 3)
Has
written tools to
enhance or
provide
information on platform
internals.
For e.g.
disassemblers,
decompilers,
debuggers etc.
Structure and
Interpretation
of Computer
Programs,
Concepts Techniques,
Models of
Computer
Programming, Art of
Computer
Programming,
Database systems , by C.
J
Date, Thinking Forth,
Little
Schemer
Maintains a blog in
which
personal insights and
thoughts on
programming
are shared
Comments
platform<
br>internals
books
Unleashed
series, 21
days
series, 24
hour
series,
dummies
series...
Code
Complete, Don't
Make me Think,
Mastering
Regular Expressions
Design
Patterns, Peopleware,
Programming Pearls,
Algorithm
Design Manual,
Pragmatic
Programmer, Mythical Man
month
blogs
Reads
Has heard
oftechprogrammingsoftwareMaintains a link blog
with some
them but neverengineering blogs
andcollection of useful articles and tools
got
the s to podcaststhat heshe has
collected
regularly.
Thanks to John
Haugeland for a reformatting of it that works much
more nicely on the web.