about me

Would you like to do research with me at UW about software, HCI, or the implications of these on society? Apply to the iSchool Ph.D. program, or related programs in Computer Science or Technical Communications!

I'm an assistant professor at The Information School at the University of Washington and 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. Sometimes I study people in the lab and have them work on tasks that I've designed; other times I observe developers in the field; I also gather code and other software artifacts to look for patterns. I tend to focus on professional developers, but I also study end-user programmers, who write programs to support their work or hobbies (unlike professionals, who write programs for pay).

One of my major interests is program understanding. I'm interested in understanding why software is difficult to understand, and I also invent technologies that minimize this difficulty. You can find more details at the Natural Programming site and also below.

The Whyline for Java lets you ask why and why not questions about Java programs' textual and graphical output. Just like the Whyline for Alice, it supports why did and why didn't questions about output.
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.
Jasper is a workspace for gathering task relevant code fragments 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.
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.
Crystal is a toolkit for supporting why questions about desktop applications. We prototyped a word processor that allows you to ask questions such as, "Why was this word auto-capitalized?" and "Why isn't this bold?"
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.

short biography

Andrew Ko is an Assistant Professor at The Information School at the University of Washington. His research interests include social and cognitive factors in software engineering, end user software engineering, user interface software and technology, and programming language design. He has published articles in all of these areas, receiving best paper awards at top conferences such as the International Conference on Software Engineering (ICSE) and the ACM Conference on Human Factors in Computing (CHI), as well as extensive press on the Whyline, a novel debugging tool that supports questions about program output. In 2004, he was also awarded both NSF and NDSEG research fellowships in support of his Ph.D. research. He received his Ph.D at the Human-Computer Interaction Institute at Carnegie Mellon University, advised by Brad Myers. He received Honors BS degrees in Computer Science and Psychology from Oregon State University in 2002.