Quick links

Independent Work Seminar Offerings - Spring 2021

COS IW01: Seminar in Programming Language Design

Instructor: David Walker

Meeting Time:  Wednesdays 11 am - 12:20 pm

Prerequisite: COS 326 or the equivalent experience Seminar Description: 

Abstract:  Domain-specific languages (DSLs) allow programmers accomplish sophisticated repeated tasks using simple, compact notation.  DSLs have been developed to query databases (SQL) or XML (XQuery), to configure routers (CISCO IOS), to solve machine learning problems (TensorFlow, PyTorch), to transform text documents (awk), to generate documents (Latex), to generate parsers (Lex, YACC), to control your phone (IFTTT, Apple Shortcuts), to create music (Chuck, Euterpea), to write down optimization problems (AMPL), to specify logical formula (SMTlib), to draw plots, graphs (gnuplot) or diagrams (pic), to specify chemical structure (SMILES), to generate network topologies (Condor), for molecular programming and biological simulation (http://lucacardelli.name/), to synthesize programs (Sketch) and many more. 

This seminar is designed to build programming language design, analysis and implementation skills.  It is structured somewhat differently from other seminars.  In the first half of the seminar, the class will read papers and investigate the designs of interesting new programming languages such as:

  • Euterpea for creating computer music
  • SlideShow for creating slide presentations
  • Troll for creating dice-rolling programs for board games
  • OpenJSCAD for creating 3D models
  • PyTorch for machine learning

Students will also learn how to use additional programming language design and development infrastructure in OCaml such as:

  • MLlex, Menhir and OCaml's format library for parsing and printing
  • QuickCheck for randomized testing; and 
  • Z3 for SMT-based verification.

The time available and the interests of students in the seminar will dictate, in part, the selection of languages and tools we investigate.

In the second half of the semester, students will build on knowledge developed in the first half by doing one of the following independent projects:

  1.  Create an interesting application in some DSL or advanced, sophisticated modern language that is new to the student (eg:  Haskell, Scala, Go, Clojure, ...).  Use the experience to describe and critique the key elements of the language in which you are working.  Read research papers on related programming languages to compare and contrast designs and offer suggestions for improvement.
  2.  Write a proposal for a future IW or senior thesis, to be done next year, with some preliminary investigation done this year.  For example, you may create an application in an existing DSL or language as in part (1) above to gain experience in a particular programming environment and then propose a useful extension to the environment.  Alternatively, you may implement a useful tool or component that will be useful in a future IW.  Or, you may begin the design of a language or language extension but not implement it.  You might begin such a design by carefully describing a series of concrete, motivating examples for the language in order to justify a future design.  (Developing a series of concrete examples to motivate and justify a particular design and not others is a challenging and important design exercise!)   You might also write down a semantics or partial semantics of the language you design.  You can investigate the possibility of proving something about the language you design or a fragment of it.  You might begin by carefully and formally stating the properties you anticipate the language having.  Include a survey of related research.
  3. Do a comparative study of 2 or more languages that involves reading 2-6 papers or documents on programming languages or programming language features, at least 2 of which have not been studied in class.  Illustrate, via example, how to use the given features.  Use the ideas developed in class to critique the languages and uncover their limitations.   Focus on depth not breadth. For instance, one might compare and contrast mechanisms for defining objects or using inheritance in C++ vs Java vs Scala.  One might investigate GADTs (guarded algebraic data types) and how their realization in Haskell differs from OCaml.  One might compare and contrast computer music programming languages like Euterpea, Chuck, Faust and Reaktor.


COS IW02: You Be The Prof

Instructor:  David Walker

Meeting Time:  Tuesdays 11 am - 12:20 pm 

Abstract:   Ever want to take over a course and show the prof how it's done? Now's your chance.  In this IW seminar, construct a creative assignment designed to teach students a concept in computer science. Teach SAT solving and NP-completeness by asking students to build a Soduku solver.  Teach distributed programming, security, cryptographic or game theoretic concepts by asking students to build bots for online poker.  Gamify data structures by introducing students to maze generation and solution.  More generally, students may work on creating any computational framework for teaching a particular skill or concept or domain that they can think of.  For example, in a previous instance of this class, a student set up an infrastructure for playing algorithmic games a la COS 445.  Perhaps one could implement a system for checking equational reasoning proofs, as formulated in COS 326.  One might also develop interesting, reuseable algorithm visualization techniques for students in COS 126 or 226.   Since all the concepts we are teaching must be graded, we'll also take a look at algorithmic grading and investigate out how to develop property-based testing infrastructure (a skill useful to any software engineer, not just those in education). 


COS IW03: Seminar Tech Policy

Instructor: Mihir Kshirsagar

Meeting Time: Thursdays 1:30 p.m. to 2:50 p.m. 

Abstract:  In this IW seminar students get to work on crafting concrete policy responses to challenges posed by emerging computer and network technologies. There is a renewed sense of urgency to understand the implications of how these technologies are transforming public life and to craft practical solutions that address the difficult tradeoffs we need to make. Students in past seminars have worked on a variety of different projects, including  those related to machine learning, social media, video game design, communication policy, competition, privacy, and cryptocurrencies, among other issues.

The first half of the seminar will focus on introducing students to policy challenges in different domains to help them explore potential topics for their final project. The second half of the seminar is devoted to workshopping the final projects and helping students develop workable proposals. 

The final project will be student-driven, with the opportunity to create a real-world policy work product.  Policymakers need thoughtful, technically sophisticated voices to help them develop evidence-based policies. This seminar helps students prepare to play that vital role. All students are expected to attend all weekly meetings and work collaboratively on shared projects. There are no prerequisites for taking this seminar.


COS IW04: Help Future Computer Science Students Learn Computer Science!

Instructor: Robert Fish

Meeting Time: Tuesdays, 3:00-4:20pm 

Abstract:  How would you like to have an IW project that could have lasting value for Princeton CS students? This seminar focuses on projects that try to enhance the computer science learning environment at Princeton (or perhaps anywhere else!). Recent years have seen a tremendous upsurge in both the interest and deployment of online learning platforms. Here at Princeton, some classes use a hybrid approach with online learning being supplemented and enhanced through classroom-based precepts and face-to-face one on one sessions. Extending this concept, there is some thought that people need learning environments that also include a degree of self-pacing, as well as engaging a variety of learning styles in the educational process.

In this seminar, students will choose some computer science concept from COS 126, 217, 226 or other Princeton Computer Science courses. You might pick some interesting concept which you think you can explain well to other students. Some examples might be 1) the dynamic operation of various gates and circuits in the TOY architecture or 2) visualizing function calls and the run-time stack frame for different functions (return types, parameters, optimizations on/off). For their projects, students will design and build an online learning experience that is targeted at whatever concept they choose. It can include videos, graphic visualizations, quizzing mechanisms, 3D imagery or anything else that you can think of which might help students understand the concept. The project should also include an evaluation component by which mastery of the ideas exposed to them may be assessed. A bonus would be utilizing the system to compare learning with it to a conventional approach.

