Opportunistic Programming:
Helping people prototype, ideate, and discover by building software

Workshop in the Exploratorium museum, where all exhibits are created in-house

Project Abstract

Opportunistic Programming is a method of software development that emphasizes speed and ease of development over code robustness and maintainability. Coding in this way allows individuals to explore many ideas quickly, which has an important place in the overall sofware engineering process. Steps like prototyping, ideation and discovery are often best accomplished by building a functional piece of software quickly and easily without the typical concerns of a broader-scale software engineering project. Through fieldwork and a laboratory study, we are focusing on five characteristics of opportunistic programming: building software from scratch using high-level tools, adding new functionality through copy-and-paste, atypically rapid iteration, considering code to be impermanent, and facing a unique set of debugging challenges. Using results from these two projects, we plan on developing tools aimed at opportunistic programming that focus on debugging, code foraging and reuse, and documentation.

Videos

Publications

Joel Brandt, Mira Dontcheva, Marcos Weskamp, Scott R. Klemmer. Example-Centric Programming: Integrating Web Search into the Development Environment. CHI: ACM Conference on Human Factors in Computing Systems, Atlanta, GA, 2010. best paper nominee! (try it out) (video)

Bjoern Hartmann, Daniel MacDougall, Joel Brandt, Scott R. Klemmer. What Would Other Programmers Do? Suggesting Solutions to Error Messages. CHI: ACM Conference on Human Factors in Computing Systems, Atlanta, GA, 2010. best paper nominee! (video)

Joel Brandt, Philip J. Guo, Joel Lewenstein, Mira Dontcheva, Scott R. Klemmer. How the Web Helps People Turn Ideas Into Code. Book chapter in No Code Required: Giving Users Tools to Transform the Web, edited by A Cypher, M. Dontcheva, T. Lau, J. Nichols. Morgan Kaufmann, 2010.

Joel Brandt, Philip J. Guo, Joel Lewenstein, Mira Dontcheva, Scott R. Klemmer. Opportunistic Programming: Writing Code to Prototype, Ideate, and Discover. IEEE Software, Volume 26, Issue 5 (Sept/Oct 2009).

Joel Brandt, Philip J. Guo, Joel Lewenstein, Mira Dontcheva, Scott R. Klemmer. Two Studies of Opportunistic Programming: Interleaving Web Foraging, Learning, and Writing Code. CHI: ACM Conference on Human Factors in Computing Systems, Boston, MA, 2009. best paper nominee!

Joel Brandt, Philip J. Guo, Joel Lewenstein, Scott R. Klemmer. Opportunistic Programming: How Rapid Ideation and Prototyping Occur in Practice. Fourth Workshop on End-User Software Engineering. May, 2008.

William Choi, Joel Brandt, Scott R. Klemmer. Rehearse: Coding Interactively while Prototyping. Poster at UIST 2008: ACM Symposium on User Interface Software and Technology. October, 2008. (video)