COMPFOR 111: Computing’s Impact on Justice: From Text to the Web

This description of COMPFOR 111 is based on the offerings in Fall 2022 and Winter 2023. Future versions will likely differ in some respects.

Any U-M student can succeed in this course. No mathematical background beyond algebra is necessary. We will teach the class assuming students have no prior programming background.

The focus of the course is on text, which is at the traditional heart of the humanities. We study how text appears and is used in computing, and how computation has changed the experience of text. Most of the text we deal with daily is on the Web. We trace the development of computational text from the early days to today’s Web, as a lens to understand computing’s impact on the world. We will address directly how early computing biased towards supporting only certain kind of texts for only certain kinds of people. The Web was created with a bias towards America and Europe, men, and most strongly, towards English.

Each section of the course will teach about computing, explicitly including programming, in the frame of justice. How was computing created, and for who and what purposes – both explicit and implicit? What computational skills, knowledge, and insights support critical study of the impact of computation on our lives?

COMPFOR 111 counts towards the Interdisciplinary (ID) and QR/1 LSA Distribution requirements.

Course Goals

At the end of this class students will be able to:

  • Create and design software for some kinds of problems.
  • Be a “conversational programmer.”
  • Express an understanding of how the technology in the world is designed and created.
  • Question the bias in computational systems and to challenge how the systems are designed and built.
  • Be able to recognize and talk about industry/community-standard programming languages like Python and SQL.
  • Be able to recognize and explain the contents of webpages, including how to make webpages more accessible.
  • Describe the relevance of data collection as it relates to privacy
  • How the Internet is generated from databases
  • Build a chatbot and explain how it works


Race and Ethnicity Requirement

The Race and Ethnicity Requirement aims to help you develop your understanding of the complexities of living and working in increasingly diverse and interconnected societies, and enhance your communication skills in such settings. Courses that fulfill this requirement encourage you to engage and think critically about topics such as power, inequality, race, ethnicity, and racism. They teach you to recognize the ways in which race and ethnicity are embodied; how they can intersect with other group identities; and the implications of these intersections for democratic citizenship in the University community and beyond.

Race and Ethnicity (R&E) courses are opportunities for you to gain an understanding of the complexities of racial and ethnic matters in the U.S. and across the globe. They prepare you for life in an increasingly diverse and interconnected world, and help you see your own experiences in relation to those of others by providing you with skills for critical analysis and communication. More than forty units and departments in LSA and other schools on campus offer courses that satisfy this requirement at both the lower‐ and upper‐division levels. You may choose courses from the full range of humanities and social science subjects and in a class format that suits you best, including seminars, intergroup dialogues, and study abroad. Course emphases range from theoretical analyses to learning intergroup discussion skills. Be sure to check the full range of offerings for the one that best fits your interest.


  • 15% – Five Short Homework Assignments in Snap turned in via Canvas
  • 15% – Three Projects
  • 10% – Nine reading reflections.
  • 10% – Four ebook assignments. Graded on effort not correctness.
  • 25% – Six online quizzes. (There will be seven quizzes, lowest score will be dropped. They are released on Wednesday and due on Sunday.)
  • 15% – Final Project.
  • 10% – Participation (in-class activities). Typically, 90% attendance gives you 100% of participation points, 80% gives you 90% of participation points, and so on.


0. Introduction

After an icebreaker and an overview of the course, we introduce terms.  We use the definitions of race, ethnicity, and caste from Isabel Wilkerson’s Caste, and that race is learned. We introduce socially-just imaginaries from Ruha Benjamin’s Race After Technology. At the end of the first class, everyone creates a Snap account in-class and writes their first program.

  1. Representing Text and Language (2 weeks)

Computers represent everything with voltages on wires, which get interpreted as 0’s and 1’s. How do we get text into a computer? Early computer scientists decided on a representation for how to map text onto 0’s and 1’s, and they used a model of a typewriter. These choices made it easiest to use English on the computer and created barriers to using languages with other character sets and glyphs. Unicode, wasn’t invented until 1991, after a lot of software was already created. Reading: From Punchards to Unicode.

