| | This Article | |
| |
| |
| | Share | |
| |
| |
| | Bibliographic References | |
| |
| |
| | Add to: | |
| |
Digg
Furl
Spurl
Blink
Simpy
Google
Del.icio.us
Y!MyWeb
| |
| | Search | |
| |
| |
| | |
Opportunistic Programming: Writing Code to Prototype, Ideate, and Discover
September/October 2009 (vol. 26 no. 5)
pp. 18-24
Programmers often write code to prototype, ideate, and discover. To do this, they work opportunistically, emphasizing speed and ease of development over code robustness and maintainability. How do opportunistic programmers make these trade-offs, and how does their work's structure compare to more formal software engineering practices? Opportunistic programmers build software using high-level tools and often add new functionality via copy-and-paste from the Web. They iterate rapidly, consider code impermanent, and find debugging particularly challenging. Five opportunistic-programming principles can help guide the development of tools that explicitly support prototyping in code.
1. S. Clarke, "What Is an End-User Software Engineer?" End-User Software Eng., Internationales Begegnungs- and Forschungszentrum für Informatik, 2007; http://drops.dagstuhl.de/portalsindex.php?semnr=07081 .
2. S. Houde and C. Hill, "What Do Prototypes Prototype?" Handbook of Human–Computer Interaction, M. Helander, T.Ê. Landauer, and P. Prabhu eds., Elsevier Science, 1997, pp. 367–382.
3. B. Hartmann, S. Doorley, and S.R. Klemmer, "Hacking, Mashing, Gluing: Understanding Opportunistic Design," IEEE Pervasive Computing, vol. 7, no. 3, 2008, pp. 46–54.
4. M. Schrage, Serious Play: How the World's Best Companies Simulate to Innovate, Harvard Business School Press, 1999.
5. J. Brandt et al., "Two Studies of Opportunistic Programming: Interleaving Web Foraging, Learning, and Writing Code," Proc. 27th Int'l Conf. Human Factors in Computing Systems (CHI 09), ACM Press, 2009, pp. 1589–1598.
6. A.J. Ko, B.A. Myers, and H.H. Aung, "Six Learning Barriers in End-User Programming Systems," Proc. 2004 IEEE Symp. Visual Languages—Human-Centric Computing (VLHCC 04), IEEE CS Press, 2004, pp. 199–206.
7. T.D. LaToza, G. Venolia, and R. De Line, "Maintaining Mental Models: A Study of Developer Work Habits," Proc. 28th Int'l Conf. Software Eng. (ICSE 06), ACM Press, 2006, pp. 492–501.
8. R.B. Yeh, A. Paepcke, and S.R. Klemmer, "Iterative Design and Evaluation of an Event Architecture for Pen-and-Paper Interfaces," Proc. 21st Ann. ACM Symp. User Interface Software and Technology (UIST 08), ACM Press, 2008, pp. 111–120.
9. T.M. O'Brien, "Dead Time (…Code, Compile, Wait, Wait, Wait, Test, Repeat)," blog, 30 Mar. 2006; www.oreillynet.com/onjava/blog/2006/03dead_time_code_compile_wait_wa.html .
10. J.K. Ousterhout, "Scripting: Higher-Level Programming for the 21st Century," Computer, vol. 31, no. 3, 1998, pp. 23–30.
11. B. Hartmann et al., "Programming by a Sample: Rap-idly Creating Web Applications with d.mix," Proc. 20th Ann. ACM Symp. User Interface Software and Technology (UIST 07), ACM Press, 2007, pp. 241–250.
12. B. Hartmann et al., "Design as Exploration: Creating Interfaces through Parallel Authoring and Runtime Tuning," Proc. 21st ACM Symp. User Interface Software and Technology (UIST 08), ACM Press, 2008, pp. 91–100.
Index Terms:
opportunistic programming, prototyping, debugging, software engineering
Citation:
Joel Brandt, Philip J. Guo, Joel Lewenstein, Mira Dontcheva, Scott R. Klemmer, "Opportunistic Programming: Writing Code to Prototype, Ideate, and Discover," IEEE Software, vol. 26, no. 5, pp. 18-24, Sep./Oct. 2009, doi:10.1109/MS.2009.147