Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
0% found this document useful (0 votes)
84 views

Programmer Competency Matri..

The document is a programmer competency matrix that outlines different levels of programming skills and knowledge. It covers areas like computer science fundamentals, algorithms, data structures, systems programming, software engineering practices, and programming abilities. The matrix defines 4 levels from 0 to 3, with higher levels building on knowledge from lower levels. Level 3 requires expertise in advanced topics like dynamic programming, graphs, numerical algorithms, and understanding the entire programming stack.

Uploaded by

liyun3
Copyright
© Attribution Non-Commercial (BY-NC)
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
84 views

Programmer Competency Matri..

The document is a programmer competency matrix that outlines different levels of programming skills and knowledge. It covers areas like computer science fundamentals, algorithms, data structures, systems programming, software engineering practices, and programming abilities. The matrix defines 4 levels from 0 to 3, with higher levels building on knowledge from lower levels. Level 3 requires expertise in advanced topics like dynamic programming, graphs, numerical algorithms, and understanding the entire programming stack.

Uploaded by

liyun3
Copyright
© Attribution Non-Commercial (BY-NC)
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 3

Programmer Competency Matrix | IndianGeek http://www.indiangeek.

net/programmer-competency-matrix/

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 3) Comments

Knows space and time tradeoffs of the basic data


Doesn’t know the Able to explain and use Arrays, structures, Arrays vs LinkedLists, Able to explain Knowledge of advanced data structures like B-trees,
data structures difference between LinkedLists, Dictionaries etc in how hashtables can be implemented and can binomial and fibonacci heaps, AVL/Red Black trees,
Array and LinkedList practical programming tasks handle collisions, Priority queues and ways to Splay Trees, Skip Lists, tries etc.
implement them etc.
Unable to find the
Able to recognize and code dynamic programming
average of numbers in an Basic sorting, searching and data Tree, Graph, simple greedy and divide and conquer
solutions, good knowledge of graph algorithms, good Working with someone who has a good topcoder
algorithms array (It’s hard to believe structure traversal and retrieval algorithms, is able to understand the relevance of ranking would be an unbelievable piece of luck!
knowledge of numerical computation algorithms, able
but I’ve interviewed such algorithms the levels of this matrix.
to identify NP problems etc.
candidates)
Basic understanding of compilers,
Understands kernel mode vs. user mode, multi- Understands the entire programming stack, hardware
linker and interpreters. Understands
Doesn’t know what a threading, synchronization primitives and how (CPU + Memory + Cache + Interrupts + microcode),
systems what assembly code is and how things
compiler, linker or they’re implemented, able to read assembly code. binary code, assembly, static and dynamic linking,
programming work at the hardware level. Some
interpreter is Understands how networks work, understanding of compilation, interpretation, JIT compilation, garbage
knowledge of virtual memory and
network protocols and socket level programming. collection, heap, stack, memory addressing…
paging.
Software Engineering

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


Proficient in using CVS and SVN features. Knows
source code Knowledge of distributed VCS systems. Has tried out
Folder backups by date VSS and beginning CVS/SVN user how to branch and merge, use patches setup
version control Bzr/Mercurial/Darcs/Git
repository properties etc.
Can setup a script to build the system and also
Only knows how to build Knows how to build the system from
build automation Can setup a script to build the basic system documentation, installers, generate release notes and
from IDE the command line
tag the code in source control
Has written automated unit tests and
automated Thinks that all testing is Understands and is able to setup automated functional,
comes up with good unit test cases Has written code in TDD manner
testing the job of the tester load/performance and UI tests
for the code that is being written
Programming

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


Use of appropriate data structures and algorithms and
Only straight line code
problem Able to break up problem into Able to come up with reusable functions/objects comes up with generic/object-oriented code that
with copy paste for
decomposition multiple functions that solve the overall problem encapsulate aspects of the problem that are subject to
reuse
change.
Able to visualize and design complex systems with
Not able to think above Able to break up problem space and multiple product lines and integrations with external
systems Able to design systems that span multiple
the level of a single design solution as long as it is within systems. Also should be able to design operations
decomposition technologies/platforms.
file/class the same platform/technology 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
Cannot express outsourcing of programming tasks to places where
Able to understand and communicate thoughts/design
thoughts/ideas to peers. Peers can understand what is being English is not the native tongue this issue has
communication Is able to effectively communicate with peers /ideas/specs in a unambiguous manner and adjusts become more prominent. I know of several projects
Poor spelling and said. Good spelling and grammar.
communication as per the context that failed because the programmers could not
grammar. understand what the intent of the communication
was.

1 of 3 2009/11/12 21:29
Programmer Competency Matrix | IndianGeek http://www.indiangeek.net/programmer-competency-matrix/

File has license header, summary, well commented,


code organization no evidence of Methods are grouped logically or by Code is grouped into regions and well commented
consistent white space usage. The file should look
within a file organization within a file accessibility with references to other source files
beautiful.

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

No thought given to Code organization at a physical level closely matches


code organization Each physical file has a unique purpose, for e.g. one
organizing code across Related files are grouped into a folder design and looking at file names and folder distribution
across files class definition, one feature implementation etc.
files provides insights into design
No circular dependencies, binaries, libs, docs, Physical layout of source tree matches logical hierarchy The difference between this and the previous item
source tree Basic separation of code into logical is in the scale of organization, source tree
Everything in one folder builds, third-party code all organized into and organization. The directory names and organization organization relates to the entire set of artifacts
organization folders.
appropriate folders provide insights into the design of the system. that define the system.

