The course will introduce various automata theoretic models of computation and discuss their practical and theoretical significance. Finite automata, grammars and stack automata and Turing machines will be introduced. The fundamental ideas of (non)computability and complexity will be presented. There will also be a section on the Lambda Calculus and its connection with Functional Programming.