Some possible projects will be suggested early in the seminar, but students are also free to use their imagination and pick their own topic. Weekly meetings will include some initial brainstorming exercises, then we will concentrate on putting together project proposals, and then finally, weekly project management presentations that will help students keep their projects on track. 

Students may pair up on these projects, creating a joint idea for a learning environment, with each student concentrating on some aspect of the software with a division of labor of frontend, backend, assessment, data analysis, etc. The learning and use of open source tools, including tools such as Open EdX, Django, and the D3 visualization library, etc. is encouraged in order that students may create the most effective online learning environments.

Some examples of past projects include an automated COS 226 quizzing system, visualizations of stack and heap data structures, user interfaces to improve student progress tracking, a simplified source code control tutorial, introducing elementary machine learning algorithms, and gamification of COS 126 assignments.


COS IW05 - Programs generating Programs  

Instructor: Aarti Gupta

Meeting Time:  Tuesdays 11 am - 12:20 pm

Abstract:   Wouldn’t it be great if you could somehow say what a program should do, sketch a program outline, but the rest would get automatically generated? While this is difficult to do for large Java and C programs (and COS 126/217/226 programming assignments!), it is quite possible in domain-specific languages for a variety of applications. Indeed, automated synthesis of programs is an active area of research in programming languages and formal verification. Available tools aim at automatically generating programs by filling in holes in a partially-complete program sketch or by using input-output examples, optionally using grammar rules that define the underlying search space of candidate programs.

