Programmer Competency Matrix covered this in detail, but I'll highlight a couple:
- Data Structures
- Advanced data structures like B-trees, binomial and fibonacci heaps, AVL/Red Black trees, Splay Trees, Skip Lists, tries etc.
- Algorithms
- Tree, Graph, simple greedy and divide and conquer algorithms, is able to understand the relevance of the levels of this matrix.
- Systems programming
- 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…
- Source Code Version Control
- Knowledge of distributed VCS systems. Has tried out Bzr/Mercurial/Darcs/Git
- Build Automation
- Can setup a script to build the system and also documentation, installers, generate release notes and tag the code in source control
- Automated testing
- Understands and is able to setup automated functional, load/performance and UI tests
- Problem Decomposition
- Use of appropriate data structures and algorithms and comes up with generic/object-oriented code that encapsulate aspects of the problem that are subject to change.
- Systems Decomposition
- 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.