Computer programming skills are becoming indispensable for a variety of professions. However, computer programming is often prohibitively difficult to learn or do correctly. Many programming languages and tools were designed around the needs and limitations of the computers executing code, which can lead to design features that are counterintuitive for the people who use those tools.
We are a research group at the University of Michigan, primarily in the School of Information and Computer Science. Our research focuses on understanding the factors that make programming tools usable and designing & building new tools for programmers.
News [+]
- Oct '24:
Excited to welcome Dr. Maryam Arab as a new Postdoctoral Researcher!
- Jun '24:
Congratulations to Dr. Lei Zhang on his wonderful Ph.D. defense!
- Jun '24:
Ashley will be presenting her paper on representing code at scale at Learning @ Scale in Atlanta!
- Apr '24:
Several group members (and alumni) will be in Hawaii for CHI 2024. Say "hi" if you're there!
Recent Publications [+]
- VRCopilot: Authoring 3D Layouts with Generative Models in VR
A mixed-initiative tool for immersive 3D layout design in VR. It integrates generative AI to assist users in co-creating room layouts using voice commands, multimodal interactions, and wireframe-based representations. VRCopilot supports three modes: manual creation, automatic AI generation, and scaffolded creation with wireframes, balancing user control and automation.
- ScrapeViz: Hierarchical Representations for Web Scraping Macros
A programming-by-demonstration tool that helps users create and visualize web scraping macros across multiple pages. ScrapeViz offers a visual storyboard of scraping behaviors, making it easier to understand, trace data sources, and identify errors.
- CFlow: Supporting Semantic Flow Analysis of Students' Code in Programming Problems at Scale
Introduces CFlow, a system for visualizing and analyzing large numbers of student code submissions to help instructors understand common mistakes and patterns. CFlow uses semantic labeling and code structure analysis to cluster code lines across submissions and present them in a visualization that resembles a single code sample, allowing instructors to see the overall semantic flow while still being able to dive into individual submissions.
- Towards Inclusive Source Code Readability Based on the Preferences of Programmers with Visual Impairments
Explores the code readability preferences of blind and visually impaired (BVI) developers and how they differ from sighted developers, through a qualitative study. Contributes an inclusive taxonomy for code readability and recommendations for programming tools, code standards, and languages to better support BVI developers.
- RunEx: Augmenting Regular-Expression Code Search with Runtime Values
A system that improves code search by augmenting regular expressions with the ability to specify constraints on runtime values of specific expressions.
- Colaroid: A Literate Programming Approach for Authoring Explorable Multi-Stage Tutorials
Colaroid is an extension to the Visual Studio Code IDE that makes it easier to create mutli-step tutorials about a large code sample. Developers can write their code in the IDE and as they are writing their code, Colaroid allows them to divide their work into steps. Colaroid tutorials are augmented computational notebooks, where snippets and outputs represent a snapshot of a project, with source code differences highlighted, complete source code context for each snippet, and the ability to load and tinker with any stage of the project in a linked IDE.
- VRGit: A Version Control System for Collaborative Content Creation in Virtual Reality
A version control system designed especially for Virtual Reality (VR). VRGit allows users to view and navigate the version history of a 3-D scene while immersed in VR. It also allows users to share and discuss history graphs collaboratively.
- VizProg: Identifying Misunderstandings by Visualizing Students' Coding Progress
VizProg is a tool that allows instructors of large programming classes to monitor students' progress at scale. It represents students' code in a 2D map where dots representing students move further to the right as they get closer to a correct solution. VizProg uses vertical space to represent different approaches to solving the problem (so students towards the bottom of the map are using a different approach than students at the top of the map).
- ParamMacros: Creating UI Automation Leveraging End-User Natural Language Parameterization
ParamMacros is a PBD system where users specify a natural language question about a website. ParamMacros then leverages the DOM structure to help generalize and parameterize to similar natural language questions.
- Accessibility of UI Frameworks and Libraries for Programmers with Visual Impairments
Two studies into the accessibility and challenges of developing interfaces with UI frameworks and libraries. Accessibility barriers in programming tools and UI frameworks can complicate the processes of writing UI code, debugging, testing, and collaborating with sighted colleagues. This paper presents recommendations grounded in empirical findings to improve the accessibility of frameworks and libraries.
- PuzzleMe: Leveraging Peer Assessment for In-Class Programming Exercises
A tool that enhances in-class programming exercises by (1) enabling students to write unit tests that can be shared with the rest of the class (and used to test other students' code), (2) enables peer code reviews where students are intelligently grouped with other students to perform code reviews. PuzzleMe is intended for introductory classes and also includes a design to make testing more lightweight.
- Understanding Accessibility and Collaboration in Programming for People with Visual Impairments
A study into how programmers with visual impairments work in the context of programming teams. We describe how some collaborative practices can impede collaboration and required invisible work and articulation work on the part of the programmers with visual impairments.
- Understanding the Challenges and Needs of Programmers Writing Web Automation Scripts
Two studies to better understand the challenges of writing web automation code (particularly the kinds of context and feedback that are helpful when writing web automation code).
- CoCapture: Effectively Communicating UI Behaviors on Existing Websites by Demonstrating and Remixing
CoCapture is a tool for creating behavior mockups for websites in the later stage of UI development. Unlike most other prototyping tools, CoCapture assumes that a partially functional UI exists and allows designers to describe UI behaviors by creating mockups that modify the existing UI behaviors by demonstrating and remixing.
- Think-Aloud Computing: Supporting Rich and Low-Effort Knowledge Capture
Introduces "think-aloud computing", an application of think-alouds where users are encourage to speak in order to capture process-related as they work. For example, it might capture design intent, to-do items, problems encountered, and more. We present a formative study of think-aloud computing and a prototype of a tool to support think-aloud computing.
- FlowMatic: An Immersive Authoring Tool for Creating Interactive Scenes in Virtual Reality
FlowMatic allows users to users to specify interactive behaviors (how to respond to users) while immersed in Virtual Reality (VR). It adapts dataflow programming to allow programming primitives to be modified through direct manipulation and provides immediate feedback.
- A Hybrid Crowd-Machine Workflow for Program Synthesis
BashOn introduces a crowdsourcing approach to help make program synthesis systems more robust, reliable, and trustworthy, and reduces the cost of downstream data collection for training a program synthesis system.
- EdCode: Towards Personalized Support at Scale for Remote Assistance in CS Education
EdCode applies a semi-asychronous on-demand help seeking model in a learning setting, aiming towards provide more personalized support at scale.
- Sifter: A Hybrid Workflow for Theme-based Video Curation at Scale
Sifter improves the video curation process by combining automated techniques with a human-powered two-stage pipeline that browses, selects, and reaches an agreement.
- Callisto: Capturing the "Why" by Connecting Conversations with Computational Narratives
We designed Callisto, a Jupyter Notebook extension for better explaining messy notebooks. Callisto captures and stores contextual links between discussion messages and notebook elements with minimal effort from users. Callisto allows notebook readers to better understand the current notebook content and the overall problem-solving process that led to it, by making it possible to browse the discussions and code history relevant to any part of the notebook.
- Improving Crowd-Supported GUI Testing with Structural Guidance
Two techniques, interactive event-flow graphs and GUI-level guidance, that guide GUI testers to discover more test cases and avoid duplicate test cases.
- Explore, Create, Annotate: Designing Digital Drawing Tools with Visually Impaired People
A study to better understand how visually impaired people explore and create labeled tactile graphics.
- How Data Scientists Use Computational Notebooks for Real-Time Collaboration
We reported how synchronous editing in computational notebooks changes the way data scientists work together compared to working on individual notebooks through a formative survey and an observational study. Working on the synchronous notebooks improves collaboration by creating a shared context, encouraging more exploration, and reducing communication costs. However, the current synchronous editing features may lead to unbalanced participation and activity interference without strategic coordination.
- Studying the Benefits and Challenges of Immersive Dataflow Programming
In this paper, we study the benefits and challenges of immersive dataflow authoring, a paradigm that allows users to build VR applications using dataflow notation while immersed in the VR world.
- Implementing Multi-Touch Gestures with Touch Groups and Cross Events
Proposes two primitives to improve multi-touch programming: touch groups (which summarize multiple fingers rather than tracking them manually) and cross events (which summarize the movement of touch groups).
- Creating Guided Code Explanations with chat.codes
Introduces three features to improve textual-based conversations about code: deictic code references (where a message points to a specific region of code), in-line code diffs (to show how code changed throughout a conversation), and conversation version tracking (which allows viewers to view the state of code as it evolves through out the conversation).
- Arboretum and Arbility: Improving Web Accessibility Through a Shared Browsing Architecture
A system that helps visually impaired web users overcome accessibility barriers through targeted handoffs of tasks that require visual-spatial interaction.
- Adasa: A Conversational In-Vehicle Digital Assistant for Advanced Driver Assistance Features
A conversational digital assistant to help drivers use and understand Advanced Driver Assistance Systems (ADAS).
- Expresso: Building Responsive Interfaces with Keyframes
A programming-by-demonstration approach for creating responsive UIs, where users create keyframes at a few representative viewport sizes and specify smooth or jump (i.e., linear interpolation) transitions between them.
- Codeon: On-Demand Software Development Assistance
CodeOn enables effective task hand-offs between developers and remote helpers by allowing asynchronous responses to on-demand requests.