Students in the seminar will choose from a range of program synthesis domains and applications, or choose one of their own interest. Examples include automatic parallelization of array-handling programs, bit-twiddling code, spread-sheet macros, etc. They will use available synthesis tools (such as Sketch, Rosette, Prose), design their own libraries of program sketches, specify the correctness requirements, and experiment with different synthesis strategies to generate a variety of target programs. Those interested in backend techniques can also design and implement new synthesis strategies using SMT (Satisfiability Modulo Theory) solvers that perform the search and verification in these tools. Students may work on a team project, but with prior permission of the instructor, and where each student has a distinct semester-size component of the project.

There are no prerequisites for this seminar beyond COS 217 and COS 226; familiarity with functional programming or proofs of correctness (e.g., COS 326) would be useful. Students will be expected to attend all seminar meetings. The first two seminar meetings will provide background and introduction to program synthesis tools. The remaining meetings will be used for discussions on project proposals, techniques, and updates; with students reporting their progress each week and doing a class presentation at the end.


COS IW06 - Digital Humanities

Instructor: Brian Kernighan

Meeting Time:  Fridays 11 am - 12:20 pm 

                          Fridays 1:30 pm - 3 pm                        The two sections of the seminar are independent but will generally be quite similar.

Abstract:  "Digital humanities" covers a wide variety of ways in which scholars in the humanities -- literature, languages, history, music, art, religion, and many other disciplines -- collect, curate, analyze and present information about their fields, using digital representations and technology.

  Digital humanities data is intrinsically messy, and there is always a considerable effort devoted to cleaning it up even before study can begin.  There is also much effort devoted to figuring out how to present it effectively and make it accessible to others.

  This seminar is aimed at building tools and developing techniques thatwill help humanities scholars work more effectively with their data.  This might include machine learning, natural language processing, data visualization, data cleaning, and user interface design for making the processes available to scholars just starting out in technology.

  A typical project might begin with a humanities dataset or a focus on a CS technique.  In the former case, the goal would be to explore the data to learn and present new and interesting things about it.  In the lattercase, the goal would be to create or improve tools, languages, and  interfaces that help scholars in the humanities.

  No particular background is required beyond COS 217 and 226 and an interest in learning new things and applying that knowledge usefully.   The two sections of the seminar are independent but will generally be quite similar.


COS IW07 - Computer Vision for Social Good

Instructor: Olga Russakovsky

Meeting Time:  Fridays 11 am - 12:20 pm

Abstract:  Computer vision is a subfield of AI focused on designing systems capable of reasoning about visual inputs such as images or videos. Computer vision technology is already wide-spread: it's in sorting our mail and out photographs, improving the safety of our cars, powering space exploration, and much more. In the next ten years computer vision research will be driven by an even wide range of novel applications: for example, one can imagine increasing the safety and effectiveness of law enforcement through analysis of police body-worn camera footage, improving healthcare delivery through camera-equipped hospitals, or developing and integrating novel educational insights through large-scale visual studies of classrooms. In this seminar, students will explore computer vision technology and its applications. Students who have taken courses such as COS 429, COS 324, or similar are welcome to do a more technical IW focusing on improving existing computer vision systems and making them more suitable for social good applications. Students who have no prior experience with computer vision are welcome to do a more exploratory analysis of existing systems (for example, analyzing the racial, gender, or age bias present in current face recognition systems), study the ethics and policy implications, examine privacy-aware computer vision, or propose another related topic that fits their expertise.