We move into representing language on the computer, asking questions like “How does Alexa understand a sentence, and why doesn’t it understand Spanglish?” and “How do Twitter misinformation bots generate speech?” Students write sentence models for generating and recognizing sentences, then move into Snap for building Dr Seuss, political Twitter bots, poetry generators. Reading: Voice Assistant Speaking Spanglish.

Sentence Recognizer

Example: A possible algorithm for a political twitter bot

Text description of the algorithm for a political Twitter bot, then a Snap blocks description.

2. Chatbots (1 week)

The history of chatbots starts with Alan Turing and the Turing Test for machine intelligence, and then moves to Joseph Weizenbaum and Eliza — and Weizenbaum’s concerns about how easily humans were duped into believing Eliza was real. We talk about the relative power of different computational models for chatbots. We build Eliza in both Snap and Charla-bot, and then students build their own chatbots. We convert our chatbots into a Web form called a Charla-bot. We discuss language representations on the computer. What are the relative advantages of text and graphical languages? Reading: History of AI and Chatbots. Ebook: Work through the first chapter of the ebook, which shows students how language generation and chatbots are created in Python.

3. Web (2-3 weeks)

Who created the Internet? Why was it created? The computing world as we know it today as its roots in an all-male, almost-all-white, Ivy-league campus and football. The World Wide Web was invented by an Englishman who built English into the heart of it. In groups, we go on a scavenger hunt to find examples of HTML inside of Web pages across the Internet. We build web pages, and provide checklists on how to make Web pages more accessible. We introduce Twine and contrast the three ways we know to build Web pages: With HTML, with Snap blocks that generate HTML, and with editors in Web pages that generate HTML (like Twine and WordPress). Reading: Introduction to Algorithms of OppressionEbook: Chapter 2 on HTML.

Example set of blocks for making a clickable image of Darth Vader

Block form of web page on left, rendered HTML on right.

Example set of blocks for adding alt text to an image

A set of Snap blocks that render a web page where the image block also includes an alt tag.

4. Data (1 week)

Anything that is on the Web (including HTML pages) can be input (data) for a program. It becomes data that we can analyze. That’s how Web search works. We build Web scrapers and simple examples that explain how the Google Page Rank algorithm works. We use these examples to explain how Safiyah Noble’s examples of oppression could happen. We analyze databases downloaded from the Web (about billionaires and where they got their wealth, and about passengers on the Titanic and how gendered assumptions are built into the data collection, and about demographics in US counties). Finally, we use databases with our Web blocks in order to generate web pages from databases, which is the method by which most websites across the Internet (especially catalog and news sites) are created. Reading: “Weapons of Math Destruction” Examples and Impacts. Ebook: Chapter 3 on Databases and SQL

Example set of blocks for listing the software billionaires in the US in 1996

Snap bocks that grab all the software billionaires from 1986 and generates a Web page summary of them

5. Privacy (2 weeks)

Programs that read the Web can read multiple sources of data and correlate them, which is a database join.  Data that represent us can be connected with other data, and that can threaten our privacy. We look at what data all Web sites all over the world gather, and how that can be analyzed. We discuss GDPR, and consider what the protections are for privacy in the US. Finally, we ask how law enforcement might use Web data to investigate threats and what constitutes a real threat. Reading: Chatbot Crime (fiction).

6. Visualization (1-2 weeks)

Analyses of data are often conveyed with visualizations. Visualizations can also be manipulated to misinform. We review common ways in which visualizations can be misleading. We create visualizations using CODAP which can read CSV files, a data format which is easily read and written by Snap. This allows us to create visualizations from our own analyses. Reading: Humanities Data, a Necessary Contradiction.

A map of the US where each state is color-coded with the percentage of the population with tertiary education

7. AI (2-3 weeks)

Based on an AI and Machine Learning curriculum out of Germany, we discuss both classical (e.g., production rule based, expert systems) and modern (e.g., statistical, machine learning) conceptions of AI. We identify where AI is used in our world, and what are the sources of biased perspectives. We introduce reinforcement, supervised, and unsupervised machine learning. Machine learning is used in gesture recognition (e.g., swiping on a cellphone), and the assignment with this section is to build a gesture recognizer. Reading: Target, ML, and the Pregnant Teenager. Ebook: Chapter 4 on Snap to Python basics.

