CSCI 190 Sections 3-4

Course Goals

As a CS major in a liberal arts college, you have a unique opportunity to "connect the dots" between the product-oriented technology industry, the research community, and the world at large—and a responsibility to problematize, reinvent, or rebuild popular computing if need be.

The purpose of 190 is twofold. First, we aim to teach you how to keep learning CS topics forever—by staying up to date on primary research sources, synthesizing information from several sources, explaining these topics to others in straightforward terms, and otherwise staying at the forefront of the field.

Second, 190 needs to give you an authentic capstone experience as a "CS person", whatever that means to you. For some, that means preparing for a senior research project; for others, it means deeply diving into an area of CS research and summarizing and synthesizing what you find; some students may want to stretch themselves in some way to become stronger computational thinkers; and some might want to participate in software as a social process, contributing to an open-source software project. We'll figure out one-on-one what a suitable and doable capstone experience looks like for you, individually, and lead that into a significant technical writing assignment.

One way or another, you will leave this course not only as a CS major, but as an expert in some narrow area of computing. You'll leave with the skills you've developed and a technical writeup detailing what you learned or done and how the pieces fit together.

Capstone

In this iteration of 190, we'll be exploring an alternative to the traditional survey paper. If you want to deeply explore an area of CS research, you can certainly still do that and write a paper in the 8-12 page range that describes a problem, a family of approaches to solving that problem, and some synthesis that relates these approaches together or finds some deeper truth in the connections between them. This time around, you also have the option of writing a sort of proposal for future work—perhaps in the spring senior project, or perhaps a draft of an RFC ("Request for Comment") submitted to a major open-source project, or perhaps a grant proposal. The main shift here is to consider this "related work" section and the preparation for it (the annotated bibliography, the introduction, the drafting) to be for some concrete project of interest to you specifically.

For example, one student might plan to do a senior thesis, and will then use the writing assignments of 190 to prepare the related work section of their thesis. Another student might want to explore a senior project to propose an improvement to the Python programming language or standard library, with the in-class assignments building up towards a Python PEP (or, for crab fans, a Rust RFC). A student might want to explore how regular expression engines are implemented efficiently, and combine general-audience sources like Andrew Gallant's blog with academic literature, design some benchmarks to compare different implementations, and describe the state of the art. Yet another may decide to research how compiler optimization passes are implemented, investigating the internals of LLVM and finding relevant academic literature, with the technical writeup a plan for pursuing a hypothetical senior project.

The takeaway is that the purpose of 190 is to prepare you for doing this kind of work, even if a half-credit course isn't quite enough time to actually complete it. By the end of the course, everyone will either have written a research survey in an area of their deep interest, or will have a well-researched, extensive proposal for a specific, substantial senior project (but of course, there's no commitment to actually doing that project).

Senior Project/Thesis

As a quick note, there is always some confusion about the difference between a senior thesis and a senior project. This table may be helpful:

  Credit Effort Area Writing Requirement
Senior Project 0.5 ~5 hours a week Mainly personal interest Moderate, technical
Senior Thesis 1.0 ~10 hours a week Connection to faculty interest Extensive, research & technical

Presentations

Each student will present on two papers during the semester, each time in a group of 2-3. The first batch of six papers will be ones I recommend, but the second paper on which you present will be generated by your team (possibly sourced from your annotated bibliographies).

I'm not super committed to any presentation format (prerecorded slides, live slides, live coding, whatever), but presentations must cover the following points:

  1. What is this paper about?
  2. What are some key limitations, shortcomings, unintended consequences, or other problems with or identified by the paper?
  3. What should a curious person read next? Provide two specific followup papers or important background papers.
  4. Have three discussion prompts ready (these don't need to be in the slides but should be ready to hand for discussion).

Students not presenting have the following obligations, to be turned in on Zulip before class.

  1. Read the paper! Really read it.
  2. Write down three facts, two questions, and one opinion about the paper, and share it on Zulip.
  3. Identify one follow-up paper to read which is related (a paper citing this one, or another one you've found which feels relevant). Share this on Zulip too!

Selecting Papers

For the first batch of presentations, the papers will be selected from this list:

In our first few weeks, we'll talk about how to find research papers covering an area of CS about which you're curious. We'll use that platform to each write an annotated bibliography—a rough map of a research area—and proceed in the course from there.

Meetings

Week Theme Tuesday Thursday Notes
1: 8/29, 8/31 How to read papers, presenting research Paper selection Paper selection  
2: 9/5, 9/7 About the senior project Sam, Andy, Xin Yi: Imagination, Computation, and Self-Expression Chuck, Jack: Producing Wrong Data Without Doing Anything Obviously Wrong!  
3: 9/12, 9/14 Software as a human process Max, Rachel: Your Buddy, the Grandmaster Justin, Maya: Your Buddy, the Grandmaster 9/15: (Senior Project) Ranked list of topic/advisor pairs, 9/17: Latex Exercise
4: 9/19, 9/21   Sophia, Erin: Human-Level Reinforcement Learning through Theory-Based Modeling, Exploration, and Planning (up to page 20) Abby, Kovit: Quantifying Over Play  
5: 9/26, 9/28 Research as a human process Selim, Kenny: Algorithm = Logic + Control Gisele, Michael, Collins: Imagination, Computation, and Self-Expression 10/1: Topic and 10 references
6: 10/3, 10/5   Katiana, John: Quantifying Over Play Austin, Ethan: Human-Level Reinforcement Learning through Theory-Based Modeling, Exploration, and Planning (up to page 20)  
7: 10/10, 10/12   Kambeh: Human-Computer Insurrection: Notes on an Anarchist HCI Josh, Meelod: Expressive AI 10/15: Annotated bibliography
8: 10/17, 10/19   Fall break Kovit, Justin: AI-Based Human Audio Processing for COVID-19  
9: 10/24, 10/26   Katiana, Xin Yi: EEG-Based Artistic Visualization of Dreams Jack, Michael: Automated Detection of Spectre and Meltdown 10/29: Technical writeup outline and introduction
10: 10/31, 11/2   Rachel, Sophia: Medical Prescription Classification Chuck, Austin: Transformers  
11: 11/7, 11/9   Eryn, Andy: Abby, Maya, Gisele:  
12: 11/14, 11/16   Max, John: Collins, Ethan: 11/19: First draft of technical writeup
13: 11/21, 11/23   Sam, Keneth: Thanksgiving recess  
14: 11/28, 11/30 How to keep learning forever Selim, Kambeh: Josh, Meelod: 11/29: Peer review of draft
15: 12/5, 12/7   No class (: Reading days 12/6: Final draft of technical writeup