Andrew J. Ko

Associate Professor

The Information School

Computer Science & Engr. (adjunct)

University of Washington

Box 352840

Seattle, WA 98195

ajko | @ | uw | edu

Mary Gates Hall 015E

Chief Scientist + Co-Founder


Winter 2016
On sabbatical, learning things
Office hours by appt

Play Gidget, our new debugging game!

AnswerDash is a spinout of Parmit Chilana's work on LemonAid, serving instant contextual answers in web applications.

New NSF project! Variations to Support Exploratory Programming

I direct the USE research group, which studies people's interactions with code. We build better developer tools, we study software teams, we design better ways to learn to code, and we invent new ways to help people understand how software works. My interests span human-computer interaction, software engineering, and computing education. I'm always recruiting students at all levels to support this work.

Below you'll find current and past projects, sorted chronologically and tagged.

filter: show all

there's nothing left to show
How can we best teach problem solving in programming? [CHI16]. We're exploring new pedagogies and new learning technologies to teach programming problem solving skills.
study learning
What makes someone a great software engineer? [ICSE15]. What combination of technical, tactical, and social skills make software engineers effective?
study learning
Gidget [ICER15, ICER11,VL/HCC12, ICER13, VL/HCC 2014, VL/HCC15]. Can a game teach programming and debugging skills and also be fun? We say yes. Our recent work has shown that personifying an interpreter in in a puzzle game context significantly increases engagement and learning. The game is live at
debugging learning
Timelapse [UIST13] enables developers to easily record and replay browser interactions to arbitrary points of execution at exact level of granularity. Time-travel debugging has come to the web.
debugging programming
LemonAid [CHI12, CHI13] helps you find software help in a single click. Querying by user interface selection is better than querying with text because people with similar problems choose similar things. We've deployed this to four web sites, including the UW Libraries.
help usability
FeedLack [CHI11] automatically finds scenarios where web applications ignore user input by applying static program analysis to JavaScript, HTML, and CSS. Fewer than 25% of its warnings are false positives. See the demo!
usability debugging
Frictionary [CHI12] automatically extracts problem topics from support forums around the web, visualizing them over time to help identify new issues. See the demo!
debugging help
How do software teams use user feedback? We've investigated beta testing [ICSE11], post-deployment usability [CHI11], open source bug reporting [CHI10, iConf11,VLHCC10], and support requests [CHASE11].
debugging study best paper
Why is programming difficult to learn? These studies have investigated the role of programming environments[VL/HCC06], mentorship [VL/HCC09], and documentation [VL/HCC11].
learning study
The state of the art in end-user software engineering [CSUR11]. Reports on the past two decades of research on making end users' programs more reliable through software engineering techniques.
review programming
Cleanroom [VLHCC10] finds a wide range of defects in HTML/CSS/JavaScript applications by looking for identifiers that only appear once. See the demo!
debugging best paper
The Whyline [TOSEM11,CHI09,ICSE08,CHI04] lets you point to program output and ask 'why' and 'why not' questions, then get an explanation that pinpoints the answer. Dramatically reduces fault localization time. Prototyped for Java and Alice.
debugging best paper
Crystal [CHI06]. Ever wonder why your software is doing something strange? Crystal is an automatic help tool that lets you click on confusing output and ask 'why' questions, getting answers in terms of user interface controls that caused the behavior.
Barista [CHI06] is a toolkit for creating flexible structured code editors. The key different between Barista editors and prior structured editors is that they use standard text editing interaction techniques, but a structured visual representation.
Jasper [ETX06]is a workspace for gathering task-relevant code during software maintenance tasks. Its motivated by findings from one of my studies that showed that most of what developers do during such tasks is navigate between relevant code.
Slate [VL/HCC05] is a spreadsheet language with a novel labeling system. Users give labels to data and the data is propagated through formulas, causing unexpected combinations of labels in the presence of errors.
Citrus [UIST05] is a novel programming language that supports one way constraints, events, value restrictions, and object ownership. I used Citrus to implement the Barista toolkit above and lots of other prototype user interfaces.