0% found this document useful (0 votes)
17 views

Programmer Competency Matrix

The document outlines a programmer competency matrix with increasing levels of knowledge and skills. Level 1 involves proficiency with common data structures, algorithms, and source control. Level 2 adds knowledge of advanced data structures and dynamic programming solutions. Level 3 represents a deep understanding of programming concepts, data structures, algorithms, and version control systems.
Copyright
© © All Rights Reserved
Available Formats
Download as XLSX, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
17 views

Programmer Competency Matrix

The document outlines a programmer competency matrix with increasing levels of knowledge and skills. Level 1 involves proficiency with common data structures, algorithms, and source control. Level 2 adds knowledge of advanced data structures and dynamic programming solutions. Level 3 represents a deep understanding of programming concepts, data structures, algorithms, and version control systems.
Copyright
© © All Rights Reserved
Available Formats
Download as XLSX, PDF, TXT or read online on Scribd
You are on page 1/ 12

Programmer Competency

Note that the knowledge for each level is cumulative; being at level n implies
Computer Science
2n (Level 0) n2 (Level 1)

Able to explain and use


Doesn't know the Arrays, LinkedLists,
difference between Dictionaries etc in practical
data structures Array and LinkedList programming tasks

Unable to find the


average of numbers in
an array (It's hard to
believe but I've Basic sorting, searching and
interviewed such data structure traversal and
algorithms candidates) retrieval algorithms

Basic understanding of
compilers, linker and
interpreters. Understands
what assembly code is and
how things work at the
Doesn't know what a hardware level. Some
compiler, linker or knowledge of virtual memory
systems programming interpreter is and paging.
Software Engineering

source code version Folder backups by VSS and beginning CVS/SVN


control date user

Knows how to build the


Only knows how to system from the command
build automation build from IDE line

Has written automated unit


tests and comes up with good
Thinks that all testing unit test cases for the code
automated testing is the job of the tester that is being written
Programming

Only straight line code


with copy paste for Able to break up problem into
problem decomposition reuse multiple functions
Able to break up problem
Not able to think space and design solution as
above the level of a long as it is within the same
systems decomposition single file/class platform/technology

Cannot express
thoughts/ideas to Peers can understand what is
peers. Poor spelling being said. Good spelling and
communication and grammar. grammar.
no evidence of
code organization within a organization within a Methods are grouped logically
file file or by accessibility

No thought given to
code organization across organizing code across Related files are grouped into
files files a folder

Everything in one Basic separation of code into


source tree organization folder logical folders.

Good names for files, variables


code readability Mono-syllable names classes, methods etc.
Checks all arguments and
Doesn't understand asserts critical assumptions in
defensive coding the concept code

Basic error handling around


Only codes the happy code that can throw
error handling case exceptions/generate errors
Knows their way around the
Mostly uses IDE for interface, able to effectively
IDE text editing use the IDE using menus.
Needs to look up the
documentation Has the most frequently used
API frequently APIs in memory
Has not used any Has heard about but not used
framework outside of the popular frameworks
frameworks the core platform available for the platform.
Takes the given Come up with questions
requirements and regarding missed cases in the
requirements codes to spec spec
No knowledge of
scripting scripting tools Batch files/shell scripts

Knows basic database


concepts, normalization,
Thinks that Excel is a ACID, transactions and can
database database write simple selects
Experience

Imperative, Object-Oriented
and declarative (SQL), added
bonus if they understand
static vs dynamic typing, weak
languages with Imperative or Object vs strong typing and static
professional experience Oriented inferred types
platforms with
professional experience 1 3-Feb
years of professional
experience 1 5-Feb

No knowledge of the Has worked on at least one


domain knowledge domain product in the domain.
Knowledge

Knows about some


Limited to primary IDE alternatives to popular and
tool knowledge (VS.Net, Eclipse etc.) standard tools.
Imperative, Object-Oriented
and declarative (SQL), added
bonus if they understand
static vs dynamic typing, weak
Imperative or Object vs strong typing and static
languages exposed to Oriented inferred types

Basic knowledge of the code


Has never looked at layout and how to build the
codebase knowledge the codebase system
Has not heard of the
knowledge of upcoming upcoming Has heard of upcoming
technologies technologies technologies in the field

Zero knowledge of Has basic knowledge of how


platform internals platform internals the platform works internally

Unleashed series, 21
days series, 24 hour Code Complete, Don't Make
series, dummies me Think, Mastering Regular
books series... Expressions

Reads
tech/programming/software
Has heard of them but engineering blogs and listens
blogs never got the time. to podcasts regularly.
Programmer Competency Matrix
s cumulative; being at level n implies that you also know everything from the levels lower than n.

n (Level 2) log(n) (Level 3)

Knows space and time tradeoffs of the


basic data structures, Arrays vs
LinkedLists, Able to explain how Knowledge of advanced data structures like
hashtables can be implemented and can B-trees, binomial and fibonacci heaps,
handle collisions, Priority queues and AVL/Red Black trees, Splay Trees, Skip Lists,
ways to implement them etc. tries etc.

Able to recognize and code dynamic


Tree, Graph, simple greedy and divide programming solutions, good knowledge of
and conquer algorithms, is able to graph algorithms, good knowledge of
understand the relevance of the levels numerical computation algorithms, able to
of this matrix. identify NP problems etc.

