The course proposes to introduce the notions of automata, formal languages, computability, and complexity classes to the students. This course covers basic concepts of formal models of computation and computability. It introduces a hierarchy of machines and languages to capture classes of computable sets. It concludes with a generic notion of computability, and classes of complexity of computable functions.