data structures
Able to explain and use Arrays, LinkedLists, Doesn't know the Dictionaries etc in difference between Array practical programming and LinkedList tasks
algorithms
Unable to find the average of numbers in an array (It's hard to believe but I've interviewed such candidates)
Basic sorting, searching and data structure traversal and retrieval algorithms
Basic understanding of compilers, linker and interpreters. Understands what assembly code is and how things work at the hardware level. Some knowledge of virtual memory and paging. n2 (Level 1)
build automation
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 n2 (Level 1)
problem decomposition
Only straight line code Able to break up problem with copy paste for reuse into multiple functions
systems decomposition
Able to break up problem space and design solution as long as it is within the same platform/technology
communication
Peers can understand what is being said. Good spelling and grammar.
code readability
Mono-syllable names
defensive coding
error handling
IDE
Basic error handling around code that can throw exceptions/generate Only codes the happy case errors Knows their way around the interface, able to Mostly uses IDE for text effectively use the IDE editing using menus.
API
Needs to look up the Has the most frequently documentation frequently used APIs in memory
frameworks
Has not used any framework outside of the core platform 2n (Level 0) Takes the given requirements and codes to spec
Has heard about but not used the popular frameworks available for the platform. n2 (Level 1) Come up with questions regarding missed cases in the spec
requirements
scripting
database Experience
Knows basic database concepts, normalization, ACID, transactions and can write simple selects n2 (Level 1) Imperative, ObjectOriented and declarative (SQL), added bonus if they understand static vs dynamic typing, weak vs strong typing and static inferred types 1 3-Feb 1 5-Feb
languages with professional experience platforms with professional experience years of professional experience
tool knowledge
Knows about some alternatives to popular and standard tools. Imperative, ObjectOriented and declarative (SQL), added bonus if they understand static vs dynamic typing, weak vs strong typing and static inferred types
languages exposed to
codebase knowledge
Basic knowledge of the code layout and how to build the system
platform internals
books
Unleashed series, 21 days Code Complete, Don't series, 24 hour series, Make me Think, Mastering dummies series... Regular Expressions
blogs
n (Level 2)
log(n) (Level 3)
Comments
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.
Knowledge of advanced data structures like Btrees, binomial and fibonacci heaps, AVL/Red Black trees, Splay Trees, Skip Lists, tries etc.
Tree, Graph, simple greedy and divide and conquer algorithms, is able to understand the relevance of the levels of this matrix.
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. Understands the entire programming stack, hardware (CPU + Memory + Cache + Interrupts + microcode), binary code, assembly, static and dynamic linking, compilation, interpretation, JIT compilation, garbage collection, heap, stack, memory addressing... log(n) (Level 3)
Working with someone who has a good topcoder ranking would be an unbelievable piece of luck!
Understands kernel mode vs. user mode, multithreading, synchronization primitives and how they're implemented, able to read assembly code. Understands how networks work, understanding of network protocols and socket level programming. n (Level 2)
Comments
Proficient in using CVS and SVN features. Knows how to branch and merge, use Knowledge of distributed patches setup repository VCS systems. Has tried out properties etc. Bzr/Mercurial/Darcs/Git
Can setup a script to build the system and also documentation, installers, generate release notes Can setup a script to build and tag the code in source the basic system control Understands and is able to setup automated functional, Has written code in TDD load/performance and UI manner tests n (Level 2) log(n) (Level 3) Comments
Use of appropriate data structures and algorithms and comes up with Able to come up with generic/object-oriented reusable functions/objects code that encapsulate that solve the overall aspects of the problem problem that are 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 systems like monitoring, reporting, fail overs etc.
Is able to effectively communicate with peers Code is grouped into regions and well commented with references to other source files n (Level 2)
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 Able to understand and issue has become more communicate prominent. I know of thoughts/design/ideas/sp several projects that failed ecs in a unambiguous because the programmers manner and adjusts could not understand communication as per the what the intent of the context communication was. File has license header, summary, well commented, consistent white space usage. The file should look beautiful. log(n) (Level 3) Comments Code organization at a physical level closely matches design and looking at file names and folder distribution provides insights into design
Each physical file has a unique purpose, for e.g. one class definition, one feature implementation etc.
Physical layout of source tree matches logical hierarchy and No circular dependencies, organization. The binaries, libs, docs, builds, directory names and third-party code all organization provide organized into appropriate insights into the design of folders the system. Code assumptions are verified using asserts, code flows naturally - no deep nesting of conditionals or methods
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.
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)
Has his own library to help with defensive coding, writes unit tests that simulate faults log(n) (Level 3) Comments
Codes to detect possible exception before, Ensures that maintain consistent error/exceptions leave exception handling program in good state, strategy in all layers of resources, connections code, come up with and memory is all cleaned guidelines on exception up properly handling for entire system.
Knows keyboard shortcuts Has written custom for most used operations. macros Has written libraries that sit on top of the API to simplify frequently used tasks and to fill in gaps in the API
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) Understand complete picture and come up with entire areas that need to be speced
E.g. of API can be Java library, .net framework or the custom API for the application
Author of framework log(n) (Level 3) Comments Able to suggest better alternatives and flows to given requirements based on experience
Can do basic database administration, performance optimization, index optimization, write Able to design good and advanced select queries, normalized database able to replace cursor schemas keeping in mind usage with relational sql, the queries that'll have to understands how data is be run, proficient in use of stored internally, views, stored procedures, understands how indexes triggers and user defined are stored internally, types. Knows difference understands how between clustered and databases can be non-clustered indexes. mirrored, replicated etc. Proficient in use of ORM Understands how the two tools. phase commit works. n (Level 2) log(n) (Level 3) Comments
Functional, added bonus if they understand lazy evaluation, currying, continuations 5-Apr 9-Jun
Concurrent (Erlang, Oz) and Logic (Prolog) 6+ 10+ Domain expert. Has designed and implemented several products/solutions in the domain. Well versed with standard terms, protocols used in the domain. log(n) (Level 3) Comments
Good knowledge of editors, debuggers, IDEs, open source alternatives etc. etc. For e.g. someone who knows most of the tools from Scott Has actually written tools Hanselman's power tools and scripts, added bonus if list. Has used ORM tools. they've been published.
Functional, added bonus if they understand lazy evaluation, currying, Concurrent (Erlang, Oz) continuations and Logic (Prolog) Has implemented multiple big features in the codebase and can easily visualize the changes required for most features or bug fixes.
Good working knowledge of code base, has implemented several bug fixes and maybe some small features.
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) Comments Has written tools to Deep knowledge of enhance or provide platform internals and can information on platform visualize how the platform internals. For e.g. takes the program and disassemblers, converts it into executable decompilers, debuggers code. etc. Has downloaded the alpha preview/CTP/beta and read some articles/manuals n (Level 2) Structure and Interpretation of Computer Programs, Concepts Techniques, Design Patterns, Models of Computer Peopleware, Programming Programming, Art of Pearls, Algorithm Design Computer Programming, Manual, Pragmatic Database systems , by C. J Programmer, Mythical Date, Thinking Forth, Little Man month Schemer
Maintains a link blog with some collection of useful articles and tools that he/she has collected
Maintains a blog in which personal insights and thoughts on programming are shared