Introduction to Systematic Program Design – Part 1

This course is about learning to program well: building programs that are elegant, well tested and easy to maintain. The course is designed for students with no programming experience at all. Nonetheless, former students who already knew how to program have said it made them better programmers.

About The Course

Phones, diesel engines, animated newspapers, medical devices, games, political campaigns, medical research, mining, transportation systems, ... and so on, and on, and on... every day more of the world around us is at least partly run by computer programs. This means that being able to design programs - or at least be able to work with people who design programs - is becoming a more and more valuable skill.

To build your own programs you need to know two things: how to use the specific programming language and libraries needed, and the more general skill of how to design a program.

This course presents a design method that will enable you to approach the design of complex programs systematically. The method will work for programs in this course as well as hard to design programs you develop in the future.

Using this method you will learn how to model the information in a problem domain, how to structure program data to mirror that information and how to further structure the data to lead to a well organized program. You will also learn to distinguish those parts of a program that are naturally data driven, from those that should use an alternative algorithmic approach. The method uses unit-tests to both produce a better developed design, and to test your program as you develop it.

In the first course -- Part 1 -- we use a simple teaching language to cover the core of the design method. In Part 1 we cover various forms of data; simple interactive programs like games and animations; storing information in and rendering trees; and finally exploring search programs: programs that solve puzzles like Sudoku boards. 

A second phase of the course, to be offered later,  will consist of parallel tracks, with each track using a different popular programming language and focusing on a different kind of problem. This will help you bring the design method to whatever language and problem domain interests you.

Frequently Asked Questions

Can students ask questions?

We will use an on-line discussion group to enable students to ask and answer questions. Course staff will monitor the group to ensure accuracy of student answers as well as to handle unanswered questions.

What programming languages will the course use?

This course -- Part 1 of a 2 course sequence -- uses a teaching language called Beginning Student Language. Part 2 will be broken into parallel tracks that tackle problems in different domains using one or more popular languages such as Python and Javascript.

What resources will I need for this class?

For this course all you need is an internet connection and a computer. The software we will use is available for free download, and the supplementary text is also available online for free.

Recommended Background

No prior programming experience is assumed, and only a grade school math background is required.