Good names for files, variables classes, No long functions, comments explaining unusual Code assumptions are verified using asserts, code flows
code readability Mono-syllable names
methods etc. code, bug fixes, code assumptions naturally – no deep nesting of conditionals or methods
Doesn’t understand the Checks all arguments and asserts Makes sure to check return values and check for Has his own library to help with defensive coding, writes
defensive coding
concept critical assumptions in code exceptions around code that can fail. unit tests that simulate faults

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

Codes to detect possible exception before, maintain


Ensures that error/exceptions leave program in
Only codes the happy Basic error handling around code that consistent exception handling strategy in all layers of
error handling good state, resources, connections and memory is
case can throw exceptions/generate errors code, come up with guidelines on exception handling
all cleaned up properly
for entire system.
Knows their way around the interface,
Mostly uses IDE for text Knows keyboard shortcuts for most used
IDE able to effectively use the IDE using Has written custom macros
editing operations.
menus.
Needs to look up the
Has the most frequently used APIs in Has written libraries that sit on top of the API to simplify E.g. of API can be Java library, .net framework or
API documentation Vast and In-depth knowledge of the API the custom API for the application
memory frequently used tasks and to fill in gaps in the API
frequently
Has not used any Has heard about but not used the Has used more than one framework in a
frameworks framework outside of popular frameworks available for the professional capacity and is well-versed with the Author of framework
the core platform platform. idioms of the frameworks.

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


Takes the given
Come up with questions regarding Understand complete picture and come up with Able to suggest better alternatives and flows to given
requirements requirements and codes
missed cases in the spec entire areas that need to be speced requirements based on experience
to spec
No knowledge of
scripting Batch files/shell scripts Perl/Python/Ruby/VBScript/Powershell Has written and published reusable code
scripting tools
Can do basic database administration, performance
Able to design good and normalized database
optimization, index optimization, write advanced select
schemas keeping in mind the queries that’ll have to
Knows basic database concepts, queries, able to replace cursor usage with relational sql,
Thinks that Excel is a be run, proficient in use of views, stored
database normalization, ACID, transactions and understands how data is stored internally, understands
database procedures, triggers and user defined types. Knows
can write simple selects how indexes are stored internally, understands how
difference between clustered and non-clustered
databases can be mirrored, replicated etc. Understands
indexes. Proficient in use of ORM tools.
how the two phase commit works.
Experience

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


Imperative, Object-Oriented and
languages with declarative (SQL), added bonus if they
Imperative or Object Functional, added bonus if they understand lazy
professional understand static vs dynamic typing, Concurrent (Erlang, Oz) and Logic (Prolog)
Oriented evaluation, currying, continuations
experience weak vs strong typing and static
inferred types
platforms with
professional 1 2-3 4-5 6+
experience

2 of 3 2009/11/12 21:29
Programmer Competency Matrix | IndianGeek http://www.indiangeek.net/programmer-competency-matrix/

years of
professional 1 2-5 6-9 10+
experience
Domain expert. Has designed and implemented several
domain No knowledge of the Has worked on at least one product in Has worked on multiple products in the same
products/solutions in the domain. Well versed with
knowledge domain the domain. domain.
standard terms, protocols used in the domain.
Knowledge
n 2 n (Level 2) log(n) (Level 3) Comments
2 (Level 0) n (Level 1)
Good knowledge of editors, debuggers, IDEs, open
Limited to primary IDE Knows about some alternatives to source alternatives etc. etc. For e.g. someone who Has actually written tools and scripts, added bonus if
tool knowledge
(VS.Net, Eclipse etc.) popular and standard tools. knows most of the tools from Scott Hanselman’s they’ve been published.
power tools list. Has used ORM tools.
Imperative, Object-Oriented and
declarative (SQL), added bonus if they
languages Imperative or Object Functional, added bonus if they understand lazy
understand static vs dynamic typing, Concurrent (Erlang, Oz) and Logic (Prolog)
exposed to Oriented evaluation, currying, continuations
weak vs strong typing and static
inferred types
Good working knowledge of code base, has Has implemented multiple big features in the codebase
codebase Has never looked at the Basic knowledge of the code layout
implemented several bug fixes and maybe some and can easily visualize the changes required for most
knowledge codebase and how to build the system
small features. features or bug fixes.
knowledge of Has played with the previews and has actually built
Has not heard of the Has heard of upcoming technologies in Has downloaded the alpha preview/CTP/beta and
upcoming something with it and as a bonus shared that with
upcoming technologies the field read some articles/manuals
technologies everyone else

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


Deep knowledge of platform internals and can Has written tools to enhance or provide information on
platform Zero knowledge of Has basic knowledge of how the
visualize how the platform takes the program and platform internals. For e.g. disassemblers, decompilers,
internals platform internals platform works internally
converts it into executable code. debuggers etc.
Structure and Interpretation of Computer Programs,
Unleashed series, 21 days Design Patterns, Peopleware, Programming Pearls, Concepts Techniques, Models of Computer
Code Complete, Don’t Make me Think,
books series, 24 hour series, Algorithm Design Manual, Pragmatic Programmer, Programming, Art of Computer Programming,
Mastering Regular Expressions
dummies series… Mythical Man month Database systems , by C. J Date, Thinking Forth, Little
Schemer
Reads tech/programming/software
Has heard of them but Maintains a link blog with some collection of useful Maintains a blog in which personal insights and thoughts
blogs engineering blogs and listens to
never got the time. articles and tools that he/she has collected on programming are shared
podcasts regularly.

Thanks to John Haugeland [http://fullof.bs/] for a


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

3 of 3 2009/11/12 21:29

You might also like