Skip to main content
Log in

Explicit programming strategies

  • Published:
Empirical Software Engineering Aims and scope Submit manuscript

Abstract

Software developers solve a diverse and wide range of problems. While software engineering research often focuses on tools to support this problem solving, the strategies that developers use to solve problems are at least as important. In this paper, we offer a novel approach for enabling developers to follow explicit programming strategies that describe how an expert tackles a common programming problem. We define explicit programming strategies, grounding our definition in prior work both within software engineering and in other professions which have adopted more explicit procedures for problem solving. We then present a novel notation called Roboto and a novel strategy tracker tool that explicitly represent programming strategies and frame executing strategies as a collaborative effort between human abilities to make decisions and computer abilities to structure process and persist information. In a formative evaluation, 28 software developers of varying expertise completed a design task and a debugging task. We found that, compared to developers who are free to choose their own strategies, developers given explicit strategies experienced their work as more organized, systematic, and predictable, but also more constrained. Developers using explicit strategies were objectively more successful at the design and debugging tasks. We discuss the implications of Roboto and these findings, envisioning a thriving ecosystem of explicit strategies that accelerate and improve developers’ programming problem solving.

This is a preview of subscription content, log in via an institution to check access.

Access this article

Price excludes VAT (USA)
Tax calculation will be finalised during checkout.

Instant access to the full article PDF.

Fig. 1
Fig. 2
Fig. 3
Fig. 4
Fig. 5
Fig. 6
Fig. 7
Fig. 8
Fig. 9

Similar content being viewed by others

Notes

  1. http://programmingstrategies.org

  2. https://github.com/devuxd/ExplicitProgrammingStrategiesStudyMaterials