Understands kernel mode vs. user Understands the entire programming stack,
mode, multi-threading, synchronization hardware (CPU + Memory + Cache +
primitives and how they're Interrupts + microcode), binary code,
implemented, able to read assembly assembly, static and dynamic linking,
code. Understands how networks work, compilation, interpretation, JIT compilation,
understanding of network protocols garbage collection, heap, stack, memory
and socket level programming. addressing...

Proficient in using CVS and SVN


features. Knows how to branch and
merge, use patches setup repository Knowledge of distributed VCS systems. Has
properties etc. tried out Bzr/Mercurial/Darcs/Git

Can setup a script to build the system and


also documentation, installers, generate
Can setup a script to build the basic release notes and tag the code in source
system control

Understands and is able to setup automated


Has written code in TDD manner functional, load/performance and UI tests

Use of appropriate data structures and


algorithms and comes up with
Able to come up with reusable generic/object-oriented code that
functions/objects that solve the overall encapsulate aspects of the problem that are
problem subject to change.
Able to visualize and design complex
systems with multiple product lines and
integrations with external systems. Also
should be able to design operations support
Able to design systems that span systems like monitoring, reporting, fail overs
multiple technologies/platforms. etc.

Able to understand and communicate


thoughts/design/ideas/specs in a
Is able to effectively communicate with unambiguous manner and adjusts
peers communication as per the context
Code is grouped into regions and well File has license header, summary, well
commented with references to other commented, consistent white space usage.
source files The file should look beautiful.

Code organization at a physical level closely


Each physical file has a unique purpose, matches design and looking at file names
for e.g. one class definition, one feature and folder distribution provides insights into
implementation etc. design

Physical layout of source tree matches


No circular dependencies, binaries, libs, logical hierarchy and organization. The
docs, builds, third-party code all directory names and organization provide
organized into appropriate folders insights into the design of the system.
No long functions, comments explaining Code assumptions are verified using asserts,
unusual code, bug fixes, code code flows naturally - no deep nesting of
assumptions conditionals or methods
Makes sure to check return values and
check for exceptions around code that Has his own library to help with defensive
can fail. coding, writes unit tests that simulate faults

Codes to detect possible exception before,


Ensures that error/exceptions leave maintain consistent exception handling
program in good state, resources, strategy in all layers of code, come up with
connections and memory is all cleaned guidelines on exception handling for entire
up properly system.

Knows keyboard shortcuts for most


used operations. Has written custom macros
Has written libraries that sit on top of the
API to simplify frequently used tasks and to
Vast and In-depth knowledge of the API fill in gaps in the API
Has used more than one framework in a
professional capacity and is well-versed
with the idioms of the frameworks. Author of framework
Understand complete picture and come Able to suggest better alternatives and
up with entire areas that need to be flows to given requirements based on
speced experience

Perl/Python/Ruby/VBScript/Powershell Has written and published reusable code

Can do basic database administration,


performance optimization, index
Able to design good and normalized optimization, write advanced select queries,
database schemas keeping in mind the able to replace cursor usage with relational
queries that'll have to be run, proficient sql, understands how data is stored
in use of views, stored procedures, internally, understands how indexes are
triggers and user defined types. Knows stored internally, understands how
difference between clustered and non- databases can be mirrored, replicated etc.
clustered indexes. Proficient in use of Understands how the two phase commit
ORM tools. works.

Functional, added bonus if they


understand lazy evaluation, currying,
continuations Concurrent (Erlang, Oz) and Logic (Prolog)

5-Apr 6+

9-Jun 10+

Domain expert. Has designed and


implemented several products/solutions in
Has worked on multiple products in the the domain. Well versed with standard
same domain. terms, protocols used in the domain.

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 Has actually written tools and scripts, added
tools list. Has used ORM tools. bonus if they've been published.
Functional, added bonus if they
understand lazy evaluation, currying,
continuations Concurrent (Erlang, Oz) and Logic (Prolog)

Has implemented multiple big features in


Good working knowledge of code base, the codebase and can easily visualize the
has implemented several bug fixes and changes required for most features or bug
maybe some small features. fixes.
Has downloaded the alpha Has played with the previews and has
preview/CTP/beta and read some actually built something with it and as a
articles/manuals bonus shared that with everyone else

Deep knowledge of platform internals


and can visualize how the platform Has written tools to enhance or provide
takes the program and converts it into information on platform internals. For e.g.
executable code. disassemblers, decompilers, debuggers etc.

Structure and Interpretation of Computer


Design Patterns, Peopleware, Programs, Concepts Techniques, Models of
Programming Pearls, Algorithm Design Computer Programming, Art of Computer
Manual, Pragmatic Programmer, Programming, Database systems , by C. J
Mythical Man month Date, Thinking Forth, Little Schemer

Maintains a link blog with some


collection of useful articles and tools Maintains a blog in which personal insights
that he/she has collected and thoughts on programming are shared
han n.

Comments

Working with someone who


has a good topcoder ranking
would be an unbelievable
piece of luck!
This is an often under rated
but very critical criteria for
judging a programmer. With
the increase in outsourcing
of programming 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.

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.
E.g. of API can be Java
library, .net framework or
the custom API for the
application

You might also like