Teaching Philosophy
As a professor, my teaching philosophy is rooted in the belief that education should be inclusive, engaging, and deeply connected to real-world applications. Having come from a low-income background, I understand the barriers that many students face in higher education. This perspective drives my commitment to creating a classroom environment where all students feel valued and empowered to contribute. I emphasize active learning strategies that encourage students to engage with the material, collaborate with their peers, and apply their knowledge in practical contexts.
Integrating research topics into my teaching allows students to see the relevance of their studies in addressing contemporary issues. By fostering an environment of exploration and inquiry, I help students develop not only their technical skills but also their critical thinking and problem-solving abilities. This holistic approach aims to prepare students for their future careers in computer science and related fields, ensuring they are ready to make meaningful contributions to society.
Courses Taught
This course provides a foundational introduction to computer science principles and programming. I focus on creating a welcoming environment where students can explore fundamental concepts without intimidation. Through hands-on programming assignments, students learn to think like computer scientists, breaking down complex problems into manageable parts. I emphasize the importance of creativity and critical thinking in computing, allowing students to develop confidence in their skills and see the relevance of computer science in everyday life.
In this course, I guide students through the essential data structures and algorithms that are the backbone of effective programming. By combining theoretical concepts with practical applications, students learn how to choose the right data structure for different problems, enhancing their programming efficiency and effectiveness. I utilize project-based learning, where students engage in collaborative projects that challenge them to apply their knowledge to real-world scenarios, fostering a deeper understanding of how data structures influence performance and problem-solving.
This course dives into how data and instructions are represented and manipulated within a computer. I challenge students to explore beyond surface-level programming, delving into the intricacies of C programming and x86 assembly language. Hands-on labs allow students to use debuggers and disassemblers to analyze binaries and understand low-level program behavior. This practical, problem-solving approach encourages critical thinking, pushing students to connect their programming skills with an understanding of the underlying hardware and system performance.
In CSCI 297, students are immersed in security concepts through practical, hands-on challenges that emphasize ethical considerations in computing. The course covers a range of topics, including the use of anonymity tools and vulnerabilities in secure communication channels. Students engage in a comprehensive final exam that synthesizes their knowledge through a fictional scenario involving compromised systems, which emphasizes the importance of both technical skills and the broader implications of security in society.
This advanced course challenges students to build their own Linux distributions from scratch, deepening their understanding of operating systems. By engaging in discussions about design decisions, security trade-offs, and software engineering practices, students develop critical project management skills. The course’s collaborative projects foster an environment where each student can contribute uniquely, enhancing their technical skills and their appreciation for the complexity of real-world systems.