Concepts Key concepts
This folder is for reusable computer-science ideas that crop up across programming, systems, algorithms, AI, and coursework. A good concept note should answer: what is the idea, what problem does it solve, what assumptions does it make, and where does it break?
Core concept families
- Abstraction: hiding irrelevant detail behind a cleaner interface. A function, class, module, protocol, API, or mathematical model is useful when it lets you think at the right level without losing the details that matter.
- Representation: choosing how information is encoded. The same idea can be represented as a string, array, graph, tensor, table, object, bit pattern, or file format, and that choice affects speed, correctness, and readability.
- State: information that changes over time. Bugs often come from hidden mutable state, stale cached state, or unclear ownership of state.
- Invariants: facts that should remain true while code runs. Examples: a sorted list stays sorted, a queue preserves FIFO order, an index stays inside bounds, and a pointer/reference remains valid.
- Complexity: how resource use grows with input size. This includes runtime, memory, I/O, network calls, and human maintenance cost.
- Interfaces and contracts: promises about inputs, outputs, side effects, errors, and performance.
Why this matters
Most programming failures are not caused by syntax. They are caused by a bad model of the system: wrong abstraction, wrong data shape, wrong state assumption, or wrong performance intuition. Concept notes are therefore the bridge between “I know the command” and “I understand the machine”.