COS IW 08: Fairness of Visual Recognition (Co-requisite: COS 429; AB juniors, only) continued from the Fall 2020 Term

Instructor: Olga Russakovsky

Meeting Time: Fridays, 12:30  - 1:50 pm

Co-Requisites: Enrollment in COS 429, Fall 2020. A.B. junior status.

Note: This seminar is a special IW opportunity for A.B. juniors enrolled in COS 429, Fall 2020, only.

General Information:
COS IW 08 is an independent work seminar limited in enrollment to A.B.'s in their junior year taking COS 429. It will be paired with a subsequent IW seminar in Spring  2020 that will encompass a similar scope. This format is designed to allow students to learn some of the fundamentals of an area, and then apply their knowledge to create an Junior IW project with more depth and it is hoped, a more interesting result. The expectation is that students will sign up for both this IW seminar and the subsequent Spring 2021 IW seminar. Students enrolled in this seminar are required to submit a signed Memo of Understanding

This is new two-semester IW seminar will build on the material taught in “COS 429: Computer Vision” to offer an in-depth look at topics related to the Fairness of Visual Recognition. The seminar will provide some structure and support for students choosing to do their junior IW work on this topic, but will ultimately be guided by the students’ interests. In the fall students will read and report on the literature, and develop a proposal for the spring semester.  Sample readings will examine topics of machine learning fairness, biases in computer vision datasets, algorithms for mitigating bias in computer vision models, and disparate impacts of computer vision on different groups. Students are encouraged but not required to do their open-ended final project in COS 429 on a related topic. In the spring students will focus on executing their proposed research agenda, leveraging and building upon their technical expertise from COS 429. Students are welcome to engage with the deeper societal issues, supplementing their projects with further readings such as “Race After Technology” by Ruha Benjamin, or “Algorithms of Oppression” by Safiya Umoja Noble. Alternatively, they are equally welcome to instead focus on core algorithmic topics (such as learning from long-tailed distribution, interpretability of visual recognition systems, or multi-task learning with constraints) which are more indirectly related to the underlying societal concerns.

Sample readings:

- “Fairness and Machine Learning: Limitations and Opportunities” by  Solon Barocas, Moritz Hardt, Arvind Narayanan https://fairmlbook.org/
- “50 Years of Test (Un)fairness: Lessons for Machine Learning” by Ben Hutchinson and Margaret Mitchell http://www.m-mitchell.com/papers/History_of_Fairness-arxiv.pdf
- Gender Shades: Intersectional Accuracy Disparities in Commercial Gender Classification” by Joy Buolamwini and Timnit Gebru http://proceedings.mlr.press/v81/buolamwini18a/buolamwini18a.pdf
- “REVISE: A Tool for Measuring and Mitigating Bias in Image Datasets”  by Angelina Wang, Arvind Narayanan and Olga Russakovsky https://arxiv.org/pdf/2004.07999.pdf
- “Does object recognition work for everyone?” byTerrance DeVries, Ishan Misra, Changhan Wang and Laurens van der Maaten  https://arxiv.org/pdf/1906.02659.pdf
- “Towards Fairness in Visual Recognition: Effective Strategies for Bias Mitigation” by Zeyu Wang, Klint Qinami, Ioannis Christos Karakozis*, Kyle Genova, Prem Nair*, Kenji Hata, Olga Russakovsky (* = Princeton COS’19 and COS’18 students who contributed to this research in their senior theses) https://arxiv.org/pdf/1911.11834.pdf

Follow us: Facebook Twitter Linkedin