Program By Design is a project that originated with the TeachScheme! and the text How to Design Programs. It presents a comprehensive design-based curriculum for introduction to computing and programming starting from the middle school all the way to curriculum at the Master’s level.
The curriculum provides an integrated pedagogic and technical solution to teaching a disciplined program design that supports novice learners and challenges all students. It uses multiple programming languages over multiple semesters with a well-developed methodology for transitioning between languages. Students develop skills in iterative refinement through a series of extended exercises supported by Teachpacks (novice-appropriate libraries) that encapsulate infrastructure code while allowing students to work in pedagogically-motivated language subsets. Each of these features is critical to creating a powerful yet novice-friendly introductory curriculum.
Students start programming in functional languages, and through the use of Teachpacks implement an interactive game within the first three weeks of the semester. By the end of the second semester they develop a solid understanding of the architecture of the Java Collections Framework including the design of algorithms that leverage the Collections interfaces for data structure access and the functional operations on the data set elements. Test-first design and strict documentation requirements enforce disciplined programming while illustrating in a concrete way the program’s desired behavior.
Additional software supports unit testing in both Java and in Scheme-based languages, as well as the design of interactive games with graphics.
In 2002 I started to work on implementing Matthias Felleisen’s vision for extending this curriculum to cover program design in the object oriented style using a class-based Java language. This part of the project became known as ReachJava. The draft of the textbook How to Design Classes, while incomplete and somewhat outdated, covers most of the material covered by this curriculum. However, the software I have designed to support this curriculum: the tester library and the javalib world libraries, together with the extensive course materials (lab tutorials, assignments, lecture notes, and sample programs) provide a pathway for adopting this curriculum at any school or college.
During the past eight or more years, Emmanuel Schanzer has been working on adopting the introductory part of the TeachScheme! curriculum to middle school level (teaching algebra through programming) in what is now known as Bootstrap.