Course: CS 61: Systems Programming and Machine Organization
Course Level: Upper-level undergraduate
"CS 61 is a first course in computer systems programming, meaning the creation of high-performance programs that use computer hardware effectively. Although many programs today are written in high-level programming languages—and many programs simply glue together existing components—the best programmers are craftspeople who understand their tools. For software builders, this requires a working knowledge of computer internal organization. It means understanding how machines interpret instructions, how compilers turn programming languages into instructions, and how operating systems combine programs and libraries to create running code. And it requires understanding the factors that affect code performance.
CS 61 introduces you the tools you need to build robust, efficient software and the mental tools you need to understand software systems written by others. We hope you'll discover that systems software development is fun and worth the effort. We intend the course to be broadly accessible, though it will be easier for those who have some experience with systems programming in C++ or other C-like languages."
Module Topic: ASCII, Unicode and the Ethics of Natural Language Representation
Module Author: Cat Wade (later contributions by Marion Boulicault)
Semesters Taught: Fall 2019-2020
In this module, we consider the ethics of natural language representation in modern software systems. Software systems play a central role in how we communicate with one another, and the computer scientists who design these systems are sometimes faced with difficult choices about what representational resources they should make available to their users. To what extent should social media platforms support the vast array of languages used throughout the world? To what extent should the developers of smartphone operating systems provide their users with emoji reflecting the diverse identities and communicative needs of members of minority groups?
This module is co-taught by the professor for the course and the Embedded EthiCS Fellow. After an introduction to the ethical issues considered in the module from the TA, the professor gives a brief presentation on the technical and historical dimensions of the module’s core case study: the shift from ASCII to Unicode, and the associated choices developers made about which languages to support. The Fellow then leads a discussion of how these choices members of different linguistic communities, and why those effects matter morally. Finally, students consider various strategies that the developers of Unicode could adopt to better address the needs of minority communities.
Connection to Course Material: This module occurs during the course’s first unit on data representation and storage. The professor’s presentation during the module expands on the technical material already covered in this unit, with a focus on how it applies to the module’s central case study: the shift from ASCII to Unicode. This sets the TA up to lead a discussion of how the technical issues discussed by the professor interact with broader social and ethical concerns.
We have found that it is important to build modules around real-world case studies that both connect to technical material discussed in the course and raise ethical issues that students can readily appreciate. The shift from ASCII to Unicode has both features. Further, Unicode is the standard for encoding emojis, which provide a particularly intuitive and relatable way to illustrate the module’s core philosophical concepts (see the sample class activity in the "Implementation" tab).
Key Philosophical Questions:
Key Philosophical Concepts:
Note: Due to the fact that this was an intensive first year course, the module had no assigned readings.
Sample Class Activity:
After being introduced to the concept of representational harm, students are presented with a slide containing the current set of ‘yellow’ emoji representing families of different kinds. In small groups, students discuss what kinds of families are left out from the current set and whether those omissions constitute representational harms. The Embedded EthiCS Fellow then asks the students to split into small groups again. Half the groups are asked to formulate an argument that the current set does represent a representational harm (e.g. those groups who are already marginalized are usually the ones not represented, furthering their marginalization). The other half is asked to formulate an argument that set does not constitute a representational harm (e.g. it is pragmatically impossible to represent every different in an emoji set). Groups are then called upon alternately to generate a debate-like discussion.
Note: Due to the fact that this was an intensive first year course, the module had no assignment.
Student response to this module has been positive. Students are highly engaged and seem to grasp the key concepts. Class discussion is energetic and fruitful.