Get started with custom lists to organize and share courses.

Sign up

Class Central is learner-supported. When you buy through links on our site, we may earn an affiliate commission.

Introduction to Systematic Program Design - Part 1

The University of British Columbia via Coursera

6 Reviews 135 students interested

Taken this course? Share your experience with other students. Write review

Overview

Sign up to Coursera courses for free Learn how

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.

Syllabus

Week One: Introduction and the structure of the course. The Beginning Student Language; expressions and evaluation rules; primitive operations on numbers, strings and images. The How to Design Functions (HtDF) Recipe.

Week Two: Representing information as data. The How to Design Data (HtDD) recipe. Atomic forms of data including intervals, enumerations, and itemizations.

Week Three: The design of simple interactive programs. The big-bang user interface framework. The How to Design Worlds (HtDW) recipe. Representing information where two or more values naturally form a whole using compound data.

Week Four: Representing arbitrary sized information using lists. Decomposition of information into multiple types.

Week Five: Functions operating on natural numbers. A parlor trick. Rules for decomposing functions.

Week Six: List abbreviations. Mutual reference allows more complex arbitrary-sized data. Using binary trees to enable fast lookup of information. Using arbitrary arity trees to represent inherently hierarchical information.

Week Seven: Functions that consume two arguments that have 'one-of' in their types. Using local definitions to improve the structure of programs.

Week Eight: Using abstraction to control reduce repetition and complexity in programs.

Week Nine: Generative recursion, fractals and search problems.

Taught by

Gregor Kiczales

Class Central Charts

Help Center

Most commonly asked questions about Coursera Coursera

Reviews for Coursera's Introduction to Systematic Program Design - Part 1
4.8 Based on 6 reviews

  • 5 stars 83%
  • 4 star 17%
  • 3 star 0%
  • 2 star 0%
  • 1 star 0%

Did you take this course? Share your experience with other students.

Write a review
  • 1
Mark W
5.0 5 years ago
Mark completed this course.
This course is aimed at novices, but I still got some useful things out of it. I ended up skipping most of the work towards the end due to the slow pace, but I really like the systemic approach the Prof used. The course used a language called Racket (a scheme variant), and I think that was a good thing. It eliminated syntax-related distractions and really made the data and functions clearer. The course was very well-contained and had no unspoken pre-requisites. On the contrary, it was the students coming in with a background in Java or similar languages who struggled, not the beginners! At least that’s what it looked like from the forums. This was probably only a problem for those who were set in their ways.
3 people found
this review helpful
Was this review helpful to you? Yes
Yuriy T
5.0 4 years ago
Yuriy completed this course, spending 6 hours a week on it and found the course difficulty to be medium.
This course best introducing to CS. Also you get introduction to functional programming and test-driven-development and data-driven-development.Course overall is easy ,if you will read course book (which is free on-line). All you need to know are primitives and expressions which cover in week1. Also you get a recipes how to build complex function from scratch systematically.
3 people found
this review helpful
Was this review helpful to you? Yes
Anonymous
5.0 3 years ago
Anonymous completed this course.
This was a brilliant course.

It is no longer being offered on coursera.org, but has moved (I discovered after some googling) to:

https://www.edx.org/course/how-code-systematic-program-design-part-ubcx-spd1x

I can't wait to do the second and third course, and I am a very experienced programmer. :)
2 people found
this review helpful
Was this review helpful to you? Yes
Mattia M
4.0 5 years ago
Mattia completed this course, spending 12 hours a week on it and found the course difficulty to be medium.
1 person found
this review helpful
Was this review helpful to you? Yes
Stan T
5.0 4 years ago
Stan is taking this course right now, spending 10 hours a week on it and found the course difficulty to be medium.
0 person found
this review helpful
Was this review helpful to you? Yes
Sergey S
5.0 2 years ago
Sergey completed this course.
Was this review helpful to you? Yes
  • 1

Class Central

Get personalized course recommendations, track subjects and courses with reminders, and more.

Sign up for free

Never stop learning Never Stop Learning!

Get personalized course recommendations, track subjects and courses with reminders, and more.