This course gives an introduction to some of the greatest ideas of theoretical computer science. Starting with examples of computational thinking such as Euclid's algorithm, the course will progress through propositional and predicate logics, G\"{o}del's theorems, the lambda calculus, Turing machines, the P versus NP problem, randomized algorithms, formal methods, cryptography, and quantum computation. These are a few selected topics covered by the course, which is implemented as a series of seminars organized in various forms including discussion, oral presentations, and lectures. The students are encouraged to actively participate in each seminar so that they can understand, appreciate, and debate about the implications of many of these ideas.