Andrew J. Ko

As an HCI researcher and teacher, I'm fascinated by software. I'm intrigued with how it's built, the people who build it, and its far reaching effects on society. I study beginners, end-user programmers, and professionals with lab studies, classroom and corporate field work, and artifact analysis. I use the results to invent tools that better support the design, creation and repair of software.

I'm working on...

Why questions for developers (for Java and Alice). Imagine a debugging tool that lets you point to program output and ask a 'why' question, then get an explanation than pinpoints the answer...
Why questions in user interfaces. Ever wonder why your software is doing something strange? These tools let you click on the confusing output and ask 'why' questions.
Supporting design decisions. Design decisions are what primarily determine software quality, but we know so little about how they're made. I want to design tools that better support these decisions. (With Parmit Chilana and Jacob Wobbrock)
Making programming fun. What gets people excited about computing? Too many programming languages, even those designed for beginners, make code something sterile and cryptic. I want to make code something people play with.

I've worked on many other projects, most of which appear below.

Tools

These are technologies that I'm no longer actively working on. If something here seems interesting, however, drop me a line. I'm always open to new perspectives on past work.

Barista 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 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 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 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.
The Whyline for Alice is a debugging tool that allows developers to ask why and why not questions about their program's output. The prototype that I wrote for Alice helped developers solve problems 8 times faster than normal tools.

Studies

Information Needs in Co-located Software Development Teams. What kinds of information do software developers look for on a minute-by-minute basis? Rob DeLine (MSR) and I spent a summer hanging out in software developers' offices and took extensive notes on the information they were looking for. They spend a lot of time staying aware of their teammates' activities as well as seeking design rationale (but never finding).
The Linguistics of Problem Reports. Are there linguistic trends in people's descriptions of software problems? To find out, we analyzed nearly 200,000 open source bug reports, specifically studying their one-line summaries.
Bottlenecks in Software Maintenance Tasks. We studied several expert Java programmers using Eclipse to fix bugs and add features to a painting application. The study identified several trends in these activities, including that developer's spent an average of 35% of their time scrolling within files and switching between files, to code they had already seen but needed to reference again. If you're curious, you can view the source code for the Paint application used in the study.
Text Editing Strategies in Code Editors. How do programmers edit textual code (as opposed to visual or otherwise)? We did a fine grained analysis of several programmers character-by-character edits, finding that programmers generally preserve the syntactic integrity of their code. Almost all edits, however, require them to pass through some syntactically invalid state momentarily.
Learning Barriers in Visual Basic.NET We studied a classroom full of non-programmers attempting to learn Visual Basic.NET and found that, while many barriers were difficulty with syntax errors, many others had to do with searching for, using, coordinating, and debugging uses of abstractions in APIs. We identified many ways that programming environments might lower or remove these barriers.
What causes people to insert errors in code? Traditional perspectives blame the programmers or the languages. We observed and documented groups developing interactive 3D simulations, the errors introduced into their code, and their efforts to find and repair these errors. About half of the errors introduced occurred as a result of efforts to repair other errors that were based on these false assumptions.

Andrew J. Ko

Assistant Professor

The Information School

University of Washington

Box 352840

Seattle, WA 98195


ajko at u washington edu

Mary Gates Hall 310F

206-221-0352

Interested in a Ph.D. in HCI or software engineering? Apply to the iSchool or CSE and work with me as part of dub! If you're already a student at UW, let's chat.

06.29.09
VL/HCC paper on code autobiographies to appear
05.23.09
presented The State of the Art in EUSE at SEEUP
05.15.09
presented to the iSchool founding board
01.15.09
my CHI '09 paper was accepted.
11.05.08
I gave a talk at DUB.
09.16.08
I am now faculty at UW. Come do research with me!
05.10.08
I've posted the Whyline for Java for download! Try it out.
05.08.08
I submitted my dissertation!
04.15.08
I'm finally back in Pittsburgh, takin' it easy, writing a few journal papers :)
03.16.08
My Whyline for Java paper won distinguished paper award at ICSE 2008!
02.28.08
read L'Sociopath
01.28.08
posted the ICSE '08 Whyline paper
01.6.08
parity
12.29.07
read road
11.13.07
finished misadventure 101
08.15.07
finished the whole is elucidated
08.07.07
poetry by yours, (truly!)
07.25.07
wow, it's been a while. i've been a bit bookish lately, reading Sophie's World and No Country for Old Men.
06.12.07
finished a chilling killing
05.29.07
Finished Flowers for Algernon.
05.21.07
Finished Wharton's Summer.
05.11.07
Ellen did a wonderful job at her first violin recital!
05.06.07
Yay! New colors.
05.06.07
Finished Pride and Prejudice.
04.29.07
Reorganized reading page chronologically and hid the comments until a mouse over. Added a comment on Fausto-Sterling.
04.28.07
Yes, animation can be annoying. But I needed an excuse to play with Javascript. You can put up with it for a while.
04.20.07
Comments on My Mortal Enemy and yay for sepia!
04.12.07
Comments on Frankenstein and new fwf entry.
04.04.07
Posted comments L'Engle's Wrinkle.
03.27.07
Posted comments on Postman and Melville, and two new musings on meditation and flying
03.06.07
Remembered a bunch of books I read!
03.02.07
Added page about fwf
02.15.07
added some summaries to reading list
01.06.07
bit of a site redesign