8. Limitations of Technology

Much of our technological world is defined by what computing cannot do.  We have secure network connections and cryptocurrency because no computer today is fast enough to decrypt encoded transmissions. Generative AI currently has no way to track how much any individual text or picture contributed to it, so artists can’t get credit for their contributions to DALL-E. Reading: Anti-shooter technologies in schools.

9. What’s next for computing education at U-M

The last lecture presents the computing education majors and minors available at U-M after this class, including computer science, information, data science, cognitive science, QMSS, DSI, and Complex Systems.

Homework Examples

Generate Haiku

Create a Snap project that generates a random haiku. It should write a new haiku each time that the green flag button is pressed. Here’s an example from Claire Keegan — press the green flag to get a new haiku.

Generate a Simple Web Page

Use the Web Microworld. to build an HTML page that is a resume for a fictional character (e.g., from Star Wars, Sherlock Holmes, Harry Potter, or Shakespeare).

Build an Adventure Game in Twine

Build an adventure game in Twine. Your game must have at least 10 passages, and there should be at least two paths through your game.

You must have some kind of score, and the score must change depending on which paths you take. The score should be visible at the top of each page. 

Answer Questions from the Log File

This is a fictional scenario.

Department of Police of Clueville, Pennyslvania has contacted you.  They received a tip that someone planning a crime used our Eliza chatbot. They think that it was either Colonel Mustard, Professor Plum, or Mr. Green. The tip to the police said that the person was really angry and seemed to think that Eliza was a real person. “I think they told Eliza about their plans,” said the tip.

