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.
Recent publications (all publications)
- 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).
- 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).
- 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.
- 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.
- CodeMend: Assisting Interactive Programming with Bimodal Embedding
A system that helps programmers find appropriate API functions and parameter values from natural language.
- Towards Providing On-Demand Expert Support for Software Developers
Two studies that present the opportunities and the design recommendations of on-demand remote support systems for developers.