A computer science student first learns problem solving in data structures and algorithms. She learns to define a problem clearly, break it into solvable components, reason about the correctness of any proposed solution, measure resources used by her solution (space and time) and how to use them efficiently.
But when computer scientists apply these problemĀsolving skills to questions and systems that impact society, responsible problem design and solution requires that we model societal costs and resources accurately. In these curricular components, we aim to bring questions and issues from impacted societal domains into the data structures and algorithms curriculum where computer science students first learn a problemĀsolving mindset. We aim to create computer scientists who naturally consider issues such as sustainability, racism, and community impact (e.g., of surveillance) alongside matters of data structure design and complexity.
On this site, we post the slides and assignments for curricular modules that are core components of the standard data structures and algorithms curriculum reimagined to include a focus on responsibility.
This assignment introduces students to the idea of risk assessments in the context of an introductory data structures assignment introducing the idea of classes.
Topics: objects, classes, ArrayList, data structure design, reading in data
Background: We suggest that you have students prepare for this assignment by, in order, watching / reading the below:
These assignments focus on the U.S. elections process in the context of an introductory data structures course. One lesson can be found below and the other is the deduplication of voting rolls assignment that also includes a focus on sustainability and complexity.
Topics: recursive binary tree design, array-based heaps
Programming Assignment Part 1 Part 2
The goal of these lessons and assignments is to introduce students to the environmental impacts of computing.
These lessons were created with the help of Jon Wilson in Haverford College's Environmental Studies Department.
Topics: energy usage, complexity, sorting, hash tables, deduplication, voting
Programming Assignment (pdf) Programming Assignment (tex)
With thanks to Alvin Grissom II for the idea of considering deduplication of voting rolls.
Level: This lesson is designed to accompany Chapter 2 of Algorithm Design by Kleinberg and Tardos, and could also generally be used as a second lesson on complexity after the initial introduction of the high level and/or formal definitions in a data structures or algorithms course.
Background: In order to determine the energyusage and CO2 emissions of a function, the Python 3 package energyusage uses methodology outlined in this paper.
These materials look at how (im)mutable data structures interact with data integrity.
Topics: data integrity, (im)mutable data structures
These materials expose students to techniques for identifying social threats in systems built around data structures and algorithms.
Topics: threat modeling
These additional assignments are designed to supplement a traditional Algorithms curriculum. A version of these and additional assignments aligned with the Kleinberg and Tardos Algorithm Design textbook was created in collaboration with Atri Rudra and can be found here.
Topics: stable matching, human impact
Topics: greedy algorithms, human impact
Topics: search engines, non-ascii character sets, human impact
Suresh Venkatasubramanian, Sorelle Friedler, Seny Kamara, and Kathi Fisler.
This project is funded by the Mozilla Responsible Computer Science Challenge.