To learn the fundamental concepts of formal languages, automata theory and computation theory, such as finite automata, pushdown automata, context-free grammars and Turing machines. To learn their relationships and the basic closure properties. To understand the notion of undecidability, and to be able to prove algorithmic problems undecidable.