The ProgramByDesign project, formerly known as TeachScheme! project, is an outreach effort of the PLT research group. The goal is to train college faculty, high school teachers and possibly even middle school teachers in programming and computing.
Matthias Felleisen and PLT started the effort in 1995 (January, one day after the POPL symposium) in response to observations of his Rice freshmen students and the algebra curriculum of local public schools. His objective was to use functional programming to bring mathematics alive and to help inject design knowledge into the introductory computer science curriculum.
The group raised funds from several private foundations, the US Department of Education, and the National Science Foundation to create
Over ten years, it ran several dozen one-week workshops for some 550 teachers. In 2005, the TeachScheme! project ran an Anniversary workshop where two dozen teachers presented their work with students.
In 2010, PLT renamed its major programming language Racket. At the same time, the group renamed DrScheme to DrRacket and a little later TeachScheme! to ProgramByDesign.
The starting point of ProgramByDesign is the observation that students act as computers in grade school courses on arithmetic and middle/high school courses on pre/algebra. Teachers program them with rules and run specific problems via exercises. The key is that students execute purely functional programs.
If we can turn students into teachers that create functional programs and run them on computers, we can reinforce this content and show students how writing down mathematics and how writing down functional programs creates lively animated scenes and even computer games.
Here is an example:
This short program simulates an apple falling from the top to the bottom of a small white canvas. It consists of three parts:
A teacher can explain create-image as easily as any ordinary function in an algebra course. For example, one can first draw a table with two rows and n columns where each column contains t at the top and an appropriate image at the bottom. That is, if the numbers increase from left to right, then on each image the red dot is a little bit lower.