Engineering for Ethics, Privacy, and Fairness
in Computer Systems
Winter 2026
Description: This course takes a technical approach to understanding ethical issues in the design and implementation of computer systems. Technologies like machine learning systems, large language models, the web, ubiquitous sensing, algorithmic personalization/targeting, and surveillance systems all raise numerous ethical concerns. Tensions often arise between a computer system's utility and its privacy-invasiveness, between its robustness and its flexibility, and between its ability to leverage existing data and existing data's tendency to encode biases. The course will demonstrate how computer systems can violate individuals' privacy and agency, impact sub-populations in disparate ways, and harm both society and the environment. It will also introduce computational approaches to privacy, fairness, transparency, anonymity, internationalization, and auditing. Through hands-on programming assignments and a final project, students will design and implement computer systems that reflect both ethics and privacy by design. They will also wrestle with fundamental questions about who bears responsibility for a system's shortcomings, how to balance different stakeholders' goals, and what societal values computer systems should embed.
Course Staff
Office Hours
- Mondays 4:30p-5:30p in JCL 363 (Blase)
- Tuesdays 10:30a-12:00p in JCL Common Area 3C (Madison)
- Thursdays 11:30a-1:00p in JCL Common Area 3C (Madison)
Course Information
| Prerequisites |
CMSC 14400 or 15400 or similar with permission of the instructors. You should be comfortable writing substantial code in Python. |
| Lectures |
There will be 18 lectures (well, 16 accounting for MLK Day and the midterm) during the course. Lectures will be held 3:00p - 4:20p on Mondays and Wednesdays in Ryerson 276. Lectures will rely heavily on engaged participation and discussion among students to explore issues of ethics, fairness, privacy, and responsibility. To protect the privacy of students voicing their opinions and to encourage robust discussion, recording lectures is prohibited. |
| Coursework |
The coursework for CMSC 25910 consists of seven programming assignments, seven reading responses, an in-class midterm exam, and a final project (including a short presentation and report). There is no final exam.
Most assignments will contain two types of activities. The first type, synthesis, usually involves substantial programming tasks that synthesize ethical lessons from the prior week's lectures in the context of implementing real systems. Synthesis tasks will be graded both on the quality of the implementation and the integration of the ethical issues presented in the course. The second type, exploration, generally involves somewhat underspecified tasks that will illuminate how easy it is to inadvertently implement computer systems in ways that are problematic. Exploration tasks will be graded primarily on completeness, and they specifically will not be graded on their adherence to ethical principles. In fact, the goal of exploration tasks is for ethical issues to arise organically in your own code.
Across these two styles of tasks, you may write code in multiple languages, though most often Python. We expect that students will be proficient programmers in general and will have some experience with Python. Assignments are due on Thursday evenings and are given a numerical grade (0-100).
In addition, there will be weekly reading responses, which will ask you to respond in prose to readings germane to the topics we will be covering that week. Reading responses are typically due on Monday evenings and are graded satisfactory (full credit), unsatisfactory (1/3rd credit), or incomplete (no credit).
There will be a final project involving an amount of work roughly equal to three assignments. The project will be completed individually. At around the midpoint of the course, we will provide a list of possible project topics. Students will then submit a written project proposal and meet briefly (for about 10 minutes) with Blase about their project idea. The project will be due at the end of finals week in lieu of a final exam. The final project submission includes a written report, as well as a 10-minute final presentation to the course staff during finals week.
|
| Textbook |
We will not be using a textbook, but rather reading news articles and papers published in recent computer science conferences. Nonetheless, if you are interested in the machine learning aspects of the course, you might consider looking at Kush Varshney's Trustworthy Machine Learning book or Solon Barocas, Moritz Hardt, and Arvind Narayanan's Fairness and Machine Learning book. If you are interested in the privacy aspects of the course, the /r/privacy subreddit maintains a reasonable list of recommended readings. If you want an overview of privacy concepts focused on technology professionals, the IAPP has a number of useful textbooks, including an introduction to privacy for technology professionals, for which Blase co-authored a chapter.
|
| Communication |
We will update the course schedule throughout the course and will post PDF slides there following the relevant class.
All assignments will be distributed on Canvas and will require you to write both computer code and prose. You will upload all code and all prose to Gradescope. Note that part of the process of submitting work on Gradescope involves specifying where in your uploaded PDF the answers to each question are, so please allow time for doing so as you submit. We will use Gradescope to grade the assignments, so you'll receive feedback both about your prose write-up and your code on Gradescope. If you believe there was a grading error for an assignment, use the "regrade request" functionality on Gradescope, which will help us track these requests.
We'll use Ed for general discussion, questions about the course material, and questions about assignments. Please keep all course-related communication to Ed; please don't email any members of the course staff unless you cannot access Ed or you only want to talk to Blase (and not the TAs) about a personal emergency or similar situation. If you need to reach out to the instructors (e.g., pertaining to an illness or other events that might be impacting your performance in class), please make a private post on Ed. Please be sure to use the "Extensions request" tag on Ed for any requests for extensions (see "Late Policy" below for further details). In addition, please use the "P/F request" tag on Ed to request to take the class pass/fail (see "P/F Grading" below for further details). Obviously, post both types of requests as private, visible only to the course staff.
|
| Ed Discussion Guidelines |
If you are posting general questions about an assignment (e.g., clarification questions, broad questions about an error you encountered), please post publicly (visible to everyone in the class) on Ed. If you are asking a question about your specific approach to an assignment (especially if you are including any code) or if you are reaching out to the instructors about a personal or logistical matter (e.g., pertaining to an illness or other events that might be impacting your performance in class), please make a post on Ed visible only to the instructors.
Before You Post:
- Before you post we expect that you have attended all relevant lectures, carefully read the assignment, and have tried to solve the problem yourself.
- See if the question has already been answered. We realize there are often a ton of posts (and even more private posts that you don't see), but please spend a few minutes to check if your question has already been asked.
Posting a Question:
- Ask a specific question in your post. Your question should be about a specific problem that you are running into, a conceptual question, or other logistical issue. Just saying "Here is my code for problem X, it isn't working please help" is not actually a question. We are happy to help work through stuff but we expect you to provide clear hypotheses about which parts of your code are or are not working before asking for assistance.
- While "Here is my code for problem X, is it right? thx" is a specific question, please do not ask that specific question. We won't answer it.
- Post clear, specific titles for your questions. This helps the search functionality.
- Give details in your post. More information is better. Please include as much information as possible about your approach and what you have determined is or is not causing problems. If applicable, tell us about the specific error you are running into and share terminal output or output from the JavaScript console as applicable. Tell us about what you have already attempted to do to solve your problem (if you haven't tried to solve your problem on your own you should wait before posting).
- Format your code. If you are providing code in your post, please format your code using code blocks.
- Don't include screenshots of code! Including screenshots can make your posts less readable. Instructors/TAs may want to copy/paste your code to help answer your question by debugging the code themselves. Doing so is not possible from screenshots.
Responding to Posts:
- Please respond to each other's posts! When you do respond to posts feel free to give hints or suggestions, but please don't tell people exactly how to solve one of the exercises. Of course, don't include your own code or solution in these replies.
Note: This guidance is heavily based on guidance written by Julia Hanson (a former TA for CMSC 23200), which itself was partially based on the discussion board question policy from Foundations of Computer Networks by Borja Sotomayor.
|
| Late Policy |
We will accept assignments up to 24 hours late with a 15 point grade penalty. Assignments more than 24 hours late will not be accepted.
Of course, in exceptional circumstances related to personal emergencies, serious illness, wellness concerns, family emergencies, and similar, please make the course staff aware of your situation and we will do our best to find a mutually agreeable solution, such as an extension. We do not consider job interviews, midterms in other classes, or non-emergency travel to be exceptional circumstances and will not grant extensions in those cases.
|
CMSC 25910 vs. CMSC 25900 vs. DATA 25900 |
Spring 2020 saw the first offering of a new UChicago class --- "Ethics, Fairness, Responsibility, and Privacy in Data Science" --- offered under the course number CMSC 25900. The course was co-created and co-taught by Raul Castro Fernandez and Blase Ur, and it was open to students in both the Data Science and Computer Science programs at UChicago.
Since 2021, we have instead offered two distinct, yet related, classes with different target audiences. DATA 25900 focuses on ethical issues in data science. Students pursuing UChicago's Data Science Minor, or who are intending on a career in data science, should take DATA 25900. Programming assignments for DATA 25900 are in Python using Jupyter Notebooks, similar to DATA 11800 and 11900.
CMSC 25910, taught by Blase Ur, instead focuses on ethical issues in the design of computer systems. Students pursuing UChicago's Computer Science Major or Minor, or who are intending on a career as a software engineer, should take CMSC 25910. Programming assignments will be more substantial and may necessitate using a variety of programming languages, though Python will be the primary one. Note that CMSC 25910 was offered in Spring 2021 under the old course number (CMSC 25900). To formally change the course title, from Spring 2022 onward the class is offered in modified form as CMSC 25910.
If you are uncertain whether DATA 25900 or CMSC 25910 is right for you, please write to Blase as soon as possible, explaining your background and academic trajectory.
Note that students may not take more than one of DATA 25900, CMSC 25900, and CMSC 25910 for credit, even in different quarters. Further note that CMSC 25900/25910 counts for both the Data Science (DS) and Computer Science (CS) programs. In the CS program, CMSC 25900/25910 counts as a CS elective. CMSC 25910 also counts towards the Computer Security and Privacy specialization. However, DATA 25900 only counts for the Data Science program; it does not count for the CS program. If you happen to be majoring in CS and minoring in DS, note that a single course cannot count for both your major and your minor.
|
Grading
Your course grade will be calculated as follows:
|
Total |
| Assignments (7) |
49% (7% each) |
| Reading Responses (7) |
7% (1% each) |
| Midterm Exam |
16% |
| Final Project |
24% |
| Class Participation |
4% |
P/F Grade Policies
As outlined in UChicago's
policy, this course may be taken pass/fail (P/F). Students who wish to take the course pass/fail, instead of for a letter grade, must make an Ed post with that request by the end of Week 9 (March 6th, 2026 this quarter) as a private post on the Ed course forum. A grade of P will be given to students who would have earned a C- or better in the course if it were taken for a letter grade. Note that a class taken pass/fail typically will not count toward the computer science major.
Academic Integrity Policies
The University of Chicago has formal policies related to academic honesty and plagiarism, as described by the
university broadly and
the college specifically. We abide by these standards in this course. Depending on the severity of the offense, you risk being dismissed altogether from the course. All cases will be referred to the Dean of Students office, which may impose further penalties, including suspension and expulsion. If you have any question about whether some activity would constitute cheating, please ask. In addition, we expect all students to treat everyone else in the course with respect, following the norms of proper behavior by members of the University of Chicago community.
Student interactions are an important and useful means to master course material. We encourage you to discuss the material in this class with other students and to form study groups. It is totally acceptable to discuss assignments in general terms, such as discussing and sketching out the general approach to an assignment on a whiteboard (or the virtual equivalent thereof). However, it is not acceptable to show someone else your code, nor to look at someone else's code, even over screensharing. Similarly, it is not acceptable to turn in someone else's writing or code (or fragments thereof) as your own. When the time comes to write down your answer, you should write it down yourself from your own understanding.
Moreover, you must cite any material discussions you had with another student in the course or any written sources you relied on in non-trivial ways when working on an assignment.
That is, at the top of each assigment write-up submission (your PDF), you must include a list of all other students with whom you discussed the assignment and all resources (e.g., URLs of webpages) that directly influenced your general solution. For example, "I discussed this assignment with Jane Smith and John Doe. I consulted https://www.helpfuldomain.com/helpfulpage.html to learn about the JavaScript event loop." You do not need to cite discussions with the instructors or TAs, nor do you need to cite anything from our course Ed Discussion page. You also do not need to cite the course slides or any other readings/materials we provide to you. If one student "helps" another by giving them a copy of their assignment, only to have that other student copy it and turn it in, both students are culpable.
Furthermore, if you are
reusing short code snippets fairly verbatim (e.g., from a tutorial) for a small section of your assignment, that is fine, but you
must indicate the source (e.g., URL) as a comment in your code at the place where you are reusing code. Failure to attribute code reuse as a comment in your code where a code snippet from a tutorial, StackOverflow, or similar is being reused is a violation of our academic integrity policy. You should not be reusing code snippets for a substantial fraction of your assignment.
As a rule of thumb, if more than 4 lines of code are taken mostly verbatim from a given source, you are probably violating the academic integrity policy and should check with the course staff (in a private Ed post) about this code reuse well before the assignment deadline.
In general, for any specific questions you have about why your specific approach to a problem isn't working (and definitely for any post that includes your own code), you should default to posting privately to the course staff on Ed. If you have more general clarification questions or comments about assignments that don't include code snippets, please post publicly on Ed.
If you have any questions about what is or is not proper academic conduct, please ask an instructor. Please note that we are personally willing to pursue cheating cases and have done so in the past. Finally, note that this description of academic honesty is derived in part from policies written by Stuart Kurtz and John Reppy. It is also very similar to a policy developed by Blase in collaboration with David Cash for a different course (CMSC 23200).
AI/LLM Policy
An additional note on the use of generative machine learning. Cheating and plagiarism can include presenting the outputs of generative machine learning models (e.g., ChatGPT, Copilot, OpenAI's GPT models, Meta's Llama models, Google's Gemini models, Anthropic's Claude models) as one's own work without explicit citation and acknowledgment of what specifically was used from such models. In this course, we do not permit the use of any generative models for any prose (including reading responses) even with citation and acknowledgment. In coding tasks, however, these models can be used and cited similar to a StackOverflow post unless otherwise specified in an assignment's description. Whereas you would provide a URL to document your use of StackOverflow, for generative models your should include at the top of your assignment the prompt you provided the model and the parts of the model's output that meaningfully influenced your submission. The same rules apply to generative models as they would for code reuse. Using a generative model to turn natural language into a few lines of code for a minor part of the assignment is permitted. Using more than 4 lines of code at a time from a generative model, using a generative model to solve the main intellectual aspects of an assignment, or using a generative model to produce a substantial amount of your code (even if it's just a series of small snippets of code spliced together) are not permitted. For coding assignments, using a chatbot to replace a Google query to find resources on the relevant syntax of a language is permitted as long as this use is properly attributed.
Wellness
If a personal emergency comes up that might impact your work in the class, please let Blase know in an Ed post visible only to the instructors so that the course staff can make appropriate arrangements. University environments can sometimes be very overwhelming, and all of us benefit from support during times of struggle. You are not alone. There are many helpful resources available on campus and an important part of the college experience is learning how to ask for help. Asking for support sooner rather than later is often helpful. If you or anyone you know experiences any academic stress, difficult life events, or feelings like anxiety or depression, we strongly encourage you to seek support. The University of Chicago's
counseling services are here to support you. Consider also reaching out to a friend, faculty or family member you trust for help getting connected to the support that can help.
If you or someone you know is feeling suicidal or in danger of self-harm, call someone immediately, day or night:
• Student Counseling Urgent Care: (773)702-9800 or in person.
• National Suicide Prevention Lifeline: 1-800-273-8255