PLAITLab
Programming Languages for Approachable and Inclusive Tools
@ UC Berkeley EECS

Research Themes
PL for Social Good
We invent usable programming tools to help teams working for social good—social scientists, journalists, lawyers, domain experts focused on marginalized groups. (Working for social good and struggling to write code or process data? Get in touch!)
PL+HCI
We combine techniques from Programming Languages and Human-Computer Interaction to make programming languages and programming tools that work better for coders and non-coders alike.
Projects

Programming by Navigation
A new interactive program synthesis paradigm to empower domain experts to write the code they need without programming expertise.

Exploring the Translation-As-Explanation Folk Wisdom for Program Editing Tasks
A controlled trial to investigate whether program translations assist programmers editing code in an unfamiliar language. We found that there was a 67%–89% chance that translations alone actually made participants less likely to complete program modification tasks correctly in our study.

cartokit
A direct manipulation programming system for interactive cartography on the web. cartokit allows you to analyze and visualize geospatial data using familiar direct manipulation interactions while simultaneously generating JavaScript or TypeScript code for your map.

Low-Resourced Languages and Online Knowledge Repositories: A Need-Finding Study
A need-finding study with Wikipedia contributors in Amharic, Afan Oromo, and Tigrinya to understand barriers to contribution in low-resourced languages.

A Need-Finding Study with Users of Geospatial Data
A contextual inquiry study exploring the challenges users face in finding, transforming, analyzing, and visualizing geospatial data, drawing on participants from Earth and climate science, the social sciences, and data journalism.

DOT: Building a Document Organization tool for the Criminal Justice Domain
A cross-discipline co-design project to build a Document Organization Tool for public defenders and investigative journalists working on police use-of-force and misconduct data disclosures.

Marshall: Extracting Structured Data from Templated Documents
An instantiation of the Program Sketches with Scorer Holes synthesis framework that extracts structured information from templated PDFs.

Program Sketches with Scorer Holes
A sketch-based program synthesizer that fills sketch holes with scorer programs. Suitable for use with messy, unstructured domains.

cobbler: The Component-Based Refactoring Synthesizer
A program synthesizer that synthesizes compositions of library components equivalent to user-provided code using a novel and fast program equivalence check. Refactors thousands of real-world programs!
Syntactic Code Search with Sequence-to-Tree Matching
A new lightweight code search query language based on tokenizers and tree automatas to support accurate and incremental syntactic search queries for interactive settings.

Exploring the Learnability of Program Synthesizers by Novice Programmers
A thematic analysis on the first-use usability of program synthesizers by novice programmers, including findings on specification modalities, interpreting synthesis outputs, and user behaviors.
Change in Software Ecosystems
An analysis of social challenges to propagate breaking changes in existing software ecosystems to discover opportunities for new techniques to automate upgrades.

Simplifying Refinement Types
A deterministic syntax-directed algorithm to synthesize simple types that guarantee contraints from a refinement type, including common background theories and an OCaml implementation.

Helena
Programming-by-demonstration tool for automating repetitive interactions with webpages. Designed for non-programmers from the social sciences.

How Statically-Typed Functional Programmers Write Code
A grounded theory (and experimental validation) of how statically-typed functional programmers write code, covering domain modeling, type construction, focusing techniques, exploratory strategies, mental models, and expressions of intent.

Understanding Version Control as Material Interaction with Quickpose
A version control tool for creative programmers. We used this tool to study how people use different versions of their programs in their process—navigating between, annotating and arranging, and backtracking to previous versions of their programs.

CodePlate: Structured Natural Language Interactions for Arduino Programming Tasks
A structured natural language interaction to generate Arduino programs, used to probe how different flavors of natural language program generation impact understanding.