Course information

Fall 2023, Thursdays 3:00–4:15pm
Barnum 034
Instructor: Andy Stuhl

Office hours Thursdays 4:30–5:30pm and online by appointment


Computer code underpins everything from scientific research to cultural production. It is at once a vast, distributed infrastructure and a mundane textual object. In this reading lab we will consider the work of writing, controlling, and maintaining information systems—and the programmer as a social construction that performs and is defined by this work. Who gets to be a programmer? What does it mean to program today, and what has it meant in the past? The authors in this syllabus have explained and critiqued computing. They have traced the power relations that give programming not just industrial but social significance. They have recovered moments when computing held particular coercive or liberatory connotations that have since fallen away from mainstream attitudes toward software. Some have proposed new ways that computing can serve a more just society, reconceiving the programmer as a bearer of socio-technical responsibility. This course may complement coursework in Computer Science, but it assumes no prior experience with coding and aims to provide equally relevant context for any of the myriad scientific and engineering domains to which programming has become infrastructural.

Learning objectives

  • Use STS concepts to examine computer code and its applications
  • Become a more critical reader of code, software interfaces, software industry rhetoric, and tech criticism
  • Become a more adept and strategic reader of academic writing
  • Relate new developments in computation to historical precedents
  • Understand the present social and professional structures that surround software development in American and global contexts
  • Begin developing informed opinions about how programming should function in your society

Course structure and class structure

This first four weeks of the course will focus on historical perspectives. In week five, we will step away from the computational sense of “programming” to consider how other meanings of the word operate in separate but connected contexts. Weeks six through ten will focus on significant social forces presently shaping the work of programming. In the remaining weeks, we will consider the limits and potentials of programming as a profession and as a sociotechnical activity, often by way of critiques that authors have helped enact beyond writing.

Each class session will include:

  • Discussion of each student’s assigned comment on the reading
  • Opportunities to reflect on how other coursework connects to this course’s concepts
  • Context for the coming week’s reading

Classroom and email etiquette

Please call me Andy in class and when writing. I use he/him/his pronouns. If there is anything you’d like me to know about how you prefer to be addressed and you would be more comfortable telling me by email than in a class session, I would be very glad to hear from you.

When emailing with a question, please double check this syllabus and our Canvas page for the answer first. Keep in mind that I generally won’t answer email outside of weekdays 9am–5pm (and won’t expect you to, either).

Weekly assignment

Your assignment each week from Sept 11 onward, which you will share with the class via our Canvas page by 9pm Monday evening, is to:

  1. read the assigned readings,
  2. pick a single sentence from one reading that either
    1. confused you the most or
    2. excited you the most; then,
  3. type out the sentence and note the page number, and
  4. as briefly as possible, explain
    1. what you think it means, in your own words, and
    2. why it confused/excited you.

Some elaboration on the above:

  • A and B don’t always need to be different things—it could be the case that the most confusing and exciting parts of a text are the same part for you. But for clarity’s sake, I encourage you to indicate “confused” or “excited” unless you specifically feel both about the sentence in question. “Excited” could also mean “annoyed”—disagreement with authors is very welcome here, as long as you explain your thinking.

  • By “as briefly as possible,” I mean that writing one sentence each for parts i and ii is sufficient. If it takes more words to explain your thinking, feel free to use them. A successful response here is specific, not lengthy.

  • Here are two examples of how an effective response might read:

    “Against this nostalgia, Butler, following Jacques Derrida, argues that iterability lies behind the effectiveness of performative utterances” (Chun, page 28). This sentence basically seems to mean that to say something convincingly, you have to say it a bunch of times. It confused me because there is clearly some serious philosophy involved here, and I don’t see why it’s needed to set up the paragraph’s pretty obvious point that “the programmer/user… is produced through the act of programming.”

    “Rather than starting with an explanation of the computer processes involved, they explained time-sharing from the user’s point of view—how a user accessed the machine, the commands entered by the user, and how the user exited the system” (Rankin, page 29). This sentence describes how the designers of BASIC made an instruction manual for new programmers instead of a technical document for advanced ones. It excited me because in my experience it’s still a problem that documentation for a lot of code tools starts with jargony technical explanations, and it can be really hard for a new user to even find setup instructions for trying them out. It’s interesting that people were already confronting this problem in the 1960s.


Readings by week

Week 1, Sept 7: Getting with the program (no assignment due)

  • Morgan Meis, “Ellen Ullman: We Have to Demystify Code,” Literary Hub, October 2017.

Week 2, Sept 14: Contexts of control

  • Meredith Whittaker, “Origin Stories: Plantations, Computers, and Industrial Control,” Logic(s), no. 19 (2023): 13–22.
  • Charlton McIlwain, “The Police Beat Algorithm: The Code That Launched Computational Policing and Modern Racial Profiling,” in "You Are Not Expected to Understand This": How 26 Lines of Code Changed the World, ed. Torie Bosch (Princeton, NJ: Princeton University Press, 2022), 49–55.

