Programmer Competency Matrix - Sijin Joseph
Programmer Competency Matrix - Sijin Joseph
com/about/)
(http://sijinjoseph.com/)
Computer Science
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
interviewed
able to ident
such
problems etc
candidates)
Understands
programmin
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
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
control
Understands
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
load/perform
tester code that is being written
tests
Programming
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
reuse
aspects of th
are subject t
Able to visua
complex sys
multiple pro
Not able to Able to break up problem
integrations
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
monitoring,
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
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.
distribution
les
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
methods
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
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.
Takes the
Able to sugg
given Come up with questions Understand complete picture and
alternatives
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
spec
No knowledge
Has written
scripting of scripting Batch les/shell scripts Perl/Python/Ruby/VBScript/Powershell
reusable cod
tools
Can do basic
administratio
performance
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
understands
clustered and non-clustered indexes.
are stored in
Procient in use of ORM tools.
understands
can be mirro
etc. Underst
two phase co
Experience
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+
experience
years of
professional 1 2-5 6-9 10+
experience
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
domain.
Knowledge
Has impleme
Has never Basic knowledge of the Good working knowledge of code big features
codebase
looked at the code layout and how to base, has implemented several bug and can easi
knowledge
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
technologies
everyone els
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
internally
internals executable code. disassemble
debuggers e
Structure an
of Computer
Unleashed
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
series
Date, Thinkin
Schemer
Reads
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
regularly.
Share this:
2&url=https%3A%2F%2Fround-lake.dustinice.workers.dev%3A443%2Fhttp%2Fsijinjoseph.com%2Fprogrammer-
competency-
117 Comments
matrix%2F&media=https%3A%2F%2Fround-lake.dustinice.workers.dev%3A443%2Fhttp%2Fsijinjoseph.com%2Fwp-
Add your comment
content%2Fuploads%2F2016%2F05%2Fsijin-2016-s-
135x150.png&description=Programmer%20Competency%20Matrix)
matrix/comment-page-6/#comment-7480)
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.
matrix/comment-page-6/#comment-7490)
>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
considered.
Philip Attisano
(Https://Www.Facebook.Com/App_scoped_user_id/2003996742947
August 25, 2017 at 08:48 (http://sijinjoseph.com/programmer-competency-matrix/comment-page-
6/#comment-7492)
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
139 Trackbacks
1. ??????????????????? | SAP???? (http://blog.sapchina.net/540.html) (Pingback)
2. ??????????????????? - ????
(http://hack.hk.cn/2017/07/06/%e5%af%b9%e5%bc%80%e5%8f%91%e8%80%85%e6%9c%89%e
(Pingback)