How can the correctness of software and hardware be formally verified? How can database queries be answered more efficiently? How can knowledge be stored in a way that makes it easy to use? Methods from theoretical computer science—especially from logic—play a key role in answering such questions. I am fascinated by how theory and practice interact to solve important problems. In my courses, students learn how methods from the field of logic can help them better understand and solve challenging problems from a wide range of areas in computer science.