Anda di halaman 1dari 8

About (http://sijinjoseph.


Programmer Competency Matrix (


Perspectives on Software, Technology and Business

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

2n (Level 0) n2 (Level 1) n (Level 2) log(n) (Level

Knows space and time tradeos of Knowledge o

Doesnt know Able to explain and use the basic data structures, Arrays vs data structu
the dierence Arrays, LinkedLists, LinkedLists, Able to explain how binomial and
data structures
between Array Dictionaries etc in practical hashtables can be implemented and heaps, AVL/R
and LinkedList programming tasks can handle collisions, Priority queues Splay Trees,
and ways to implement them etc. etc.

Unable to nd
Able to reco
the average of
dynamic pro
numbers in an
Tree, Graph, simple greedy and divide solutions, go
array (Its hard Basic sorting, searching and
and conquer algorithms, is able to of graph algo
algorithms to believe but data structure traversal and
understand the relevance of the levels knowledge o
Ive retrieval algorithms
of this matrix. computation
able to ident
problems etc
Basic understanding of Understands kernel mode vs. user
hardware (C
compilers, linker and mode, multi-threading,
Doesnt know Cache + Inte
interpreters. Understands synchronization primitives and how
what a microcode),
systems what assembly code is and theyre implemented, able to read
compiler, assembly, st
programming how things work at the assembly code. Understands how
linker or dynamic link
hardware level. Some networks work, understanding of
interpreter is compilation,
knowledge of virtual network protocols and socket level
JIT compilat
memory and paging. programming.
collection, h
memory add

Software Engineering

2n (Level 0) n2 (Level 1) n (Level 2) log(n) (Level

Procient in using CVS and SVN

Knowledge o
source code Folder backups VSS and beginning CVS/SVN features. Knows how to branch and
VCS systems
version control by date user merge, use patches setup repository
properties etc.

Can setup a
the system a
Only knows Knows how to build the
build Can setup a script to build the basic documentat
how to build system from the command
automation system generate rel
from IDE line
tag the code

Thinks that all Has written automated unit
setup autom
automated testing is the tests and comes up with
Has written code in TDD manner functional,
testing job of the good unit test cases for the
tester code that is being written


2n (Level 0) n2 (Level 1) n (Level 2) log(n) (Level

Use of appro
structures an
Only straight
Able to come up with reusable and comes u
problem line code with Able to break up problem
functions/objects that solve the generic/obje
decomposition copy paste for into multiple functions
overall problem code that en
aspects of th
are subject t

Able to visua
complex sys
multiple pro
Not able to Able to break up problem
systems think above space and design solution as Able to design systems that span
systems. Als
decomposition the level of a long as it is within the same multiple technologies/platforms.
able to desig
single le/class platform/technology
support syst
overs etc.
Cannot Able to unde
express communicat
Peers can understand what
thoughts/ideas Is able to eectively communicate thoughts/de
communication is being said. Good spelling
to peers. Poor with peers in a unambig
and grammar.
spelling and and adjusts c
grammar. as per the co

File has licen

code no evidence of Code is grouped into regions and well summary, w
Methods are grouped
organization organization commented with references to other consistent w
logically or by accessibility
within a le within a le source les usage. The

2n (Level 0) n2 (Level 1) n (Level 2) log(n) (Level

Code organiz
No thought
physical leve
code given to Each physical le has a unique
Related les are grouped matches des
organization organizing purpose, for e.g. one class denition,
into a folder at le names
across les code across one feature implementation etc.
insights into

Physical layo
tree matche
No circular dependencies, binaries, hierarchy an
source tree Everything in Basic separation of code
libs, docs, builds, third-party code all The director
organization one folder into logical folders.
organized into appropriate folders organization
insights into
the system.
Code assump
Good names for les, No long functions, comments veried using
code Mono-syllable
variables classes, methods explaining unusual code, bug xes, ows natura
readability names
etc. code assumptions nesting of co

Has his own

Doesnt Checks all arguments and Makes sure to check return values and
defensive with defensi
understand the asserts critical assumptions check for exceptions around code
coding writes unit te
concept in code that can fail.
simulate fau

2n (Level 0) n2 (Level 1) n (Level 2) log(n) (Level

Codes to det
exception be
Ensures that error/exceptions leave consistent ex
Basic error handling around
Only codes the program in good state, resources, handling stra
error handling code that can throw
happy case connections and memory is all layers of cod
exceptions/generate errors
cleaned up properly with guidelin
exception ha
entire system

Mostly uses Knows their way around the

Knows keyboard shortcuts for most
IDE IDE for text interface, able to eectively Has written
used operations.
editing use the IDE using menus.

Needs to look Has written

up the Has the most frequently Vast and In-depth knowledge of the on top of the
documentation used APIs in memory API frequently u
frequently ll in gaps in

Has not used Has heard about but not Has used more than one framework in
any framework used the popular a professional capacity and is well-
frameworks Author of fra
outside of the frameworks available for versed with the idioms of the
core platform the platform. frameworks.

2n (Level 0) n2 (Level 1) n (Level 2) log(n) (Level

Takes the
Able to sugg
given Come up with questions Understand complete picture and
requirements requirements regarding missed cases in come up with entire areas that need
given require
and codes to the spec to be speced
on experienc

No knowledge
Has written
scripting of scripting Batch les/shell scripts Perl/Python/Ruby/VBScript/Powershell
reusable cod
Can do basic
index optimi
Able to design good and normalized
advanced se
database schemas keeping in mind
able to repla
Knows basic database the queries thatll have to be run,
Thinks that with relation
concepts, normalization, procient in use of views, stored
database Excel is a understands
ACID, transactions and can procedures, triggers and user dened
database stored intern
write simple selects types. Knows dierence between
clustered and non-clustered indexes.
are stored in
Procient in use of ORM tools.
can be mirro
etc. Underst
two phase co


2n (Level 0) n2 (Level 1) n (Level 2) log(n) (Level

Imperative, Object-Oriented
and declarative (SQL),
languages with Imperative or added bonus if they Functional, added bonus if they
Concurrent (
professional Object understand static vs understand lazy evaluation, currying,
Logic (Prolog
experience Oriented dynamic typing, weak vs continuations
strong typing and static
inferred types

platforms with
professional 1 2-3 4-5 6+

years of
professional 1 2-5 6-9 10+

Domain expe
designed and
several prod
domain No knowledge Has worked on at least one Has worked on multiple products in
in the domai
knowledge of the domain product in the domain. the same domain.
with standar
protocols us


2n (Level 0) n2 (Level 1) n (Level 2) log(n) (Level

Good knowledge of editors,

Limited to debuggers, IDEs, open source
Knows about some Has actually
tool primary IDE alternatives etc. etc. For e.g. someone
alternatives to popular and and scripts, a
knowledge (VS.Net, who knows most of the tools from
standard tools. theyve been
Eclipse etc.) Scott Hanselmans power tools list.
Has used ORM tools.
Imperative, Object-Oriented
and declarative (SQL),
Imperative or added bonus if they Functional, added bonus if they
languages Concurrent (
Object understand static vs understand lazy evaluation, currying,
exposed to Logic (Prolog
Oriented dynamic typing, weak vs continuations
strong typing and static
inferred types

Has impleme
Has never Basic knowledge of the Good working knowledge of code big features
looked at the code layout and how to base, has implemented several bug and can easi
codebase build the system xes and maybe some small features. changes req
features or b

Has played w
Has not heard
knowledge of Has downloaded the alpha previews and
of the Has heard of upcoming
upcoming preview/CTP/beta and read some built someth
upcoming technologies in the eld
technologies articles/manuals as a bonus sh
everyone els

2n (Level 0) n2 (Level 1) n (Level 2) log(n) (Level

Has written t
Zero Deep knowledge of platform internals enhance or p
Has basic knowledge of
platform knowledge of and can visualize how the platform information
how the platform works
internals platform takes the program and converts it into internals. Fo
internals executable code. disassemble
debuggers e

Structure an
of Computer
Concepts Te
series, 21 days Design Patterns, Peopleware,
Code Complete, Dont Make Models of Co
series, 24 hour Programming Pearls, Algorithm
books me Think, Mastering Programmin
series, Design Manual, Pragmatic
Regular Expressions Computer Pr
dummies Programmer, Mythical Man month
Database sys
Date, Thinkin

Has heard of Maintains a b
tech/programming/software Maintains a link blog with some
them but personal insi
blogs engineering blogs and collection of useful articles and tools
never got the thoughts on
listens to podcasts that he/she has collected
time. are shared

Thanks to John Haugeland ( for a

reformatting of it that works much more nicely on the web.

Share this:

Share 847 Tweet 2 points 4,978 Share 3.8K

Save (


Add your comment

Steven June 25, 2017 at 19:31 (


Mo (and anyone else wondering what n is equal to):

The labels reference Big-O notation. They describe the rate of change as n approaches
in nity; actually lling in n with any value (especially values that close to zero) is not a useful
application of the formula. If we assume that n is an in-comprehensively large number, then
think about the change in value between n and 1 + n. It will help to plot these on a graph
and remember that smaller values are better.

2^n is the square of 2^(n 1). This is the rate of gain as you bit-shift to the left: 2, 4, 8, 16, 32,
64, 128, 256, 512,1024, 2048, etc.
n^2 performs less awfully than 2^n at extremely large values, but still really poorly: 1, 4, 9,
16, 25, 36, 49, 64, 81, 100, 121, etc.
n is probably the rst rate where performance is predictably terrible: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10,
11, etc.
log(n) is an algorithm that sucks at very small values, but becomes great at large values: 0, 1,
1.6, 2, 2.3, 2.6, 2.8, 3, 3.2, 3.3, 3.5, etc.

Even at small values, the jump between n=10 and n=11 can be used to extrapolate the n=
(in nity) performance of these functions. Level 0 jumps a full 1024 units, while Level 1 jumps
only 21 units, Level 2 jumps by 1 unit, and level 3 jumps by less than 1 unit.

Anon August 3, 2017 at 10:34 (


>Blake Dietz

Their is plural. It would be better as his or her, but it also isnt even an issue, as he or his
has historically been a kind of English, neutered pronoun. His simply works better when
communicating in a terse, correct mode. Bias against women isnt intended or should even be
Philip Attisano
August 25, 2017 at 08:48 (


Ive been writing software for 10+ years, and this was a poignant reality check for me. My
programming theory vocabulary sucks. I constantly reference API docs. I rely heavily on the
IDE. I usually write core code in happy case and let exceptions bubble up the stack. I self-rank
somewhere around 1 or 2 (rarely 3). Either Im modest in my assessment, or damn Ive been
lazy! lol

Previous Comments (

Leave a Reply

Enter your comment here...

139 Trackbacks
1. ??????????????????? | SAP???? ( (Pingback)

2. ??????????????????? - ????

3. Programistyczne znaleziska #3 - macierz kompetencji, ankiweb, TLDRLegal -


2017 - Sijin Joseph Designed on rtPanel WordPress Theme Framework (