This course introduces students to basic concepts of computational theory from a practical point of view. The course also introduces students to the C++ programming language, assuming a fluency in Python. Students are expected to understand the definition of a language using finite automata and regular expressions. The concepts of pushdown automata and Turing machines are demonstrated as a basic model of computation, equivalent to all existent programming languages. Students are introduced to the concept of decidability, which is the determination of whether a language can be Turing-decidable or not, allowing them to investigate the power of algorithms to solve problems. Credits: 4