You are on page 1of 23

Programmer Competency Matrix

Note that the knowledge for each level is cumulative; being at level n implies that you also k
Level for self evaluation may range from -1.0 (I hate this) to 4.0 (I'm way above this)

Compu
2 (Level 0)
n

data structures Doesn't know the difference


between Array and LinkedList

algorithms Unable to find the average of


numbers in an array (It's hard to
believe but I've interviewed such
candidates)

systems programming Doesn't know what a compiler,


linker or interpreter is

Software
2 (Level 0)
n

source code version Folder backups by date


control

build automation Only knows how to build from IDE

automated testing Thinks that all testing is the job


of the tester

Prog
2n (Level 0)
problem decomposition Only straight line code with copy
paste for reuse
systems decomposition Not able to think above the level
of a single file/class

communication Cannot express thoughts/ideas to


peers. Poor spelling and
grammar.

code organization no evidence of organization


within a file within a file

code organization No thought given to organizing


across files code across files

source tree Everything in one folder


organization

code readability Mono-syllable names

defensive coding Doesn't understand the concept

error handling Only codes the happy case

IDE Mostly uses IDE for text editing

API Needs to look up the


documentation frequently
frameworks Has not used any framework
outside of the core platform

requirements Takes the given requirements and


codes to spec

scripting No knowledge of scripting tools

database Thinks that Excel is a database

Exp
2n (Level 0)
languages with Imperative or Object Oriented
professional experience

platforms with 1
professional experience

years of professional 1
experience
domain knowledge No knowledge of the domain

Kno
2n (Level 0)
tool knowledge Limited to primary IDE (VS.Net,
Eclipse etc.)

languages exposed to Imperative or Object Oriented


codebase knowledge Has never looked at the codebase

knowledge of upcoming Has not heard of the upcoming


technologies technologies

platform internals Zero knowledge of platform


internals

books Unleashed series, 21 days series,


24 hour series, dummies series...

blogs Has heard of them but never got


the time.
y Matrix
h level is cumulative; being at level n implies that you also know everything from the levels lower than n.
nge from -1.0 (I hate this) to 4.0 (I'm way above this)

Computer Science
n (Level 1)
2
n (Level 2)
Able to explain and use Arrays, Knows space and time tradeoffs
LinkedLists, Dictionaries etc in of the basic data structures,
practical programming tasks Arrays vs LinkedLists, Able to
explain how hashtables can be
implemented and can handle
collisions, Priority queues and
ways to implement them etc.
Basic sorting, searching and data Tree, Graph, simple greedy and
structure traversal and retrieval divide and conquer algorithms, is
algorithms able to understand the relevance
of the levels of this matrix.

Basic understanding of compilers, Understands kernel mode vs. user


linker and interpreters. mode, multi-threading,
Understands what assembly code synchronization primitives and
is and how things work at the how they're implemented, able to
hardware level. Some knowledge read assembly code. Understands
of virtual memory and paging. how networks work,
understanding of network
protocols and socket level
programming.
Software Engineering
n (Level 1)
2
n (Level 2)
VSS and beginning CVS/SVN user Proficient in using CVS and SVN
features. Knows how to branch
and merge, use patches setup
repository properties etc.
Knows how to build the system Can setup a script to build the
from the command line basic system

Has written automated unit tests Has written code in TDD manner
and comes up with good unit test
cases for the code that is being
written
Programming
n2 (Level 1) n (Level 2)
Able to break up problem into Able to come up with reusable
multiple functions functions/objects that solve the
overall problem
Able to break up problem space Able to design systems that span
and design solution as long as it multiple technologies/platforms.
is within the same
platform/technology

Peers can understand what is Is able to effectively communicate


being said. Good spelling and with peers
grammar.

Methods are grouped logically or Code is grouped into regions and


by accessibility well commented with references
to other source files

Related files are grouped into a Each physical file has a unique
folder purpose, for e.g. one class
definition, one feature
implementation etc.

Basic separation of code into No circular dependencies,


logical folders. binaries, libs, docs, builds, third-
party code all organized into
appropriate folders

Good names for files, variables No long functions, comments


classes, methods etc. explaining unusual code, bug
fixes, code assumptions

Checks all arguments and asserts Makes sure to check return values
critical assumptions in code and check for exceptions around
code that can fail.
Basic error handling around code Ensures that error/exceptions
that can throw leave program in good state,
exceptions/generate errors resources, connections and
memory is all cleaned up properly

Knows their way around the Knows keyboard shortcuts for


interface, able to effectively use most used operations.
the IDE using menus.
Has the most frequently used Vast and In-depth knowledge of
APIs in memory the API
Has heard about but not used the Has used more than one
popular frameworks available for framework in a professional
the platform. capacity and is well-versed with
the idioms of the frameworks.
Come up with questions regarding Understand complete picture and
missed cases in the spec come up with entire areas that
need to be speced

Batch files/shell scripts Perl/Python/Ruby/VBScript/Powers


hell
Knows basic database concepts, Able to design good and
normalization, ACID, transactions normalized database schemas
and can write simple selects keeping in mind the queries
that'll have to be run, proficient
in use of views, stored
procedures, triggers and user
defined types. Knows difference
between clustered and non-
clustered indexes. Proficient in
use of ORM tools.

Experience
n2 (Level 1) n (Level 2)
Imperative, Object-Oriented and Functional, added bonus if they
declarative (SQL), added bonus if understand lazy evaluation,
they understand static vs currying, continuations
dynamic typing, weak vs strong
typing and static inferred types
2-3 4-5

2-5 6-9

Has worked on at least one Has worked on multiple products


product in the domain. in the same domain.

Knowledge
n2 (Level 1) n (Level 2)
Knows about some alternatives to Good knowledge of editors,
popular and standard tools. 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.
Imperative, Object-Oriented and Functional, added bonus if they
declarative (SQL), added bonus if understand lazy evaluation,
they understand static vs currying, continuations
dynamic typing, weak vs strong
typing and static inferred types
Basic knowledge of the code Good working knowledge of code
layout and how to build the base, has implemented several
system bug fixes and maybe some small
features.

Has heard of upcoming Has downloaded the alpha


technologies in the field preview/CTP/beta and read some
articles/manuals

Has basic knowledge of how the Deep knowledge of platform


platform works internally internals and can visualize how
the platform takes the program
and converts it into executable
code.
Code Complete, Don't Make me Design Patterns, Peopleware,
Think, Mastering Regular Programming Pearls, Algorithm
Expressions Design Manual, Pragmatic
Programmer, Mythical Man month

Reads Maintains a link blog with some


tech/programming/software collection of useful articles and
engineering blogs and listens to tools that he/she has collected
podcasts regularly.
s lower than n.

Weight

log(n) (Level 3) Comments


Knowledge of advanced data 1
structures like B-trees, binomial
and fibonacci heaps, AVL/Red
Black trees, Splay Trees, Skip
Lists, tries etc.

Able to recognize and code Working with someone who has 1


dynamic programming solutions, a good topcoder ranking would
good knowledge of graph be an unbelievable piece of luck!
algorithms, good knowledge of
numerical computation
algorithms, able to identify NP
problems etc.
Understands the entire 1
programming stack, hardware
(CPU + Memory + Cache +
Interrupts + microcode), binary
code, assembly, static and
dynamic linking, compilation,
interpretation, JIT compilation,
garbage collection, heap, stack,
memory addressing...

log(n) (Level 3) Comments


Knowledge of distributed VCS 1
systems. Has tried out
Bzr/Mercurial/Darcs/Git

Can setup a script to build the 1


system and also documentation,
installers, generate release notes
and tag the code in source control

Understands and is able to setup 1


automated functional,
load/performance and UI tests

log(n) (Level 3) Comments


Use of appropriate data 1
structures and algorithms and
comes up with generic/object-
oriented code that encapsulate
aspects of the problem that are
subject to change.
Able to visualize and design 1
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.
Able to understand and This is an often under rated but 1
communicate very critical criteria for judging a
thoughts/design/ideas/specs in a programmer. With the increase
unambiguous manner and adjusts in outsourcing of programming
communication as per the context tasks to places where English is
not the native tongue this issue
has become more prominent. 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, 1


well commented, consistent white
space usage. The file should look
beautiful.
Code organization at a physical 1
level closely matches design and
looking at file names and folder
distribution provides insights into
design
Physical layout of source tree The difference between this and 1
matches logical hierarchy and the previous item is in the scale
organization. The directory names of organization, source tree
and organization provide insights organization relates to the entire
into the design of the system. set of artifacts that define the
system.
Code assumptions are verified 1
using asserts, code flows
naturally - no deep nesting of
conditionals or methods
Has his own library to help with 1
defensive coding, writes unit
tests that simulate faults
Codes to detect possible 1
exception before, maintain
consistent exception handling
strategy in all layers of code,
come up with guidelines on
exception handling for entire
system.
Has written custom macros 1

Has written libraries that sit on E.g. of API can be Java library, 1
top of the API to simplify .net framework or the custom
frequently used tasks and to fill in API for the application
gaps in the API
Author of framework 1

Able to suggest better 1


alternatives and flows to given
requirements based on
experience
Has written and published 1
reusable code
Can do basic database 1
administration, performance
optimization, index optimization,
write advanced select queries,
able to replace cursor usage with
relational sql, understands how
data is stored internally,
understands how indexes are
stored internally, understands
how databases can be mirrored,
replicated etc. Understands how
the two phase commit works.

log(n) (Level 3) Comments


Concurrent (Erlang, Oz) and Logic 1
(Prolog)

6+ 1

10+ 1

Domain expert. Has designed and 1


implemented several
products/solutions in the domain.
Well versed with standard terms,
protocols used in the domain.

log(n) (Level 3) Comments


Has actually written tools and 1
scripts, added bonus if they've
been published.

Concurrent (Erlang, Oz) and Logic 1


(Prolog)
Has implemented multiple big 1
features in the codebase and can
easily visualize the changes
required for most features or bug
fixes.
Has played with the previews and 1
has actually built something with
it and as a bonus shared that with
everyone else
Has written tools to enhance or 1
provide information on platform
internals. For e.g. disassemblers,
decompilers, debuggers etc.

Structure and Interpretation of 1


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 1
personal insights and thoughts on
programming are shared
Self evaluation
Name:

Level Comment

0.0

0.0

0.0
0.0

0.0
Self Evaluation Summary
Name: 0

Competency Mark Approx. experience


Self Evaluation Le
Computer Science 0.0 0.0
Software Engineering 0.0 0.0
Computer Scienc
Programming 0.0 0.0
Experience 0.0 0.0 1.0
Knowledge 0.0 0.0
0.8
Global 0.00 0.0
0.5

Software Engineering
0.3

0.0

Programming
Self Evaluation Levels

Computer Science

1.0

0.8

0.5

ng Knowledge
0.3

0.0

Programming Experience
Table of experience approximation according to competency level
Competency Approximative Formula
level years of experience
0 0.0 2^n-1
0.1 0.1 2^n-1
0.2 0.1 2^n-1 28
0.3 0.2 2^n-1
0.4 0.3 2^n-1 26
0.5 0.4 2^n-1
24
0.6 0.5 2^n-1
0.7 0.6 2^n-1 22

Approximative years of experience


0.8 0.7 2^n-1
0.9 0.9 2^n-1 20
1 1.0 (n-1)^2+2^n-1
18
1.1 1.2 (n-1)^2+2^n-1
1.2 1.3 (n-1)^2+2^n-1 16
1.3 1.6 (n-1)^2+2^n-1
1.4 1.8 (n-1)^2+2^n-1 14
1.5 2.1 (n-1)^2+2^n-1
12
1.6 2.4 (n-1)^2+2^n-1
1.7 2.7 (n-1)^2+2^n-1 10
1.8 3.1 (n-1)^2+2^n-1
1.9 3.5 (n-1)^2+2^n-1 8
2 4.0 (n-2)+(n-1)^2+2^n-1
6
2.1 4.6 (n-2)+(n-1)^2+2^n-1
2.2 5.2 (n-2)+(n-1)^2+2^n-1 4
2.3 5.9 (n-2)+(n-1)^2+2^n-1
2.4 6.6 (n-2)+(n-1)^2+2^n-1 2
2.5 7.4 (n-2)+(n-1)^2+2^n-1 0
2.6 8.2 (n-2)+(n-1)^2+2^n-1 0
2.7 9.1 (n-2)+(n-1)^2+2^n-1
2.8 10.0 (n-2)+(n-1)^2+2^n-1
2.9 11.0 (n-2)+(n-1)^2+2^n-1
3 12.0 log(n-3+1)+(n-2)+(n-1)^2+2^n-1
3.1 13.1 log(n-3+1)+(n-2)+(n-1)^2+2^n-1
3.2 14.3 log(n-3+1)+(n-2)+(n-1)^2+2^n-1
3.3 15.6 log(n-3+1)+(n-2)+(n-1)^2+2^n-1
3.4 16.9 log(n-3+1)+(n-2)+(n-1)^2+2^n-1
3.5 18.2 log(n-3+1)+(n-2)+(n-1)^2+2^n-1
3.6 19.7 log(n-3+1)+(n-2)+(n-1)^2+2^n-1
3.7 21.2 log(n-3+1)+(n-2)+(n-1)^2+2^n-1
3.8 22.8 log(n-3+1)+(n-2)+(n-1)^2+2^n-1
3.9 24.5 log(n-3+1)+(n-2)+(n-1)^2+2^n-1
4 26.3 log(n-3+1)+(n-2)+(n-1)^2+2^n-1
petency level

Programmer Competency Matrix Level

1 2 3
level according to Programmer Competency Matrix
4
Authors
Original version Sijin Joseph April 2008 http://weblogs.asp.net/sjoseph/archive/2008/04/30/programmer-compe
Web version John Haugeland February 2009 http://www.indiangeek.net/programmer-competency-matrix/
Excel version Michel Bagnol July 2009 http://www.nodewave.com/programmer-competency-matrix
08/04/30/programmer-competency-matrix.aspx
mpetency-matrix/
ompetency-matrix

You might also like