Skip to main content
  • 1. Students can identify input / output data for particular problems, and write them down formally as type annotations.

    • 1.1. Simple types: numbers, strings, booleans, images, tables
    • 1.2. Parametric types: Lists, Trees
    • 1.3. Limitations of signatures in capturing effects.
  • 2. Students can write thorough test suites for functions of varying complexity.

    • 2.1. What is a test? How do I write one?
    • 2.2. What makes a set of tests "good" -- edge cases, coverage, concise.
  • 3. Students can clearly articulate, in precise language, documentation strings for functions.

    • 3.1. What is a docstring for?
    • 3.2. What should be in, and not be in, a good docstring?
  • 4. Students can solve smaller problem in the service of solving larger problems, without being told the breakdown ahead of time.

    • 4.1. Separate types of data should have separate functions
    • 4.2. Data transformations expressed as a sequence of simpler operations
  • 5. Students identify types of data that can be represented using tables, and write programs using common table operations.

  • 6. Students can write programs using mutable and immutable variables and mutable and immutable data.

    • 6.1. Loops over list with a single mutable variable
    • 6.2. Difference between variable and value mutation.
  • 7. Students can identify pros and cons of using given data to solve the desired problem, and identify and defend privacy issues in problems presented to them without being told there is a privacy issue to identify.

    • 7.1. Given the functional requirements of the program to be built and an explicitly identified and concrete second objective (privacy, fairness, accessibility), students can identify ways in which the given data can be used to solve the primary problem while falling short on the secondary objective.

    • 7.2. Given the functional requirements of the program to be built, students independently identify a way that using the given data to solve the problem would fall short on a second objective (privacy, fairness, accessibility) when prompted to look for one.

    • 7.3. Given the functional requirements of the program to be built, students independently identify a way that using the given data to solve the problem would fall short on a second objective (privacy, fairness, accessibility) without a prompt after practice following a checklist.

    • 7.4. Given a definition of privacy and examples of privacy problems using that definition, students can identify new privacy issues of the same kind when cued to look for a privacy problem.

    • 7.5. Relying on prior definitions of privacy, students can independently identify new privacy problems of the same kind given the cue to look for a problem but not the explicit cue to look for a privacy problem.

    • 7.6. Given experience with specific solutions previously presented to them for privacy problems, students can suggest similar mitigations for new privacy problems.

  • 8. Given a technical problem, students can (a) identify the stakeholders, (b) identify values and interests at stake for each stakeholder, (c) discuss conflicts of values, and (d) identify modifications that would mitigate conflicts of values.

    • 8.1. Given a technical problem, students can (a) identify stakeholders relative to a certain problem (e.g. privacy), including at least one stakeholder not listed in the problem set-up. Notes: Stakeholders are relative to the concern you are addressing, so have to do it with a very specific concern (such as privacy). For privacy in particular, students should recognize that people related to or friends with a named party might also have a stake in the privacy of the named party. Keep in mind that there are some stakeholders who are directly in contact with the technology and others who might be affected by the technology without being in contact with it.

    • 8.2. Given a technical problem, students can (a) identify at least one stakeholder not listed in the problem setup and (b) identify at least one value and/or interest at stake for each stakeholder.

    • 8.3. Given a technical problem, students can (a) identify the stakeholders, including some not listed in the problem setup and (b) identify at least one value and/or interest at stake for each stakeholder and (c) identify conflicts between the values and/or interests of stakeholders.

    • 8.4. Given a technical problem, students can (a) identify the stakeholders, including some not listed in the problem setup and (b) identify at least one value and/or interest at stake for each stakeholder, (c) identify conflicts between the values and/or interests of stakeholders and (d) recognize resolutions to value conflicts.

  • 9. Students learn to work with others while solving problems.

Assessable Outcomes by Week / Assignment

WeekTopicLab OutcomeHomework Outcome
1Programming with numbers, strings, images: IDE, interactions, operations on standard values-1: None
2Definitions, functions, conditionals: type annotations, test cases1: 7.1, 92: 1.1, 2.1, 3.1, 7.1
3Introduction to tables: constructing, importing, extracting2: ?,93: 1.1, 2.1, 3.1, 5, 7.2
4More on tables: transforming, filtering3: ?, 94: 1.1, 2.1, 3.2, 4.2, 5, 7.3
5From tables to lists: extracting columns, performing operations on them, visualizing data4: ?, 95: 1.1, 2.1, 3.2, 5, 7.4
6Computing with lists: iteration & mutable local variables--
7Structured data: towards trees5: ?, 96: 1.2, 2.2, 6.1, 4.2, 7.5
8Working with trees: recursive functions6: ?, 97: 1.2, 2.2, 4.1, 7.6, 8.1
9More with trees7: ?, 98: 1.2, 2.2, 4.2, 8.2
10Transition to Python: IDE, files, definitions, testing8: ?, 99: 8.3
11Transition to Python: more state & aliasing, loops, mutable data structures10: 910: 1.3, 6.2, 8.4
12Tables in Python: pandas & matplotlib--
13File I/O: csv files, via pandas and manually10: ?, 9-
14More with Python: catch up, bonus content, etc--

Lecture Backwards Design

LectureLearning Goals
1- show pyret environment
- arithmetic, expressions, evaluation
2- show strings
- shapes, images as values, composition of images
- types & errors when operations don't match
- show documentation for images
3- definitons vs interactions
- defining constants
- program directory & shadowing
4- functions to abstract repeated code
- type annotations
5- boolean values & comparison operators
- if expressions
- tests
- spy
6- introduce tabular data
- how to write literal tables
- how to extract rows & columns
7- define functions over tables
- filtering tables
- ordering tables
8- adding columns by computation
- transforming columns by computation
9- testing functions that produce tables
10- cleaning & normalizing data
11- task planning with data
- visualizing data
12- extracting columns (lists) from tables
13- using standard computations over lists
14- combining column extraction, standard computations
15- mutable variables
- for each
16- building custom reusable computations
- when
17- testing with mutable variables
18- structured data
- cases
19- conditional data
20- lists as structured data
- computing functions by examples
21- recursive functions over lists
- template for recursive functions
22- introduce tree structured data
- challenge of representing trees with tables
23- trees as recursive data
- multiple self references = multiple recursive calls
24- recursive functions over trees
- warning: trying to use for each on trees
25- show python IDE, codespaces, terminal
- arithmetic, strings, definitions
26- testing in python, dataclasses, lists
27- for loops in python
28- scoping in python (global, nonlocal), different program directory
29- mutable data structures, aliasing, contrast with pyret
equality in python
30- tables in python: loading csvs with pandas, filtering, data cleaning
31- tables in python: computing new columns, basic stats
32- visualizing with matplotlib
33- file I/O, reading & writing CSVs by hand
34- extra content: dictionaries