1. Data Types, Identifiers and associated concepts
    1. Primitive types
      1. Arithmetic types
      2. Character / String types
      3. Booleans
      4. Type conversion (casts / promotions / demotions)
      5. Bitwise operator
      6. Mutability
    2. Indirect types
      1. Pointers
      2. References
      3. Aliasing
    3. Aggregate types
      1. Tuples/Records/Structs
      2. Enumerations
      3. Tabular Data
      4. Data Frames
    4. Scope
  2. Expressions, Operators and I/O statements 
    1. Arithmetic operators
    2. Assignment statements
    3. Boolean expressions
      1. Logical operators
      2. Relational operators
      3. Compound Boolean expressions
    4. Notions of equality (Pointer vs. structural equivalence)
    5. Order of operations
    6. Input/Output
      1. Console-based statements
      2. File-based statements
      3. Cleaning and processing data
    7. Higher-order Functions
      1. Map / Apply
      2. Fold
      3. Filter/ Reduce
  3. Control Structures and Control Flow
    1. Sequential control flow
    2. Branching
      1. If statements
      2. If-else statements
      3. Switch statements
      4. Nested selection statements
    3. Iteration
      1. Definite loops  (for, for each)
      2. Indefinite loops (while, do-while)
      3. Nested loops
    4. Recursion
      1. Structural
      2. Generative
      3. Tail
    5. Exception and error handling
  4. Functions / Procedures / Methods
    1. Calling already-existing functions
    2. Writing procedures / functions
    3. Parameter passing
      1. Pass by reference / value
    4. Variable scope
    5. Lambda functions and closures
  5. Object-Oriented Programming
    1. Objects
      1. Instantiation
      2. Calling a method
      3. Comparing objects
    2. Classes (encapsulation)
      1. Using existing classes
        1. String
        2. Random
        3. Math
        4. Wrapper classes
      2. Constructors/Destructors
      3. Accessors
      4. Mutators
      5. Static vs. Instance
      6. Data Scope and Access
      7. this/self Keyword 
    3. Inheritance
      1. Design considerations
      2. Creating subclasses
        1. Constructors
        2. Overriding
        3. Overloading
        4. Accessing parent methods/data
      3. Inheritance hierarchies
        1. Polymorphism
        2. References    
      4. Parameterized Superclasses
    4. Abstract classes
    5. Interfaces
  6. Collections / Data Structures
    1. Arrays
      1. 1D
        1. Instantiation
        2. Traversal
        3. Common Algorithms
      2.   2D
        1. Instantiation
        2. Traversal
        3. Common Algorithms
      3.   Multi-dimensional
        1. Instantiation
        2. Traversals
      4. Parallel arrays
    2. Lists / Dynamic Arrays / ArrayList / Vector
      1. Operations
      2. Implementations
        1. Singly-linked
        2. Doubly-linked
        3. Other
    3. Generics
      1. Iterators
    4. Stacks / Queues
    5. Trees
      1. Non-self-balancing
        1. Binary
        2. Other
      2. Self-balancing
        1. Binary
        2. Other
      3. Tree Algorithms
        1. Traversals
    6. Heaps
      1. Operations / Algorithms
      2. Implementations
    7. Maps / Hash Tables / Dictionaries
      1. Operations / Algorithms
      2. Implementations
    8. Sets
      1. Operations / Algorithms
      2. Implementations
    9. Graphs
      1. Operations / Algorithms
      2. Implementations
  7. Algorithms
    1. Algorithm Analysis
    2. Searching Algorithms
      1. Linear
      2. Binary
    3. Sorting Algorithms
      1. Quadratic (Bubble, Insertion, Selection)
      2. Recursive (Quicksort, Heapsort, Mergesort)
      3. Others
    4. Greedy
    5. Backtracking
    6. Divide-and-Conquer
    7. Dynamic Programming
  8. Software Development and Design
    1. Design patterns and program organization
    2. Development Approaches (top-down, agile, waterfall, etc.)
    3. Requirements and Specifications
    4. Implementation
      1. Documentation & Conventions (comments, style guides, naming conventions, UML, ...)
      2. Version Control
      3. Programming Paradigm (functional, imperative)
    5. Testing and Test-driven Development
    6. Tracing and Debugging
    7. Maintenance and Refactoring
    8. Code Reviews
    9. Defensive Design / Assertions / Security
    10. Program Correctness (loop invariants, proofs of correctness, …)
    11. Human Computer Interaction (HCI)
  9. Compilation and Execution system
    1. Compiler/Compiling
    2. Interpreter
    3. Memory management / Garbage collection
    4. Call Stack
    5. Command-line operations (not sure about its own category?)
    6. Parallelism, Threads and Concurrency
  10. Mathematical Expression and Reasoning for CS
    1. Induction
    2. Other proof techniques
  11. Hardware and Architecture Related
    1. Networks
    2. Von Neumann architecture
    3. Data Representation (binary numbers, overflows, character encoding, etc)