YoVDO

Introduction to Systematic Program Design - Part 1

Offered By: The University of British Columbia via Coursera

Tags

Software Development Courses Computer Science Courses

Course Description

Overview

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

Tags

Related Courses

1C:Enterprise Junior Developer Course
Moscow Institute of Physics and Technology via Coursera
A Beginner’s Guide to Docker
Packt via FutureLearn
A Beginner’s Guide to Scrum Project Management
Packt via FutureLearn
Google Professional Cloud DevOps Engineer Certification Path Introduction (GCP DevOps Engineer Track Part 1)
A Cloud Guru
Introduction to Amazon CodeGuru
A Cloud Guru