The fakelog.txt dataset is based on the log file from when our class was interacting with Eliza.  Your job is to figure out: The IP address of who is planning the crime, what they said to Eliza, and see if you can figure out (a) the room where they are planning their crime and (b) what weapon the planner intends to use. (Hint: Probably mentioned on this page

Be careful not to accuse people who just say that they are angry, or even who say that they are planning a crime but are not serious. How would you know what is a real threat?

Create a Gesture Recognizer

Train a recognizer to recognize at least three gestures, and provide some kind of animated response to each of the three.  While you may use the responses from the “Grand Gestures.” Snap project, and you can even use at most one of those gestures (e.g., star, propellor, or heart), you can have any of the same matches (e.g., if you keep the heart gesture, you have to give it a different response).  You need to have gestures that will work for me when I’m testing, so you should probably test with someone other than yourself.

Reading Reflection Examples

  • Read papers on Unicode vs. ASCII (like this one and this one) and answer questions like “The Unicode organization makes an argument in terms of markets and internationalization. Contrast that with an argument to change older code from ASCII to Unicode in terms of justice and access. Which argument (markets vs justice/access) will be more convincing and for whom (e.g., which stakeholders)?”
  • Students watch this video (or read the transcript) “Why I want my voice assistant to speak Spanglish.” Write an essay in response to questions like “Spanish and English are only two of many language combinations in the world. How would you decide on which languages to support?”
  • Read the introduction to Safiya Noble’s “Algorithms of Oppression” (available on her website here) and write an essay in response to questions like “To which of the examples described did you have the strongest reaction? Who is responsible for the oppression in that example?”
  • Read an article extending the examples in Weapons of Math Destruction (available here) and answer questions like “Amazon tried to develop a model to evaluate job applicants based on what employees had succeeded in their company in the past. They eventually gave up.  Why is that a dangerous model, based on this paper?”
  • Read Miriam Posner’s article “Humanities Data, A Necessary Contradiction” and respond to prompts like “How does the use of digital text make the job of the humanities scholar harder?”
  • Read the Yadav and Heath paper “The Silver Bullet of Anti-Shooter Educational Technologies” and write a letter to the Board of Directors of Axon about their plans to put taser-carrying drones into schools.


Build Chatbots (in Snap and on the Web)

Using the Snap chatbot structure, build a chatbot. Make it a character (from fiction or history). Make it consistent and believable. Then Using the converter, create a Charla-bot version of your chatbot like Lady Macbeth or Abraham Lincoln.

Build a Website from a Database

Most of the Web is not created by someone editing an HTML file.  Instead, most of the Web is information from a database that is used to complete a template in order to serve Web pages.  I’d like you to do that.

There are three parts to this assignment.

Part 1: Make your database. Your database can be about anything you want — e.g., a list of your favorite characters from a fictional world, a collection of countries you have personally visited, an inventory for a real or pretend store, or a collection of real or fictional news stories.  

Part 2: Generate a summary page. You need to generate a small (less than 10 entries) subset of your data based on some query expressed through the Snap database blocks.

Part 3: Generate a detail page.  For a smaller subset of the data (less than five entries), generate a detail page for each entry. 

Make an argument with visualizations

Using the Census 2020 data, I would like you to make an argument about what factors influence economic success in US states.

  • First, think about what you might want to define as “wealth.”  
  • Next, think about what you think influences that variable.
    • Maybe you want to argue that it’s about education.  
    • Maybe you want to argue that it’s about the kind of economy in the region. 
  • Now, use CODAP to create the visualizations (graphs, charts, tables, and maps) that help you to explain your argument.

Examples (shared with permission): MakingAnArgument_Elina Claire – Project 3 Argument With Data Visualizations

Final Project: Essay + Analysis

Your final project is an essay exploring a theme about technology and its impact on justice, supported by some analysis that you conduct.  Your essay should be 5-8 pages, double spaced, 12 point font.  Your essay can make any argument you want, but must be supported by one or more data sets. It is due by the end of our final exam period, which is April 26, 12:30-2:30 pm.

Your essay should include:

  • A clear thesis statement: What are you claiming or describing?
  • Description of the technology that you are critically considering in your essay. 
  • Description of one or more issues around justice you are exploring. 
  • Describe one or more data sets that you are using in supporting your argument.  Provide URLs and names of sources as references or footnotes. 
  • You must include in your essay one or more CLAIMS that are based on your analysis of your dataset.  You can use any spreadsheet or Snap to do your analysis. Be very careful to separate correlation from causation.
  • You must include at least one data visualization in your essay.  You may generate it from a spreadsheet or from CODAP.

Examples: Elina – FinalProjectEssay Claire – ALA Final Project


The Ebook for this class is available here: The ebook shows Snap code we have used in class, then the Python, SQL, and HTML code that does the same thing. Students answer multiple choice questions about the textual code, to support transferring knowledge from the block-based language to the mainstream textual languages.

Scrolling through the ebook chapter on generating HTML from Python

How the Class is Taught

Peer Mentors: We have Peer Tutors and Mentors (undergraduate students with experience in computing in these classes) available for helping you with questions on homework, anything else in our courses, or just about their experiences in computing and classes here at Michigan.


You are encouraged to work together on homework, projects, and transfer assignments. Use all the online resources that you can find. Talk about your work, even show one another your programs. Quizzes are open book, open note, and on-line, but are required to be done individually without discussion with anyone else.


You are required to come to class. We use peer instruction in class – sometimes called “clicker questions” where students answer questions in lecture and talk with their peers to improve their answers. We have used iClicker successfully. Research evidence suggests dramatically improves student learning with peer instruction. Participation thus forms a significant portion of your learning and your grade. Excused absences are a different story, though those who must miss class must speak to one of us in advance. If there is a scheduling conflict with a religious holiday that you participate in, please let the course staff know in advance. 

Cell phone policy – Technology use during class

Hearing phones ring during class is extremely disruptive. You will likely want to have a Web browser available during class, and while you can use a cell phone, you may want to bring a tablet or laptop.

Late assignments

Your assignments will be submitted online, through the Assignments module of this course’s Canvas site.

Everyone has five free days (total, for the whole semester) that can be added to the deadline for any assignment EXCEPT THE FINAL PROJECT.  Send email to the instructor to inform me that you’re using your free days. Assignments submitted after the deadline, after your free days, will be 10% grade deduction 15 minutes after the deadline up to 24 hours late, 20% after 24 hours and before 48 hours late, and not accepted after that.

Accommodations for Students with Disabilities

If you think you need an accommodation for a disability, please let us know at your earliest convenience.  We work with the Services for Students with Disabilities (SSD) office to help determine appropriate academic accommodations.  SSD typically recommends accommodations through a Verified Individualized Services and Accommodations (VISA) form. Please present this VISA form to us at the beginning of the term, or at least two weeks prior to the need for any accommodation (test, project, etc.).  You can call SSD at 734-763-3000; or go to  Any information you provide SSD is private and confidential. 


Student Mental Health and Wellbeing

The University of Michigan is committed to advancing the mental health and wellbeing of its students. If you or someone you know is feeling overwhelmed, depressed, and/or in need of support, services are available. For help, contact Counseling and Psychological Services (CAPS)

at (734) 764-8312 and during and after hours, on weekends and holidays, or through its counselors physically located in schools on both North and Central Campus. You may also consult University Health Service (UHS) at (734) 764-8320 and , or for alcohol or drug concerns, see .   For a listing of other mental health resources available on and off campus, visit  .

Classroom Climate

The goal is for the course to be an open, collaborative, creative space for learning, where we encourage discussion and questioning. Some questions may lead to a climate that feels closed down or threatening. Many computer science classes have a “defensive climate” where students ask questions more to demonstrate their own knowledge than to encourage inquiry and exploration. You may ask any questions you want. The instructor may suggest that you ask the question after class or in office hours, for the sake of classroom climate.

Student Sexual Misconduct Policy

U-M, LSA, and this department are all committed to fostering a safe, productive learning environment. Title IX and our school policy prohibit discrimination on the basis of sex, which regards sexual misconduct — including harassment, domestic and dating violence, sexual assault, and stalking. We understand that sexual violence can undermine students’ academic success and we encourage students who have experienced some form of sexual misconduct to talk to someone about their experience, so they can get the support they need.  Confidential support and academic advocacy can be found with the Sexual Assault Prevention and Awareness Center (SAPAC) on their 24-hour crisis line, 734-936-3333, and at (Links to an external site.). Alleged violations can be non-confidentially reported to the Office for Institutional Equity (OIE) at [email protected]. Reports to law enforcement can be made to University of Michigan Police Department at 734-763-3434.

Advice from Former Students

Each semester, we asked students: “What would you tell students who are considering taking this course?

Here are their responses:

This is a great way to learn about programming and discover a passion without stress that you have to be amazing at it right away. There’s plenty of room to ask questions and grow and develop your skills, not just automatically be good at it

It’s very good if you’re just interested in learning very basic programming concepts – but not something you should take if you want to go in depth. Prof is very enthusiastic and outgoing, do with that what you please

This course was very interesting overall, and it definitely follows the idea of computation for humanities. I was too scared to take a full Computer Science or EECS class but this class was easier to get into and understand.

Coming from someone who knew nothing about computer science before taking the course, it is a really good intro course if you are interested in CS but have no experience in it.

This is an amazing course to dip your toe into the world of programming and technology if you are not as familiar. Even as a computer science major, I gained a lot from taking this course.

I would tell students that they should 100% take this course if they want to understand and utilize computer science practically and in a way that isn’t as horrible as the EECS program. I would tell students that everything they learn actually applies to real life situations, and that the projects are super fun and not stressful.

Professor Guzdial is very supportive with any questions or problems that you have with assignments and projects.

Its a great class to take because it’s interesting and also not a rough workload, and it made programming things fun.

Take it! It’s extremely interesting and a very manageable course load.

TAKE IT! It has broadened my horizons so so much and has really taught me a lot about a wide variety of computing topics. You never get bored in this class and it gives you such a nice overview of things that are in the news every single day. It has really helped me learn about what it means to use a computer in this day and age and has helped me really understand all of the up and coming technology to a certain extent.

You will learn about many different topics and have lots of opportunity to express your own thoughts and ideas. Take the course!

Yes, it is definitely a nice course to take if you have an interest in the computer science field but are uncertain about what computer science really is. Very nice introductory course to computer science and programming.

Don’t be intimidated by the topic, take it because Guzdial is a very good and helpful teacher and you will actually learn instead of being lectured at for over an hour.