Teaching How to Design Programs

We solve many problems by writing computer programs. To solve a problem, we need to understand the problem, to formulate the problem into a specification, and to write a program that satisfies the specification. Many of programming courses at school focus on the last step. However, we desire to teach the whole steps, what we call “designing programming,” as an essential skill to solve problems through programming.

We are interested in teaching how to design programs, in particular developing tools that support teaching. Towards this goal, we are investigating programming/development environments that assist Felleisen’s design recipes.

Program design recipes are sequences of steps for defining functions.  They were introduced by Felleisen et al. as a solution to the Blank Page Syndrome, a situation in which the programmer faces an empty editor due to the lack of instructions on how to advance.  While program design recipes are used in many universities, there has not been enough support for this concept.  As a consequence, the programmer could skip certain steps, or make mistakes in the course of program development, and thus lose the opportunity to take full advantage of design recipes.

In this project, we develop a programming environment that gives novice-friendly instructions for each step of design recipes.  Currently, we have implemented a browser-based environment for defining functions based on structural recursion.  We are currently extending the environment with support for more advanced function definitions; more specifically, those involving nested data structures, generative recursion, and accumulators.

Our proposed environment Mio. Though it looks similar to Scratch, it is not for coding. It is for the earlier steps of the design recipe; i.e., analyzing problems’ inputs and outputs and sketching the structure of computation based on input types.

News