I teach courses at all levels of our curriculum--from introductory to advanced. The introductory course for majors is taught in the Python programming language and emphasizes problem-solving skills. Our algorithms course is targetted toward sophomores and juniors and is focused on applications. I have developed new upper-level technical electives for the W&L computer science curriculum: web applications, distributed systems, and software tools.
Philosophy, in Brief
Software Development Courses. I strike a balance between theory and practice so that students learn general problem-solving concepts and techniques that can be applied to most programming tasks as well as tools that will make them more productive in the tasks at hand. All my courses have a significant project that students usually work on for several weeks, often in teams.
Introductory Courses. My goals are for the students to (1) learn the fundamentals of software development as well as (2) understand how computer science affects their daily lives and how computer science can be applied to a wide variety of areas. To achieve the second goal, each week, students read recent news articles on various topics, summarize the article, and discuss the article in small and large groups. A paper about the approach has been accepted to the Technical Symposium on Computer Science Education in March 2012.
Algorithms. Algorithms is a challenging subject for many students. Students should learn to think about algorithms in context of the problems that they're trying to solve so that the concepts will not seem too abstract. Students should also periodically implement algorithms. Implementation often helps make the concepts concrete and helps the students find problems in their algorithms.
Past Courses I've Taught
Washington & Lee University
- Winter 2019:
- CSCI111: Fundamentals of Programming I
- CSCI211: Algorithm Design and Analysis
- Honors Thesis: Hammad Ahmad '19
- Fall 2018:
- CSCI330: Operating Systems
- Honors Thesis: Hammad Ahmad '19
- Independent Study: Ruinan Liu '20
- Winter 2018:
- Fall 2017:
- Winter 2017:
- CSCI111: Fundamentals of Programming I
- CSCI397: Tools for the Software Life Cycle
- Honors Thesis with Azmain Amin
- Fall 2016:
- CSCI209: Software Development
- Honors Thesis with Azmain Amin
- Spring 2016: CSCI335: Software Engineering Via Web Applications
- Winter 2016:
- CSCI111: Fundamentals of Programming I
- CSCI211: Algorithms Design and Analysis
- Honors Thesis with Johanna Goergen
- Independent Study with Mithra Muthukrishnan
- Fall 2015:
- CSCI209: Software Development
- CSCI330: Operating Systems
- Honors Thesis with Johanna Goergen
- Independent Study with Mithra Muthukrishnan
- 2014-2015: on leave
- Honors Thesis with Bipeen Acharya
- Honors Thesis with Paul Jang
- Winter 2014:
- CSCI111: Fundamentals of Programming I
- CSCI211: Algorithm Design and Analysis
- Honors Thesis with Richard Marmorstein
- Independent Study with Olivier Mahame and Jean Paul Mugabe
- Independent Study with Madeline Forrestel, with Dr. Chin in Sociology
- Spring 2013: CSCI335: Software Engineering through Web Applications
- Winter 2013:
- CSCI211: Algorithm Design and Analysis
- Independent Study with Olivier Mahame
- Fall 2012:
- CSCI111: Fundamentals of Programming I Sections 1 and 2
- CSCI209: Software Development
- Winter 2012:
- CSCI111: Fundamentals of Programming I
- CSCI211: Algorithm Design and Analysis
- Honors Thesis with Camille Cobb
- Independent Study with David Margolies on digital humanities project
- Fall 2011: CS209: Software Development
Advising Camille Cobb's Honors Thesis
Independent Study with Riley Jordan on digital humanities project - Spring 2011: CSCI325: Distributed Systems
- Winter 2011:
CSCI111:
Fundamentals of Programming I
CSCI211: Algorithm Analysis
- Spring 2010: CSCI335: Software Engineering through Web Applications
- Winter 2010:
CSCI111:
Fundamentals of Programming I
CSCI211: Algorithm Analysis
Independent Study with Ethan Smith - Fall 2009: CS209: Software Development
- Spring 2009: CS297: Tools for the Software Life Cycle and Beyond
- Winter 2009:
CS111:
Fundamentals of Programming I
CS211: Algorithm Analysis - Fall 2008:
CS209:
Software Development
CS397: Human-Computer Interaction - Spring 2008: CS297: Web Applications
- Winter 2008: CS111: Fundamentals of Programming I
- Fall 2007: CS111: Fundamentals of Programming I