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 will 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.

More soon!

The goal of this lesson and assignment is to introduce students to the environmental impacts of computing.

**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.

Slides (pptx) Homework (tex) Homework (pdf)

*This lesson was created with the help of Jon Wilson in Haverford College's Environmental Studies Department.*

Suresh Venkatasubramanian, Sorelle Friedler, Seny Kamara, and Kathi Fisler.

This project is funded by the Mozilla Responsible Computer Science Challenge.