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