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

University of Delaware