Week 3, Sept 21: Ideas and institutions

  • “Preface” (pages xi–xv) and Chapter 3, “Power and the Power of Ideas” (pages 42–56) in David F Noble, Forces of Production: A Social History of Industrial Automation (New York, NY: Oxford University Press, 1984).
  • Chapter 1, “When Students Taught the Computer”—pages 12–16 and 28–37 (pages 17–27 optional)—in Joy Lisi Rankin, A People’s History of Computing in the United States (Cambridge, MA: Harvard University Press, 2018).

Week 4, Sept 28: Software and sovereignty

  • “Preface: Programming the Bleeding Edge of Obsolescence” (pages xi–xiii), “I: Invisibly Visible, Visibly Invisible,” and Chapter 1, “On Sourcery and Source Codes,” through section “Automation as Sourcery” (pages 15–46) in Wendy Hui Kyong Chun, Programmed Visions: Software and Memory (Cambridge, MA: MIT Press, 2011).

Week 5, Oct 5: We now interrupt this program

  • Chapter 4, part B, “Programming as Sequence or Flow” (pages 86–96) in Raymond Williams, Television: Technology and Cultural Form (London, UK: Routledge, 1974).
  • Chapter 3, “Music as a Technology of the Self,” through section “Knowing what you need – self-programming and musical material” (pages 46–51) in Tia DeNora, Music in Everyday Life (Cambridge, UK: Cambridge University Press, 2000).
  • Start of introduction through section “Programming Environments, Programming Sense” (pages 1–12) in Jennifer Gabrys, “Environment as Experiment in Sensing Technology,” in Program Earth: Environmental Sensing Technology and the Making of a Computational Planet (Minneapolis, MN: University of Minnesota Press, 2016).

Week 6, Oct 12: Openness

  • Introduction, “A Tale of Two Worlds”—pages 1–4 and 11–20 (pages 5–10 and 20–22 optional)— in E. Gabriella Coleman, Coding Freedom: The Ethics and Aesthetics of Hacking (Princeton, NJ: Princeton University Press, 2013).
  • Chapter 5, “Working Imaginaries” (pages 128–148) in Christina Dunbar-Hester, Hacking Diversity: The Politics of Inclusion in Open Technology Cultures (Princeton: Princeton University Press, 2019).

Week 7, Oct 19: Universalism

  • Anita Say Chan, “Digital Interrupt: Hacking Universalism at the Network’s Edge,” in Networking Peripheries: Technological Futures and the Myth of Digital Universalism (Cambridge, MA: The MIT Press, 2014), 173–96.

Week 8, Oct 26: Pipelines

  • Chapter 1, “Of Code and Capital” (pages 1–13) in A. Aneesh, Virtual Migration: The Programming of Globalization (Durham, NC: Duke University Press, 2006).
  • Janet Abbate, “Coding Is Not Empowerment,” in Your Computer Is on Fire, ed. Thomas S. Mullaney et al. (Cambridge, MA: MIT Press, 2021), 253–71.

Week 9, Nov 2: Best(?) practices

  • Paula Bialski, “Code Review as Communication: The Case of Corporate Software Developers,” 2019.
  • Miriam Posner, “Agile and the Long Crisis of Software,” Logic(s), no. 16 (March 2022).

Week 10, Nov 9: Programming’s edges

  • Ian Bogost, “Programmers: Stop Calling Yourselves Engineers,” The Atlantic, November 2015.
  • Chapter 1, “Humans in the Loop,” through section “Ghost Work, Machine Learning, and the Rise of AI” in Mary L. Gray and Siddharth Suri, Ghost Work: How to Stop Silicon Valley from Building a New Global Underclass (Boston, MA: Houghton Mifflin Harcourt, 2019).
  • Aaron Mok, “’Prompt Engineering’ Is One of the Hottest Jobs in Generative AI. Here’s How It Works.” Business Insider (, March 2023).

Week 11, Nov 16: Programming otherwise, part I

  • Suzanne Kite et al., “How to Build Anything Ethically,” in Indigenous Protocol and Artificial Intelligence, ed. Jason Edward Lewis (Honolulu, HI: Concordia University Library, 2020), 75–84.
  • Lilly Irani and M. Six Silberman, “Stories We Tell About Labor: Turkopticon and the Trouble with ’Design’,” in Proceedings of the 34th Annual ACM Conference on Human Factors in Computing Systems, 2016, 1–15.

Week 12, Nov 23: No class—Thanksgiving

Week 13, Nov 30: Programming otherwise, part II

  • Chapter 5, “Retooling Solidarity, Reimagining Justice” (pages 109–134) in Ruha Benjamin, Race After Technology: Abolitionist Tools for the New Jim Code (Cambridge, UK: Polity, 2019).
  • Roel Roscam Abbing, This Is a Solar-Powered Website, Which Means It Sometimes Goes Offline’: A Design Inquiry into Degrowth and ICT,” LIMITS Workshop on Computing Within Limits, June 2021, 1–6.

Week 14, Dec 7: Exploratory programming

  • Chapter 1, “Introduction,” through section 1.5, “Programming Breakthroughs” (pages 1–10) and Appendix A, “Why Program?” (pages 319–330) in Nick Montfort, Exploratory Programming for the Arts and Humanities (Cambridge, Massachusetts: The MIT Press, 2016).
  • The permacomputing wiki maintained by Devine Lu Linvega