Andrew J. Ko

Assistant Professor

The Information School

University of Washington

Box 352840

Seattle, WA 98195


Office 206-221-0352

ajko | @ | uw | edu

Mary Gates Hall 330G





Fall 2013
not teaching
office hours by appt
availability


New NSF project! Variations to Support Exploratory Programming

explaining software one bit at a time

Modern software is increasingly complex, making it ever more difficult to use, understand, and fix. I direct the USE research group, which invents technologies that help people understand and overcome this complexity, including new help systems for end users, new debugging tools for developers, and new educational technologies for people learning to program. My interests span human-computer interaction, software engineering, and computing education.

I'm always recruiting students at all levels with strong technical skills.

As of Fall 2013, I'm on partial leave as CTO of a startup called AnswerDash. This is a spinout of Parmit Chilana's work on LemonAid, serving instant answers on e-commerce sites and web applications.

Below you'll find a sample of projects that I've worked on, sorted chronologically and tagged.

filter: show all

there's nothing left to show
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
Gidget [ICER11,VL/HCC12, ICER13, VL/HCC 2014]. 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. We'll be launching the game soon.
debugging learning
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.
help
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.
programming
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.
programming
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.
debugging
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.
programming