News

  1. [Jun 2023] Andrew McNutt is now a computer science doctor, post-doctor, and professor!
  2. [Jan 2023] Our initial study of editor features for creative coding accepted to CHI 2023.

... More News ...

Currently Teaching

[CMSC 32001, Winter 2024] Topics in PL: User Interfaces for Programming

... More Classes ...

Research

The overarching theme of my research is to develop Direct Manipulation Programming Systems. I want programming to be more interactive and tangible (like GUIs) and GUIs to be more transparent and powerful (like programming).


active projects

 
[CS 111: Creative Coding] An introductory programming and creative coding course, while studying and experimenting with editor features.
 
[Deuce] Text editors are great, but coding involves tedious, error-prone edits that hinder productivity and creativity. Deuce is a structure-aware code editor with direct manipulation interactions for quickly performing programming and refactoring tasks.

older projects

 
[Sketch-n-Sketch] GUIs are great, but the lack of programmability makes it difficult to develop complex and reusable content. Sketch-n-Sketch is a bimodal programming system for interactively creating documents, such as graphic designs and web pages.
 
[Hazel, led by Cyrus Omar @ Michigan] Programming environments are great, but they typically provide little help for incomplete programs. This project develops Semantic Foundations for Hole-Driven Development, allowing programming environments to continuously edit, reason about, and run programs with holes.
 
[Ivy] Visualization editors are great: chart choosers as in Excel are easy to use, shelf builders like Tableau faciliate rapid exploration, and textual specification languages like Vega are expressive and flexible. This project develops a framework for integrating and augmenting the benefits of multiple user interface modalities for visualization.
 
[Dependent JavaScript @ UCSD] Scripting languages include features that frustrate static reasoning, such as extensible objects, dynamically computed keys, loosely coupled recursion, reflection, and dynamic code loading. This project aims to develop type systems to describe idiomatic programs in scripting languages such as JavaScript, Python, and Ruby.
 
[Radar @ UCSD] Defining a dataflow analysis for concurrent programs is complicated by the subtleties of thread interleavings and locking protocols. Radar automatically converts a sequential dataflow analysis to a concurrent one by making use of datarace information from the Relay race detector for C programs.
 
[Staged Information Flow @ UCSD] The prevalence of dynamically loaded code makes program analysis for JavaScript difficult. We present a staged approach to tracking information flow that splits the analysis burden between compile-time and run-time.
 
[Fine @ Microsoft Research] Modern SMT solvers allow refinement type systems to track security and other complex properties, but they become a large part of the compiler's trusted computing base (TCB). Fine incorporates a type-preserving translation to eliminate the solver from the TCB. Fine is a precursor to MSR's F* language.

Students

Sam Cohen Ph.D. student

former postdoctoral advisees
Mikaël Mayer CTO @ Tharzen → Amazon
Cyrus Omar Assistant Professor @ University of Michigan

former graduate student advisees
Brian Hempel Tangible Values with Text (Ph.D. 2022)
Andrew McNutt Understanding and Enhancing JSON DSL Interfaces for Vis (Ph.D. 2023)
Nick Collins Delta Dictionaries (MS 2021)

former undergraduate thesis advisees
Grace Lu Deuce: Direct Manipulation Source Program Editor (BS 2017)
Justin Lubin Forging Smyth: Program Sketching with Live Bidirectional Eval. (BS 2020)
Izaak Meckler Mote: Goal-Driven Development and Synthesis for Haskell (BS 2015)
Bowen Wang Predicting Haskell Type Signatures from Names (BS/MS 2018)

Professional Activities

2023: VL/HCC PC, HATRA PC
2022: PLDI Sponsorship Co-chair, Bx PC, HATRA PC, SPLASH-E PC
2021: POPL PC, <Pro> PC, Bx PC, PLDI Sponsorship Co-chair, PLDI PC, PLATEAU PC
2020: Bx PC, SYNT Co-chair, FPE PC, SPLASH Local Chair, HATRA PC, LIVE PC
2019: <Pro> PC, Bx PC, PLDI AEC Co-chair, LIVE PC, Onward! PC
2018: PX PC, PLDI AEC Co-chair, ICFP SRC Chair, LIVE Co-organizer, PLATEAU PC
2017: PLDI PC, LIVE PC
2016: POPL SRC, PLDI ERC, ECOOP PC, TFP PC, Midwest PL Summit Co-organizer
2015: POPL PC, PLDI SRC, STOP PC, OOPSLA ERC
2014: PLDI ERC, PLDI AEC, OOPSLA PC
2013: FOOL PC

Journal of Functional Programming, Editorial Board, 2020–