Oct 20th 2015

Systematic Program Design - Part 3: Abstraction, Search and Graphs (edX)

Taught by:

Adding abstraction and generative recursion to the design tools makes complex problems like puzzle solvers and graph search straightforward.

This programming course is unique in focusing on learning a design method rather than a programming language. This practical method builds on years of research into the structure of good programs that will help you channel your creativity to program well in any language.

A primary challenge in programming is deciding exactly what our program should do. The first contribution of the design method is a set of techniques that help you systematically develop your program requirements. You will also learn to produce programs with consistent structure that are easy to modify later. This is important because useful programs always require later improvements. In addition, you will learn how to make your programs more reliable by building tests as an integral part of the programming process.


This is a full university course broken into three parts:

In Part 1 you will learn the core design method with a focus on simple data. In this part of the course, we introduce the idea of structuring a program based on the data it consumes. This part concludes with the design of simple interactive programs. The final project is an interactive game.

In Part 2, the focus is on more elaborate forms of data that can be used for more complex information. You will learn when and how to structure data using lists and trees. The final project will be a more elaborate interactive game in which more complex data structures are required.

In Part 3 you will learn about search, generative recursion, graphs and how to blend different kinds of structuring patterns together in more complex programs. This part of the course concludes with a complex puzzle solving program project.

The course uses a small teaching language that includes the core features of nearly all other languages like Python, Javascript, Ruby, Java etc. Less than a week is required to learn nearly the whole language—the entire rest of the course is spent on program design. The focus on design together with the core nature of the language means that everything you learn will be applicable in any other language you use in the future.

See also:
Systematic Program Design - Part 1: The Core Method
Systematic Program Design - Part 2: Arbitrary Sized Data