• 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