Designing Interactive Systems to Facilitate Exploration and Participation in Live Coding
Files
TR Number
Date
Authors
Journal Title
Journal ISSN
Volume Title
Publisher
Abstract
In computing education, live coding refers to a lecture technique in which an instructor writes code in front of students as a part of the lecture, speaking aloud throughout to provide commentary and explain their thought process. In the performing arts, live coding is a practice in which a performer continuously writes, edits, and runs code live in front of an audience to create an audiovisual performance. In this dissertation, I explore how we can design systems to support and augment the practice of live coding in both domains by addressing two key challenges: exploration and participation. In the performing arts domain, I present SHARP, a lightweight, block-level version control system designed for the live coding music language Tidal Cycles. A user study revealed that SHARP's version trees made it easier to understand the progression of code and enabled live coding musicians to explore new combinations of sounds and to execute musical forms on the fly. In the computing education domain, I conducted 22 interviews with CS instructors who use live coding and discovered that (1) instructors had conflicting opinions on whether students should type along with them during live coding; and (2) instructors valued that live coding offered many touchpoints for student participation, but wished that students participated more. Regarding (1), I designed and developed NOTES, a note-taking system for live coding that allows students to take snapshots of the instructor's code, enabling students to focus on writing their own notes rather than just copying the instructor's code. Regarding (2), I designed and developed AD LIB, a system that enables instructors to quickly create class exercises on the fly while live coding, encouraging student participation and enabling controlled student exploration through coding activities. Finally, I discuss how each system is united by a common theme of version control, and I explore avenues for future work designing interactive systems for understanding how code evolves over time.