Teaching
My goal in a course is less about what you learn than about how you learn to think: reading a dense text closely, noticing what it leaves unsaid, and writing mathematics that someone else can check. I want graduates who can take on research by themselves and who communicate mathematics well.
What I believe about it
In Arabic, my first language, a student is ṭālib al-ʿilm (طالب العلم): a seeker of knowledge. Seeking takes will, and where there is will there is a way. I agree with László Polgár that geniuses are made, not born.
- Less can be more. A few foundational topics with plenty of practice teach more than a survey of many, especially in introductory courses.
- It is fine to go slowly. Gaps in the assumed background make a subject look harder than it is, and closing them is usually not much work.
- Writing is part of the subject. Communicating mathematics, in writing above all, matters as much as the technical content. The first step in solving a problem is stating it clearly.
Teaching to solve problems is education of the will.George Pólya, How to Solve It
How it shows up in my courses
- Writing is assessed, not assumed.In CSC236, one question on every assignment is graded on a three-part writing rubric, so students get feedback on how they argue as well as on whether they are right. In CSC373, a writing task is worth 10% of the grade.
- Students help write the assignments.The third CSC363 assignment was built from questions contributed by students and teaching assistants, each credited by name on the assignment.
- Turing machines are programs you can run.In CSC363, students write and debug Turing machines in Varphi, a language and debugger built by my student Hassan El-Sheikha under my supervision.
- Guess first, then check.My interactive lessons ask for your answer before they show you anything, and the feedback names the mistake a wrong answer usually comes from.
Courses
University of Toronto Mississauga
| Code | Course | Terms |
|---|---|---|
| CSC108 | Introduction to Computer Programming | Fall 2025 |
| CSC236 | Introduction to the Theory of Computation | Fall 2024, Fall 2026 |
| CSC263 | Data Structures and Analysis | Summer 2026 |
| CSC338 | Numerical Methods | Winter 2024, 2025 |
| CSC363 | Computational Complexity and Computability | Winter 2021 and 2022 (online), 2023–2026 |
| CSC373 | Algorithm Design and Analysis | Fall 2023–2025 (2025 co-taught) |
University of Waterloo
| Code | Course | Terms |
|---|---|---|
| MATH 135 | Algebra for Honours Mathematics | Fall 2018, 2019, 2021 and 2022 (online) |
| MATH 136 | Linear Algebra 1 for Honours Mathematics | Winter 2022, Winter 2023 (online) |
| PMATH 334 | Introduction to Rings and Fields with Applications | Winter 2018 |
From 2021 to 2023 I was Instructional Support Coordinator at Waterloo, coordinating large multi-section first- and second-year mathematics courses.
Materials
- A Quest for Intuition: Understanding Computability and ComplexityA rigorous but readable foundation in computability theory and computational complexity. It covers fewer topics than most texts and spends the space on building a mature understanding of the fundamentals.
- The k-NN algorithm and the curse of dimensionalityNearest-neighbour classification, and the geometry that makes it fail in high dimensions. The Nearest Neighbours lesson is the interactive version.
- Finite automataA formal introduction. A finite automaton is a Turing machine whose head only moves right, so it is written as a program of triples where a Turing machine needs quintuples.