References

  • Abbott K., Bogart C., Walkingshaw E. (2015) Programs for people: What we can learn from lab protocols. In: Symposium on visual languages and human-centric computing (VL/HCC), pp 203–211

  • Ames C., Archer J. (1988) Achievement goals in the classroom: Students’ learning strategies and motivation processes. J Educ Psychol 80(3):260

    Google Scholar 

  • Anderson J. R., Conrad F. G., Corbett A. T. (1989) Skill acquisition and the lisp tutor. Cogn Sci 13(4):467–505

    Google Scholar 

  • Bass L., Clements P., Kazman R. (2012) Software Architecture in Practice, 3rd edn. Addison-Wesley Professional, Boston

    Google Scholar 

  • Beck K., Beedle M., Van Bennekum A., Cockburn A., Cunningham W., Fowler M., Grenning J., Highsmith J., Hunt A., Jeffries R. et al (2001) Manifesto for agile software development

  • Beck K. (2003) Test-driven development: by example. Addison-Wesley Professional, Boston

  • Bielaczyc K., Pirolli P. L., Brown A. L. (1995) Training in self-explanation and self-regulation strategies: Investigating the effects of knowledge acquisition activities on problem solving. Cogn Instruct 13(2):221–252

    Google Scholar 

  • Bird C., Nagappan N., Devanbu P., Gall H., Murphy B. (2009) Does distributed development affect software quality? an empirical case study of windows vista. In: Proceedings of the 31st international conference on software engineering. IEEE Computer Society, pp 518–528

  • Böhme M., Soremekun E. O., Chattopadhyay S., Ugherughe E., Zeller A. (2017) Where is the bug and how is it fixed? an experiment with practitioners. In: European software engineering conference and symposium on the foundations of software engineering (ESEC/FSE), pp 117–128

  • Bransford J. D., Brown A. L., Cocking R.R et al (2000) How people learn, vol 11. National academy press, Washington

    Google Scholar 

  • Ċalıṡkan S, Selċuk GS, Erol M (2010) Effects of the problem solving strategies instruction on the students’ physics problem solving performances and strategy usage. Procedia-Soc Behav Sci 2(2):2239–2243

    Google Scholar 

  • Chen W. F., Liew J. R. (2002) The civil engineering handbook. CRC Press, Boca Raton

  • Chi M. T. (1997) Quantifying qualitative analyses of verbal data: a practical guide. J Learn Sci 6(3):271–315

    Google Scholar 

  • Davies S. P. (1993) Models and theories of programming strategy. Int J Man-Mach Stud 39(2):237–267

    Google Scholar 

  • Desoete A., Roeyers H., Buysse A. (2001) Metacognition and mathematical problem solving in grade 3. J Learn Disabil 34(5):435–447

    Google Scholar 

  • Dieste O., Aranda A. M., Uyaguari F., Turhan B., Tosun A., Fucci D., Oivo M., Juristo N. (2017) Empirical evaluation of the effects of experience on code quality and programmer productivity: an exploratory study. ESE, pp 1–86

  • Einstein G. O., McDaniel M. A. (1990) Normal aging and prospective memory. J Exper Psychol Learn Memory Cogn 16(4):717

    Google Scholar 

  • Falessi D., Cantone G., Kazman R., Kruchten P. (2011) Decision-making techniques for software architecture design: A comparative survey. ACM Comput Surv 43(4):33:1–33:28

    Google Scholar 

  • Falkner K., Vivian R., Falkner N. J. (2014) Identifying computer science self-regulated learning strategies. In: Conference on innovation & technology in computer science education, pp 291–296

  • Felleisen M. (2001) How to design programs: an introduction to programming and computing. MIT Press, Cambridge

  • Francel M. A., Rugaber S. (2001) The value of slicing while debugging. Sci Comput Program 40(2-3):151–169

    MATH  Google Scholar 

  • Frick T., Reigeluth C. (1999) Formative research: A methodology for creating and improving design theories. Instructional-design theories. Lawrence Erlbaum Associates, Hillsdale, pp 633–652

    Google Scholar 

  • Gamma E., Helm R., Johnson R., Vlissides J. (1995) Design Patterns: Elements of Reusable Object-oriented Software. Addison-wesley, Boston

  • Gawande A., Lloyd J. B. (2010) The checklist manifesto: How to get things right, vol 200. Metropolitan Books, New York

  • Gilmore D. (1990) Expert programming knowledge: a strategic approach. In: Psychology of programming. Academic Press, London, pp 223–234

  • Gilmore D. J. (1991) Models of debugging. Acta Psychol 78(1):151–172

    MathSciNet  Google Scholar 

  • Haidry SEZ, Falkner K, Szabo C (2017) Identifying domain-specific cognitive strategies for software engineering. In: Conference on innovation and technology in computer science education (SIGCSE), pp 206–211

  • Hammer D., Berland L. K. (2014) Confusing claims for data: a critique of common practices for presenting qualitative research on learning. J Learn Sci 23(1):37–46

    Google Scholar 

  • Hilton J. F. (1996) The appropriateness of the wilcoxon test in ordinal data. Stat Med 15(6):631–645

    Google Scholar 

  • Horvitz E. (1999) Principles of mixed-initiative user interfaces. In: Conference on human factors in computing systems (CHI), pp 159–166

  • Hutchins E. (1995) Cognition in the wild. MIT Press, Cambridge

  • Kerievsky J. (2004) Refactoring to patterns. Pearson Higher Education, London

  • Kersten M., Murphy G. C. (2006) Using task context to improve programmer productivity. In: Foundations of software engineering (FSE), pp 1–11

  • Ko A. J., Myers B. A. (2004) Designing the whyline: a debugging interface for asking questions about program behavior. In: Conference on human factors in computing systems (CHI), pp 151–158

  • Ko A. J., Myers B. A. (2005) A framework and methodology for studying the causes of software errors in programming systems. J Vis Lang Comput 16(1-2):41–84

    Google Scholar 

  • Ko A. J., DeLine R., Venolia G. (2007) Information needs in collocated software development teams. In: ICSE, pp 344–353

  • Ko A. J., Myers B. A. (2009) Finding causes of program output with the java whyline. In: Conference on human factors in computing systems (CHI). ACM, pp 1569–1578

  • Ko A. J., Latoza T. D., Burnett M. M. (2015) A practical guide to controlled experiments of software engineering tools with human participants. ESE 20(1):110–141

    Google Scholar 

  • Ko A. J., LaToza T. D., Hull S., Ko E. A., Kwok W., Quichocho J., Akkaraju H., Pandit R. (2019) Teaching explicit programming strategies to adolescents. In: Symposium on computer science education (SIGCSE), pp 469–475

  • Ko A. J., Myers B. (2010) Extracting and answering why and why not questions about java program output. Trans Softw Eng Methodol (TOSEM) 20(2):4

    Google Scholar 

  • Labouvie-Vief G., Gonda J. N. (1976) Cognitive strategy training and intellectual performance in the elderly. J Gerontol 31(3):327–332

    Google Scholar 

  • LaToza T. D., Garlan D., Herbsleb J. D., Myers B. A. (2007) Program comprehension as fact finding. In: European software engineering conference and symposium on the foundations of software engineering (ESEC/FSE), pp 361–370

  • Li P. L., Ko A. J., Zhu J. (2015) What makes a great software engineer?. In: ICSE, pp 700–710

  • Locke E. A., Frederick E., Lee C., Bobko P. (1984) Effect of self-efficacy, goals, and task strategies on task performance. J Appl Psychol 69(2):241

    Google Scholar 

  • Loksa D., Ko A. J. (2016a) The role of self-regulation in programming problem solving process and success. In: Conference on international computing education research (ICER), pp 83–91

  • Loksa D., Ko A. J., Jernigan W., Oleson A., Mendez C. J., Burnett M. M. (2016b) Programming, problem solving, and self-awareness: effects of explicit guidance. In: Conference on human factors in computing systems (CHI), pp 1449–1461

  • Fowler M, Beck K, Brant J, Opdyke W, Roberts D (1999) Refactoring: Improving the design of existing code. Addison-wesley Longman Publishing co., Inc., Boston

  • McCartney R., Eckerdal A., Mostrom J. E., Sanders K., Zander C. (2007) Successful students’ strategies for getting unstuck. In: Conference on innovation and technology in computer science education, pp 156–160

  • Mernik M., Heering J., Sloane A. M. (2005) When and how to develop domain-specific languages. ACM Comput Surv 37(4):316–344

    Google Scholar 

  • Metzger R. C. (2004) Debugging by thinking: A multidisciplinary approach. Digital Press

  • Murphy L., Lewandowski G., McCauley R., Simon B., Thomas L., Zander C. (2008) Debugging: The good, the bad, and the quirky – a qualitative analysis of novices’ strategies. In: Symposium on computer science education (SIGCSE), pp 163–167

  • Pothier G., Tanter É (2009) Back to the future: Omniscient debugging. IEEE Software 26(6)

  • Quinn A. J., Bederson B. B. (2011) Human computation: a survey and taxonomy of a growing field. In: Conference on human factors in computing systems (CHI), pp 1403–1412

  • Reason J. (1990) Human error. Cambridge University Press. https://doi.org/10.1017/CBO9781139062367

  • Retelny D., Bernstein M. S., Valentine M. A. (2017) No workflow can ever be enough: How crowdsourcing workflows constrain complex work. Proc. ACM Hum.-Comp. Interact 1

  • Rist R. S. (1995) Program structure and design. Cogn Sci 19(4):507–561

    Google Scholar 

  • Robillard M. P., Coelho W., Murphy G. C. (2004) How effective developers investigate source code: an exploratory study. Trans Softw Eng 30(12):889–903

    Google Scholar 

  • Robins A., Rountree J., Rountree N. (2003) Learning and teaching programming: a review and discussion. Comput Sci Educ 13(2):137–172

    Google Scholar 

  • Roehm T., Tiarks R., Koschke R., Maalej W. (2012) How do professional developers comprehend software?. In: International conference on software engineering (ICSE), pp 255–265

  • Sackman H., Erikson W. J., Grant E. E. (1968) Exploratory experimental studies comparing online and offline programming performance. Commun ACM (CACM) 11 (1):3–11

    Google Scholar 

  • Salinger S., Prechelt L. (2013) Understanding Pair Programming: The Base Layer. BoD–Books on Demand

  • Schoenfeld A. H. (1981) Episodes and executive decisions in mathematical problem solving. In: Annual meeting of the american educational research association. ERIC

  • Sears A., Jacko J. A. (2007) The human-computer interaction handbook: fundamentals, evolving technologies and emerging applications. CRC Press, Boca Raton

  • Shaw M., Garlan D. (1996) Software architecture: Perspectives on an emerging discipline. Prentice-hall, Upper Saddle River

  • Shull F., Melnik G., Turhan B., Layman L., Diep M., Erdogmus H. (2010) What do we know about test-driven development? IEEE Softw 27(6):16–19

    Google Scholar 

  • Sillito J., Murphy G. C., De Volder K. (2008) Asking and answering questions during a programming change task. IEEE Trans Softw Eng 34(4):434–451

    Google Scholar 

  • Simon H. A. (1972) Theories of bounded rationality. Decis Organ 1(1):161–176

    MathSciNet  Google Scholar 

  • Suchman L. A. (1987) Plans and situated actions: The problem of human-machine communication. Cambridge University Press

  • Von Mayrhauser A., Vans A. M. (1995) Program comprehension during software maintenance and evolution. Computer 28(8):44–55

    Google Scholar 

  • Wieringa D., Moore C., Barnes V. (1998) Procedure writing: principles and practices. IEEE

  • Xie B., Nelson G. L., Ko A. J. (2018) An explicit strategy to scaffold novice program tracing. In: Symposium on computer science education (SIGCSE), pp 344–349

  • Zamli K. Z. (2001) Process modeling languages: a literature review. Malay J Comput Sci 14(2):26–37

    Google Scholar 

  • Zeller A. (2009) Why programs fail: a guide to systematic debugging. Elsevier, Amsterdam

  • Zhang J., Norman D. A. (1994) Representations in distributed cognitive tasks. Cogn Sci 18(1):87–122

    Google Scholar 

Download references

Acknowledgements

We thank our study participants for their time. This work was supported in part by the National Science Foundation under grants CCF-1703734 and CCF-1703304.

Author information

Authors and Affiliations

Authors

Corresponding author

Correspondence to Thomas D. LaToza.

Additional information

Communicated by: Alexander Serebrenik

Publisher’s note

Springer Nature remains neutral with regard to jurisdictional claims in published maps and institutional affiliations.

Rights and permissions

Reprints and permissions

About this article

Check for updates. Verify currency and authenticity via CrossMark

Cite this article

LaToza, T.D., Arab, M., Loksa, D. et al. Explicit programming strategies. Empir Software Eng 25, 2416–2449 (2020). https://doi.org/10.1007/s10664-020-09810-1

Download citation

  • Published:

  • Issue Date:

  • DOI: https://doi.org/10.1007/s10664-020-09810-1

Keywords

Navigation