Computer Science学习的四个阶段,自我激励

Computer Science
2n (Level 0)n2 (Level 1)n (Level 2)log(n) (Level 3)Comments
data structuresDoesn’t know the difference between Array and LinkedListAble to explain and use Arrays, LinkedLists, Dictionaries etc in practical programming tasksKnows 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 B-trees, binomial and fibonacci heaps, AVL/Red Black trees, Splay Trees, Skip Lists, tries etc.
algorithmsUnable 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 algorithmsTree, 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.Working with someone who has a good topcoder ranking would be an unbelievable piece of luck!
systems programmingDoesn’t know what a compiler, linker or interpreter isBasic 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.Understands kernel mode vs. user mode, multi-threading, synchronization primitives and how they’re implemented, able to read assembly code. Understands how networks work, understanding of network protocols and socket level 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…