Programmer Competency Matrix

巡山小妖精
938次浏览
2020年07月30日 15:52
最佳经验
本文由作者推荐

关于人生哲理的名言-辞职申请书


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.

英语手抄报设计图-大会总结


春节菜谱-巴金的名言


上海开放大学成绩查询-凯文职业学院


城镇居民医疗保险新政策-学业水平测试成绩查询


母爱作文500字-高考祝福的话


美丽的心灵-成都市人事考试中心


广告活动策划书-圣诞节多少号


法制小报内容-检讨书2000字