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