s7oev/spd is my proof that I have finished the courses Systematic Program Design - Part 1 (SPD1x), Systematic Program Design - Part 2 (SPD2x) and Systematic Program Design - Part 3 (SPD3x). All three are available on edX: SPD1x / SPD2x / SPD3x, however, were offered as MOOCs in 2015 so they are currently archived, meaning all material can be accessed but the staff is not available for support and no official certificates can be granted.
So, this repo shows all my work in the courses, including solutions to the recommended problems, as well as the quizzes. The latter can be design quizzes - in which case my code is shown, or multiple choice - in which case a PDF is attached. Keep in mind that the functional programming language used in this course is Racket-based (which itself is a dialect of Lisp). Because of this, DrRacket is necessary to preview properly the code. I have made exports of my solutions, yet they may have some missing data sometimes - because DrRacket allows the direct input of images, which cannot obviously be achieved in the text-only export. Yet, obviously, the actual code will be perfectly readable from the exports.
Most folders will have the following structure:
1. (problem name)-starter.rkt :: problem statement
2. (problem name)-solution (mine) export.txt :: my solution exported to txt
2. (problem name)-solution (mine).rkt :: my solution
2. (problem name)-solution (mine).rkt~ :: DrRacket temporary file (ignore)
3. (problem name)-solution.rkt :: official (from course staff) solution
Week | Module Name | Lectures | Time to complete | Practice Problems | Quiz |
---|---|---|---|---|---|
Overall learning goal | |||||
1 | Beginning Student Language | 8 | 5-8 Hours | 4 | none |
Learn to program with the core of the programming language used throughout the course. | |||||
2 | How to Design Functions (HtDF) Recipe | 6 | 4-7 Hours | 3 | Self-Assessed Design Quiz |
Learn to use the HtDF recipe to design functions that consume simple primitive data. | |||||
3 | How to Design Data (HtDD) Recipe | 12 | 5-8 Hours | 3 | Self-Assessed Design Quiz |
Learn to use the HtDD recipe to design data definitions for atomic data. | |||||
4 | How to Design Worlds (HtDW) Recipe | 7 | 3-5 Hours | 1 | none |
Compound Data | 3 | 4-6 Hours | 3 | Peer-Assessed Final Project | |
Learn to use the HtDW recipe to design interactive programs with atomic and then compound world state. |
Week | Module Name | Lectures | Time to complete | Practice Problems | Quiz |
---|---|---|---|---|---|
Overall learning goal | |||||
5 | Self-Reference | 7 | 5-7 Hours | 4 | Multiple Choice Quiz |
Learn how to use well-formed self-referential data definitions to represent arbitrary sized data. | |||||
Reference | 3 | 4-6 Hours | 2 | ||
Learn to predict and identify the correspondence between references in a data definition and helper function calls in functions that operate on the data. | |||||
6 | Naturals | 2 | 3-4 Hours | 2 | Self-Assessed Design Quiz |
Design an alternate data definition for the natural numbers, and learn to write functions using this new data definition. | |||||
Helpers | 6 | 6-9 Hours | 1 | ||
Learn a set of rules for designing functions with helper functions. | |||||
7 | Binary Search Trees | 6 | 5-6 Hours | 3 | Multiple Choice Quiz |
Design a data defintion for Binary Search Trees, and learn to write functions operating on BSTs. | |||||
Mutual Reference | 5 | 6-7 Hours | 1 | ||
Learn to design with mutually referential data. | |||||
8 | Two One-Of Types | 2 | 3-5 Hours | 2 | Self-Assessd Design Quiz |
Learn to use a cross-product of type templates table to design functions operating on two complex pieces of data. | |||||
Local | 6 | 8-10 Hours | 4 | ||
Learn to use local expressions in your function designs. |
Week | Module Name | Lectures | Time to complete | Practice Problems | Quiz |
---|---|---|---|---|---|
Overall learning goal | |||||
9 | Abstraction | 7 | 8-12 Hours | 3 | Multiple Choice Design Quiz |
Learn how to design functions that are more general and versatile using abstraction. | |||||
10 | Generative Recursion | 3 | 5-6 Hours | 2 | Multiple Choice Design Quiz |
Learn how to use generative recursion to create fractals. | |||||
Search | 9 | 8-9 Hours | 0 | ||
Expand on generative recursion to solve search problems, such as Sudoku. | |||||
11 | Accumulators | 5 | 9-10 Hours | 3 | Multiple Choice Design Quiz |
Learn how and when to use accumulators in several ways. | |||||
12 | Graphs | 4 | 7-8 Hours | 3 | Multiple Choice Design Quiz |
Learn to identify when information naturally forms a graph, and learn to write functions operatingon such data. |
</div>