At its core, Computer Science is the study of algorithmic problem solving. Although it is necessary to teach programming, data structures, computer organization, etc., students should ultimately learn to use these things to solve problems, understand what is good and bad about their solutions, and share their solutions with others.
Our SIGCSE 2016 paper describes a course that focuses on the four steps of the problem solving process: algorithmic thinking, implementation, analysis, and communication. This course, based on Knuth's popular seminar at Stanford, has been extremely successful at the authors' three institutions. In addition to discussing the course's objectives and methodology, we present sample problems, summarize the outcomes and feedback from students, and give advice to other educators looking to create a similar course.
The full paper is available through the ACM Digital Library. A preprint version and slides from our SIGCSE talk are also available.
Swapneel Sheth (University of Pennsylvania)
Chris Murphy (University of Pennsylvania)
Ken Ross (Columbia University)
Dennis Shasha (New York University)
The first set of problems is maintained by Ken Ross and contains over 50 problems used since 1999 at Columbia University. The most recent offering of the course is Fall 2017. Problems from the past offerings are also available.
Software support for these problems (code, simulators, and GUI) is available on request.
The second set is a website maintained by the Dennis Shasha containing 29 problems used in the course at NYU.
Software support for these problems (code, simulators, and GUI) is available on the Fall 2017 course website.
The last set of problems is maintained by Swapneel Sheth and Chris Murphy and contains problems used at UPenn. The most recent offering of the course is Spring 2018. Problems from the past offerings are available.
Software support for these problems (code, simulators, and GUI) is available on request.