Countable sets, diagonalization, regular languages, finite automata, context-free languages, pushdown automata, Turing machines, recursive and recursively enumerable languages, undecidability, introduction to complexity theory, NP-completeness.