This course introduces the formal models of computing and their relation to formal languages. It lets the students understand the principal models of computation such as finite automata, pushdown automata and Turing machines. It also helps students recognize the correspondence of the different language classes to the models of computation.