Several years ago we started revising our approach to teaching programming. The key idea was to introduce language features as needed in the context of doing things—solving problems large and small. That approach diverges significantly from what we consider the traditional and common approach of organizing and teaching around programming language features. We believe it allows a greater emphasis on problem representation and problem solving and better teaches programming. We view programming as a combination of problem solving and coding.
The original spark of this approach arose from Stephen's desire to "walk into class with a list of problems and tell students that by the end of the course, they should be able to solve them all." Eventually someone asked, "Where's your problem list?" We hadn't really developed the list. But now we have and here it is. This page is evolving as is our continued examination of how programming can be better learned and taught.
If you have questions, suggestions for improvement of what is included, or something to include, please contact us.
We try not to lecture too much when we teach. We are not as successful as we would like. Some things just need explaining! The same is true for curriculum. The "problems" included here and their presentation communicate some but certainly not all of our thinking and reasoning. Thus, we have some produced some background information that we'd like you to read.
That material is only two or three pages but is necessary reading if you want to understand what we are thinking. Please read it over. The link is
http://www.cs.uni.edu/~east/PcPI/prose_2.0.php. We would be very happy to receive comments, questions, and suggestions.
The problems included here are phrased to communicate the problem to you, a teacher who already knows programming. We encourage you to rework the problem statements to be more natural/realistic and less prescriptive of solution, e.g., remove the specifications about getting specific inputs and reporting specific results. Second, the lists begin with small problems and work their way up to more complex problems. That arrangement is probably most readily applied to the way most programming is currently taught and suggests a more bottom up approach as opposed to a more holistic problem solving approach. We hope you will keep in primary goal of problem-solving in mind as you use this list for your own instructional purposes.
There are nearly 200 problems of various sizes. We have attempted to organize them as described in the background information referred to above. (Please read it over if you haven't). The link to the problems is is
http://www.cs.uni.edu/~east/PcPI/problems_2.0.php. We would be very happy to receive comments, questions, and suggestions.