EECS 598-015 · Fall 2019 · University of Michigan

User Interfaces for Programming Languages

Cyrus Omar (Hi, I'm new faculty!)
4773 Beyster Building
Office Hours
W 4:30-5:30pm or by appointment
Meeting Times
Tuesdays and Thursdays
12:00-1:30pm (feel free to bring lunch)
Meeting Location
1690 Beyster Building
Humans interact with programming languages by way of user interfaces of widely varying design. This course will provide a broad overview of the literature on user interfaces for programming languages, covering historic and contemporary designs as well as ongoing research topics. The emphasis will be on (1) thinking systematically and critically about this large and exciting design space, and on (2) understanding how as designers we can rigorously evaluate design choices, and designs as a whole, using both qualitative and quantitative methods.
Course Structure

Participation (15%)

Each 90 minute course meeting will include substantial time for discussion. Before some of the course meetings, you will also be asked to do a short (< 30 min) activity (e.g. watching a video, reading, or playing with a tool).

Presentations & Presentation Partners (20% + 5%)

Each participant will be asked to lead one course meeting. The Presentation Guide includes more details.

For each such presentation, another person will be assigned as the presentation partner. Their job is to meet with the presenter at least once before the course meeting (no later than 3pm the day before) to provide substantial feedback on a practice presentation.

Compendium Contributions (25%)

Each participant will be asked to write the portions of the companion compendium related to their presentation, with a first draft due one week before the presentation and a final draft due one week after the presentation (to give you time to incorporate points from the discussion). A final round of revisions will be due Dec. 13. The compendium will then be released publicly in mid-December. The Presentation Guide includes more details.

Project (35%)

The semester will conclude with a course project. The course project can consist either of:
  • an implementation of a user interface of the student's design, together with a lightweight evaluation,
  • OR a substantial empirical evaluation of an existing user interface for programming.
The Project Guide includes more details.
Tues. 9/3
Introductions, Logistics, and Topic Overview
  • Make sure you are registered or email me so I can add you to the mailing list.
  • Sign up for the course chat (ASAP)
  • Email me with presentation topic preferences and date preferences + constraints (due Wed. 9/11)
Thurs. 9/5
Inventing on Principle
Bret Victor's talk Inventing on Principle has inspired hundreds of people to experiment with better UIs for programming. Even better, it has helped people clarify their thinking and crystalize the principles that they work to advance. We'll watch it together, pausing to discuss and expand on several of his points.
Tues. 9/10
Cognitive Dimensions of Notations
Additional Resources:
Wed. 9/11
Email me with topic preferences + date preferences and constraints by this date.
Thurs. 9/12
Structure Editors
Tues. 9/17
Live Programming Environments
Thurs. 9/19
Graphical and Interactive Notation
Additional Resources:
Tues. 9/24
No Course Meeting
Thurs. 9/26
Usability of Type Systems
Tues. 10/1
Crowdsourced Programming
Thurs. 10/3
Guest Lecture: Programming by Demonstration
Presenter: Rebecca Krosnick (PhD student, University of Michigan)
Additional Resources
Tues. 10/8
Overview of Evaluation Methods
Wed. 10/9
Project Proposals Due
Send a project proposal by email to me, following the Project Guide. Set up a meeting with me to discuss ideas if you are not sure what you'd like to propose!
Thurs. 10/10
Project Proposal Lightning Talks
  • Ke Du - Better Semantic Highlighting
  • Abhitej Ganta - Profiling Run-Time Data from Prior Executed Code Blocks to Suggest Future Code Blocks
  • Jaylin Herskovitz - Contextually Aware Prototyping Tools for Augmented Reality
  • Chenhao Li - Numpy Package Real-Time Helper
  • Anthony Liu - Turkit2: Flexible Human Computation
  • David Moon - Node Staging Mode in Hazel
  • Hannah Potter - Evaluating Python Tutor: Improving Novice Programmers’ Understanding of Memory
  • Yang Shi - A Visual Dataflow Tool for C Programming
  • April Wang - Exploring Programmable Semantic Document Editors
  • Yongwei Yuan - Improving the Usability of Variables in Hazel
  • Lei Zhang - Type Visualization and Constraints in Immersive Dataflow Programming
Tues. 10/15
No Course Meeting
(Fall Study Break)
Thurs. 10/17
Predictive Programming Interfaces
Presenter: Abhitej Ganta, Partner: Yongwei Yuan
Additional Resources
Tues. 10/22
Programmable Physical Environments
Presenter: Chenhao Li, Partner: Jaylin Herskovitz
Thurs. 10/24
Educational Programming Environments
Presenter: Hannah Potter, Partner: Yang Shi
Additional Resources
Tues. 10/29
User Interfaces for Game Development
Presenter: Lei Zhang, Partner: Chenhao Li
Additional Resources
Thurs. 10/31
Guest Lecture: Direct Manipulation Programming in Sketch-n-Sketch
Presenter: Brian Hempel (PhD student, University of Chicago)
Additional Resources
Tues. 11/5
API Usability
Presenter: Anthony Liu, Partner: David Moon
Additional Resources
Thurs. 11/7
Accessible Programming Interfaces
Presenter: Jaylin Herskovitz, Partner: Lei Zhang
Additional Resources
Tues. 11/12
Interactive Debuggers
Presenter: David Moon, Partner: Ke Du
Additional Resources
Thurs. 11/14
Visual Dataflow Programming
Additional Resources
Tues. 11/19
Program Visualization
Presenter: Yongwei Yuan, Partner: Hannah Potter
Additional Resources
Thurs. 11/21
Data Analysis Environments
Presenter: April Wang, Partner: Abhitej Ganta
Additional Resources
Tues. 11/26
Interactive Theorem Provers
Presenter: Ke Du, Partner: Anthony Liu (and Michael Adams)
Additional Resources
Thurs. 11/28
No Course Meeting
Tues. 12/3
Project Presentations
Thurs. 12/5
Project Presentations
Tues. 12/10
Project Presentations, Reflections, and Wrap-Up