This year's course offering co-locates two advanced graduate seminars in HCI (CS 279r) and PL (CS 252r). From HCI, students will learn new design and evaluation methods focused on utility and usability. From PL, students will learn new PL techniques relevant to building user-centric systems.
Students enrolled in 252r will select and present papers on PL topics including type systems, program synthesis, and metaprogramming. Students enrolled in 279r will select and present systems HCI papers about communicating intent between humans and computers, such as programming by demonstration and representing transformations on large piles of data. Activities will include a small number of lectures, discussion of relevant literature in each field, and a project, in which students from 252r and 279r will work together in groups to propose and carry out research at the intersection of PL and HCI.
Designed for PhD students from all areas. Masters students and advanced undergraduates are welcome, particularly those who wish to do research (or write a thesis) in an area related to Human-Computer Interaction and/or Programming Languages. Undergraduates enrolling in 279r or 252r are recommended but not required to have taken 179 or 152, respectively.
- Lecture 1 Why PL-HCI Matters: Type Safety--A Case Study (PDF)
- Lecture 2 Why Evaluation is Hard. (PDF)
- Lecture 3 HCI Research (PDF)
- Lecture 4 PL Research (PDF)
- Lecture 5 part 1 How to Present a Paper in 279r (PDF)
- Lecture 5 part 2 PL Paper Presentation Example (PDF)
- EthiCS lecture Cat Wade's Guest Lecture (PDF)
- Functional Pearl: A SQL to C Compiler in 500 Lines of Code.
Tiark Rompf and Nada Amin. ICFP 2015 & JFP 2019.
- The Essence of Dependent Object Types.
Nada Amin, Samuel Grütter, Martin Odersky, Tiark Rompf and Sandro Stucki. Wadlerfest 2016.
- Familia: Unifying Interfaces, Type Classes, and Family Polymorphism.
Yizhou Zhang and Andrew Myers. OOPSLA 2017.
- Accepting Blame for Safe Tunneled Exceptions.
Yizhou Zhang, Guido Salvaneschi, Quinn Beightol, Barbara Liskov, and Andrew Myers. PLDI 2016.
- FlashMeta: A Framework for Inductive Program Synthesis.
Oleksandr Polozov and Sumit Gulwani. OOPSLA 2015.
- Combinatorial sketching for finite programs.
Armando Solar-Lezama, Liviu Tancau, Rastislav Bodik, Sanjit Seshia, Vijay Saraswat. ASPLOS 2006.
- A language for automatically enforcing privacy policies.
Jean Yang, Kuat Yessenov and Armando Solar-Lezama. POPL 2012.
- Learning Abstractions for Program Synthesis.
Xinyu Wang, Greg Anderson, Isil Dillig and K. L. McMillan. CAV 2018.
- Type-and-example-directed program synthesis.
Peter-Michael Osera and Steve Zdancewic. PLDI 2015.
- On the Expressive Power of Programming Languages.
Matthias Felleisen. Science of Computer Programming.
- A Unified Approach to Solving Seven Programming Problems (Functional Pearl).
William E. Byrd, Michael Ballantyne, Gregory Rosenblatt and Matthew Might. ICFP 2017.
- Abstracting Definitional Interpreters: Functional Pearl.
David Darais, Nicholas Labich, Phuc C. Nguyen and David Van Horn. ICFP 2017.
- Halide: A language and compiler for optimizing parallelism, locality, and recomputation in image processing pipelines.
Jonathan Ragan-Kelley, Connelly Barnes, Andrew Adams, Sylvain Paris, Fréedo Durand and Saman Amarasinghe. PLDI 2013.
- Research Highlight: Ur/Web: A Simple Model for Programming the Web.
Adam Chlipala. CACM 2016.
- Learning explanatory rules from noisy data.
Richard Evans and Edward Grefenstette. JAIR 2018.
- Evaluating the Design of the R Language.
Floréal Morandat, Brandon Hill, Leo Osvald and Jan Vitek. ECOOP 2012.
- Functional Reactive Animation.
Conal Elliott and Paul Hudak. ICFP 1997.
- The simple essence of automatic differentiation.
Conal Elliott. ICFP 2018.
- Practical Probabilistic Programming with Monads.
Adam Scibior, Zoubin Ghahramani and Andrew D. Gordon. Haskell 2015.
- A Logic for Parametric Polymorphism.
Gordon Plotkin and Martín Abadi. International Conference on Typed Lambda Calculi and Applications, 1993.
- Overfitting in Synthesis: Theory and Practice.
Saswat Padhi, Todd Millstein, Aditya Nori and Rahul Sharma. 2019.
- Ringer: web automation by demonstration.
Shaon Barman, Sarah Chasins, Rastislav Bodik and Sumit Gulwani. OOPSLA 2016.
- Data-Driven Synthesis of Full Probabilistic Programs.
Sarah Chasins and Phitchaya Mangpo Phothilimthana. CAV 2017.
- Neural-Guided Deductive Search for Real-Time Program Synthesis from Examples
Ashwin Kalyan, Abhishek Mohta, Oleksandr Polozov, Dhruv Batra, Prateek Jain and Sumit Gulwani. ICLR 2018.
- Synthesizing data structure transformations from input-output examples
John K. Feser, Swarat Chaudhuri and Isil Dillig. PLDI 2015.
- Component-based synthesis of table consolidation and transformation tasks from examples.
Yu Feng, Ruben Martins, Jacob Van Geffen, Isil Dillig and Swarat Chaudhuri. PLDI 2017.
- Learning syntactic program transformations from examples.
Reudismam Rolim, Gustavo Soares, Loris D’Antoni, Oleksandr Polozov, Sumit Gulwani, Rohit Gheyi, Ryo Suzuki and Björn Hartmann. ICSE 2017.
- Visualizing API Usage Examples at Scale.
Elena Glassman*, Tianyi Zhang*, Björn Hartmann, and Miryung Kim. CHI 2018.
*indicates equal contributions
- Interactive Extraction of Examples from Existing Code.
Andrew Head, Elena Glassman, Björn Hartmann, and Marti Hearst. CHI 2018.
(supplemental material) (slides) (demo) (video) (teaser)
- Interactive Program Synthesis.
Vu Le, Daniel Perelman, Oleksandr Polozov, Mohammad Raza, Abhishek Udupa, and Sumit Gulwani. ArXiv 2017.
- Programming Not Only by Example.
Hila Peleg, Sharon Shoham, and Eran Yahav. ICSE 2018.
- FlashExtract: A Framework for Data Extraction by Examples.
Vu Le and Sumit Gulwani. PLDI 2014.
Assistant Professor of Computer Science
specializing in human-computer interaction
Assistant Professor of Computer Science
specializing in programming languages
Maxwell-Dworkin Rm 151
MW11-12 & T3-4