The purpose of this course is to acquaint the student with an overview of the theoretical foundations of computer science from the perspective of formal languages. - Classify machines by their power to recognize languages. - Employ finite state machines to solve problems in computing. - Explain deterministic and non-deterministic machines. - Comprehend the hierarchy of problems arising in the computer sciences.