PLAITLab

PLAITLab

Programming Languages for Approachable and Inclusive Tools

@ UC Berkeley EECS

University of California, Berkeley Logo

Research Themes

PL for Social Good

We invent usable programming tools to help teams with little or no formal computing education—social scientists, journalists, lawyers, scientists, advocates for marginalized groups, and other domain experts. (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

Three screenshots of maps and associated programs created with cartokit, with the tagline 'Style maps. Get Programs.' beneath the screenshots.

cartokit

cartokit on GitHubcartokit on ACM DL

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.

Programming by Navigation

Programming by Navigation

Programming by Navigation on GitHubProgramming by Navigation on ACM DL

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

Pagebreaks

Pagebreaks

Pagebreaks on GitHubPagebreaks on ACM DL

Global variables in computational notebooks are confusing, but notebook users are reluctant to use functions. We built an understanding of why, then designed and implemented a new notebook-customized scoping construct.

Equivalence by Canonicalization for Synthesis-Backed Refactoring

cobbler: The Component-Based Refactoring Synthesizer

cobbler: The Component-Based Refactoring Synthesizer on GitHubcobbler: The Component-Based Refactoring Synthesizer on ACM DL

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!

A Need-Finding Study with Users of Geospatial Data

A Need-Finding Study with Users of Geospatial Data

A Need-Finding Study with Users of Geospatial Data on ACM DLA Need-Finding Study with Users of Geospatial Data on Youtube

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.

Program Sketches with Scorer Holes

Program Sketches with Scorer Holes

A program synthesizer that fills sketch holes with scorer programs. Suitable for use in domains with messy, unstructured and semi-structured inputs.

Entity Extraction From Police Records

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.

Exploring the Learnability of Program Synthesizers by Novice Programmers

Exploring the Learnability of Program Synthesizers by Novice Programmers

Exploring the Learnability of Program Synthesizers by Novice Programmers on ACM DLExploring the Learnability of Program Synthesizers by Novice Programmers on Youtube

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.

Programming by Scaffolded Demonstration

Programming by Scaffolded Demonstration

Programming by Scaffolded Demonstration on GitHub

A new programming modality where users construct programs by selecting among the outputs of possible next-step edits to their current program.

Syntactic Code Search with Sequence-to-Tree Matching

Syntactic Code Search with Sequence-to-Tree Matching

Syntactic Code Search with Sequence-to-Tree Matching on GitHubSyntactic Code Search with Sequence-to-Tree Matching on ACM DL

A new lightweight code search query language based on tokenizers and tree automata to support accurate and incremental syntactic search queries for interactive settings.

An overview of the controlled trial for the Translation-As-Explanation study

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.

How Statically-Typed Functional Programmers Write Code

How Statically-Typed Functional Programmers Write Code

How Statically-Typed Functional Programmers Write Code on ACM DLHow Statically-Typed Functional Programmers Write Code on Youtube

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

Understanding Version Control as Material Interaction with Quickpose

Understanding Version Control as Material Interaction with Quickpose on GitHubUnderstanding Version Control as Material Interaction with Quickpose on ACM DLUnderstanding Version Control as Material Interaction with Quickpose on Youtube

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

CodePlate: Structured Natural Language Interactions for Arduino Programming Tasks

A structured natural language interaction to generate Arduino programs, used to probe how different styles of natural language programming can affect programmer understanding.

HiLT: A Library for Generating Human-in-the-Loop Data Transformation GUIs

HiLT: A Library for Generating Human-in-the-Loop Data Transformation GUIs

HiLT: A Library for Generating Human-in-the-Loop Data Transformation GUIs on GitHub

A Python eDSL for generating bespoke, human-in-the-loop data transformation GUIs.

Low-Resourced Languages and Online Knowledge Repositories: A Need-Finding Study

Low-Resourced Languages and Online Knowledge Repositories: A Need-Finding Study

Low-Resourced Languages and Online Knowledge Repositories: A Need-Finding Study on ACM DLLow-Resourced Languages and Online Knowledge Repositories: A Need-Finding Study on Youtube

A need-finding study with Wikipedia contributors in Amharic, Afan Oromo, and Tigrinya to understand barriers to contribution in low-resourced languages.

DOT: Building a Document Organization tool for the Criminal Justice Domain

DOT: Building a Document Organization tool for the Criminal Justice Domain

DOT: Building a Document Organization tool for the Criminal Justice Domain on GitHubDOT: Building a Document Organization tool for the Criminal Justice Domain on ACM DLDOT: Building a Document Organization tool for the Criminal Justice Domain on Youtube

A cross-disciplinary 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.

Simplifying Refinement Types

Simplifying Refinement Types

Simplifying Refinement Types on GitHub

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

Change in Software Ecosystems

Change in Software Ecosystems

An analysis of social barriers to implementing 'breaking changes' in existing software ecosystems; opportunities for new techniques to automate upgrades.

FLOR: Fast Low-Overhead Recovery

FLOR: Fast Low-Overhead Recovery

FLOR: Fast Low-Overhead Recovery on GitHubFLOR: Fast Low-Overhead Recovery on ACM DL

A hindsight logging toolkit for model training.

Helena

Helena

Helena on GitHubHelena on ACM DLHelena on Youtube

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

People

Collaborations Outside Computing

Our work in PLAIT Lab is only possible because of close collaborations with our partners from outside of computing. This list will be incomplete, but we'd especially like to thank (in alphabetical order):