In a rapidly evolving field that combines theory and practice, I adopt an inclusive, student-centered approach to undergraduate Computer Science instruction, placing students at the heart of the learning process. I am committed to creating an engaging and supportive learning environment where students feel empowered to explore, question, and apply concepts in meaningful ways.
By integrating active learning strategies, real-world applications, and opportunities for collaboration, I ensure that students not only gain a deep understanding of theoretical foundations but also develop the critical thinking and problem-solving skills essential for success in their academic and professional journeys. My approach emphasizes inclusivity, encouraging diverse perspectives and fostering a sense of belonging that inspires students to reach their full potential. Take a look at some of the inspiring stories from students who have attended my classes!
Discrete Mathematics focuses on the study of mathematical structures that are discrete rather than continuous. Unlike continuous mathematics, which deals with real numbers, discrete structures are often represented by integers and involve distinct, separate elements.
In this course, we explore a range of topics, including logic, sets, proof methods, number theory, recurrence relations, counting techniques, probability, and graph theory. Each topic is illustrated with practical applications, showcasing how these concepts are used to solve real-world problems.
Starting from Spring 2025, I am placing a special emphasis on Mathematical Writing, inspired by the performance observed in past students’ work. The goal is not only to master the core concepts but also to strengthen student's ability to communicate ideas, solutions, and proofs clearly and concisely. Active student's engagement in developing these skills will be key to their success.
This course provides a comprehensive introduction to the diverse and exciting field of computer science, with a central focus on teaching students how to think like computer scientists. At its core, computer science is about problem-solving—the ability to define problems, think creatively about solutions, and express those solutions clearly and accurately.
On one level, the course introduces foundational programming concepts, including binary logic and algorithmic problem-solving. On another, it leverages programming as a tool to explore and address key computer science challenges.
As students develop their programming skills, they are introduced to advanced topics, including object-oriented programming and graphical user interfaces. The course culminates in a collaborative, group-based project that allows students to apply their skills to a real-world problem, fostering creativity, teamwork, and practical application of the concepts they have learned. The outcome of this project is fully functional games, designed and developed entirely from scratch by students, many of whom entered the course with no prior programming experience.