Skip to main content

Problem-Solving Strategies

  • Chapter
  • First Online:
Guide to Teaching Computer Science

Abstract

Problem-solving is generally considered as one of the most important and challenging cognitive activities in everyday as well as in any professional contexts. Specifically, it is one of the central activities performed by computer scientists as well as by computer science learners. However, it is not a uniform or linear process that can be taught as an algorithm to be followed, and the understanding of this individual process is not always clear. Computer science learners often face difficulties in performing two of the main stages of a problem-solving process: problem analysis and solution construction. Therefore, it is important that computer science educators be aware of these difficulties and acquire appropriate pedagogical tools to guide and scaffold learners in learning these skills. This chapter is dedicated to such pedagogical tools. It presents several problem-solving strategies to address in the MTCS course together with appropriate activities that mediate them to the prospective computer science teachers by enabling them to experience the different strategies.

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

Access this chapter

Chapter
USD 29.95
Price excludes VAT (USA)
  • Available as PDF
  • Read on any device
  • Instant download
  • Own it forever
eBook
USD 44.99
Price excludes VAT (USA)
  • Available as EPUB and PDF
  • Read on any device
  • Instant download
  • Own it forever
Softcover Book
USD 59.99
Price excludes VAT (USA)
  • Compact, lightweight edition
  • Dispatched in 3 to 5 business days
  • Free shipping worldwide - see info
Hardcover Book
USD 84.99
Price excludes VAT (USA)
  • Durable hardcover edition
  • Dispatched in 3 to 5 business days
  • Free shipping worldwide - see info

Tax calculation will be finalised at checkout

Purchases are for personal use only

Institutional subscriptions

Notes

  1. 1.

    An algorithmic problem is defined by what is given – the initial conditions of the problem and its goals – the desired state, what should be accomplished. An algorithm problem can be solved with a series of actions formulated formally either by pseudo-code or a programming language. See Sect. 12.4.1.

  2. 2.

    In advanced computer science classes, it is relevant to mention that in computer science, in addition to the development of problem-solving strategies, special emphasis is placed also on non-solvable problems (see Sect. 12.4.3).

  3. 3.

    Role of Variables in Python: http://www.cs.joensuu.fi/~saja/var_roles/stud_vers/stud_Python_eng.html

  4. 4.

    Roles of Variables with examples in Scratch: https://www.sisd.net/cms/lib/TX01001452/Centricity/domain/433/cse/1.1.5%20RolesOfVariables_UsedActivity1.2.4.pptx

  5. 5.

    The Roles of Variables home page (http://saja.kapsi.fi/var_roles/) is a rich resource and contains different kinds of educational resources.

  6. 6.

    See http://www.cs.joensuu.fi/~saja/var_roles/role_intro.html

  7. 7.

    See http://www.cs.joensuu.fi/~saja/var_roles/try.html

  8. 8.

    See http://cs.uef.fi/~pgerdt/RAE/

  9. 9.

    See http://www.cs.joensuu.fi/~saja/var_roles/why_roles.html

  10. 10.

    See http://www.cs.joensuu.fi/~saja/var_roles/teaching.html

  11. 11.

    See http://saja.kapsi.fi/var_roles/literature.html

References

  • Ahrendt W, Bubel R, Hahnle R (2009) Integrated and tool-supported teaching of testing, debugging, and verification. In: Gibbons J, Oliveira JN (eds) Proceedings of the 2nd international conference on teaching formal methods (TFM ’09). Springer, Berlin/Heidelberg, pp 125–143

    Google Scholar 

  • Alqadi BS, Maletic JI (2017) An empirical study of debugging patterns among novices programmers. In: Proceedings of the 2017 ACM SIGCSE technical symposium on computer science education (SIGCSE ’17). ACM, New York, pp 15–20

    Google Scholar 

  • Arshad N (2009) Teaching programming and problem solving to CS2 students using think-alouds. SIGCSE Bull 41(1):372–376

    Google Scholar 

  • Astrachan O, Berry G, Cox L, Mitchener G (1998) Design patterns: an essential component of CS curricula. In: Proceeding of SIGCSE, pp 153–160

    Google Scholar 

  • Batory D, Sarvela JN, Rauschmayer A (2004) Scaling stepwise refinement. IEEE Trans Softw Eng 30(6):355–371

    Google Scholar 

  • Bauer A, Popović Z (2017) Collaborative problem solving in an open-ended scientific discovery game. In: Proceedings of the ACM Human-Computer Interaction 1, CSCW, Article 22 (December 2017)

    Google Scholar 

  • Ben-Ari M, Sajaniemi J (2003) Roles of variables from the perspective of computer science educators. University of Joensuu, Department of Computer Science, Technical Report, Series A-2003–6

    Google Scholar 

  • Börstler J, Hilburn TB (2016) Team projects in computing education. ACM Trans Comput Educ 16(2), Article 4 (March 2016)

    Google Scholar 

  • Byckling P, Sajaniemi J (2006) Roles of variables and programming skills improvement. SIGCSE Bull 38(1):413–417

    Google Scholar 

  • Carver S, McCoy (1988) Learning and transfer of debugging skills: applying task analysis to curriculum design and assessment. In Mayer RE (ed) Teaching and learning computer programming, multiple research perspectives. Lawrence Erlbaum Associates, Inc., Chapter 11

    Google Scholar 

  • Celepkolu M, Boyer KE (2018) The importance of producing shared code through pair programming. In: Proceedings of the 49th ACM technical symposium on computer science education (SIGCSE ’18). ACM, New York, pp 765–770

    Google Scholar 

  • Clancy MJ, Linn M C (1999) Patterns and pedagogy. In: Proceedings of the SIGCSE’99, pp 37–42

    Google Scholar 

  • Cosmides L, Tooby J (1997) Evolutionary psychology: a primer. Retrieved 24 October 2004, from http://www.psych.ucsb.edu/research/cep/primer.html

  • Dijkstra EW (1976) A discipline of programming. Prentice-Hall, Englewood Cliffs

    MATH  Google Scholar 

  • East JP, Thomas SR, Wallingford E, Beck W, Drake J (1996) Pattern-based programming instruction. In: Proceedings of ASEE annual conference and exposition, Washington, DC

    Google Scholar 

  • Ginat D (2003) The greedy trap and learning from mistakes. SIGCSE Bull 35(1):11–15

    Google Scholar 

  • Ginat D (2004) Algorithmic patterns and the case of the sliding delta. SIGCSE Bull 36(2):29–33

    Google Scholar 

  • Ginat D (2008) Learning from wrong and creative algorithm design. SIGCSE Bull 40(1):26–30

    Google Scholar 

  • Ginat D (2009) Interleaved pattern composition and scaffolded learning. In: Proceedings of the 14th Annual ACM SIGCSE Conference on Innovation and Technology in Computer Science Education – ITiCSE ‘09, Paris, France, pp 109–113

    Google Scholar 

  • Ginat D, Shmalo R (2013) Constructive use of errors in teaching CS1. In: Proceedings of the 44th ACM technical symposium on Computer science education (SIGCSE ’13). ACM, New York, pp 353–358

    Google Scholar 

  • Hasni TF, Lodhi F (2011) Teaching problem solving effectively. ACM Inroads 2(3):58–62

    Google Scholar 

  • Hazzan O, Leron U (2006) Why do we resist testing? Syst Des Front Exclus Front Cover Syst Des 3(7):20–23

    Google Scholar 

  • Johnson DW, Johanson RT (2017) Cooperative learning. Retrieved from: https://2017.congresoinnovacion.educa.aragon.es/documents/48/David_Johnson.pdf

  • Jonassen DH (2000) Toward a design theory of problem solving. Educ Technol Res Dev 48(4):63–85

    Google Scholar 

  • Kiesmüller U (2009) Diagnosing learners’ problem-solving strategies using learning environments with algorithmic problems in secondary education. Trans Comput Educ 9(3), Article 17 (September 2009), 26 pages

    Google Scholar 

  • Laakso MJ, Malmi L, Korhonen A, Rajala T, Kaila E, Salakoski T (2008) Using roles of variables to enhance novice’s debugging work. Issues Informing Sci Inf Technol 5:281–295

    Google Scholar 

  • Lapidot T, Hazzan O (2005) Song debugging: merging content and pedagogy in computer science education. Inroads SIGCSE Bull 37(4):79–83

    Google Scholar 

  • Lieberman H (1997) The debugging scandal and what to do about it (special section). Comm ACM 40(4):27–29

    Google Scholar 

  • Lishinski A, Yadav A, Enbody R, Good J (2016) The influence of problem solving abilities on Students’ performance on different assessment tasks in CS1. In: Proceedings of the 47th ACM technical symposium on computing science education (SIGCSE ’16). ACM, New York, pp 329–334

    Google Scholar 

  • Muller O (2005) Pattern oriented instruction and the enhancement of analogical reasoning. In: Proceedings of the first International Workshop on Computer Education Research ICER ‘05, Seattle, WA, USA, pp 57–67

    Google Scholar 

  • Muller O, Haberman B, Averbuch H (2004) (An almost) pedagogical pattern for pattern-based problem solving instruction. In: Proceedings of the 9th Annual SIGCSE Conference on Innovation and Technology in Computer Science. Education, pp 102–106

    Google Scholar 

  • Muller O, Ginat D, Haberman B (2007) Pattern-oriented instruction and its influence on problem decomposition and solution construction. ACM SIGCSE Bull 39(3):151–155

    Google Scholar 

  • 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. SIGCSE Bull 40(1):163–167

    Google Scholar 

  • Nagvajara P, Taskin B (2007) Design-for-debug: a vital aspect in education. In: Proceedings of the 2007 IEEE international conference on microelectronic systems education (MSE ’07). IEEE Computer Society, Washington, DC, USA, pp 65–66

    Google Scholar 

  • Papert S (1980) Mindstorms: children, computers and powerful ideas. Basic Books Inc, New York

    Google Scholar 

  • Polya G (1957) How to solve it. Doubleday and Co., Inc, Garden City

    Google Scholar 

  • Polya G (1981) Mathematical discovery on understanding learning and teaching problem solving. Wiley, New York

    MATH  Google Scholar 

  • Popper KR (1992/1959) Logic of scientific discovery. Harper and Row, New York

    Google Scholar 

  • Proulx VK (2000) Programming patterns and design patterns in the introductory computer science course. Proc SIGCSE 32(1):80–84

    Google Scholar 

  • Ragonis N (2012) Integrating the teaching of algorithmic patterns into computer science teacher preparation programs. In: Proceedings of the 17th ACM annual conference on Innovation and technology in computer science education (ITiCSE ’12). ACM, New York, pp 339–344

    Google Scholar 

  • Raman K, Svore KM, Gilad-Bachrach R, Burges CJC (2012) Learning from mistakes: towards a correctable learning algorithm. In: Proceedings of the 21st ACM international conference on information and knowledge management (CIKM ’12). ACM, New York, pp 1930–1934

    Google Scholar 

  • Reed D (1999) Incorporating problem-solving patterns in CS1. J Comput Sci Edu 13(1):6–13

    Google Scholar 

  • Reynolds RG, Maletic JI, Porvin SE (1992) Stepwise refinement and problem solving. IEEE Softw 9(5):79–88

    Google Scholar 

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

    Google Scholar 

  • Sajaniemi J (2005) Roles of variables and learning to program. In: Jimoyiannis A (ed) Proceedings of the 3rd Panhellenic conference didactics of informatics, University of Peloponnese, Korinthos, Greece. http://cs.joensuu.fi/~saja/var_roles/abstracts/didinf05.pdf. Accessed 3 July 2010

  • Santos AL, Sousa J (2017) An exploratory study of how programming instructors illustrate variables and control flow. In: Proceedings of the 17th Koli calling international conference on computing education research (Koli Calling ’17). ACM, New York, pp 173–177

    Google Scholar 

  • Schoenfeld AH (1983) Episodes and executive decisions in mathematical problem-solving. In: Lesh R, Landaue M (eds) Acquisition of mathematics concepts and processes. Academic Press Inc, New York

    Google Scholar 

  • Schön DA (1983) The reflective practitioner. BasicBooks

    Google Scholar 

  • Seta K, Kajino T, Umano M, Ikeda M (2006) An ontology based reflection support system to encourage learning from mistakes. In: Deved V (ed) Proceedings of the 24th IASTED international conference on artificial intelligence and applications (AIA’06). ACTA Press, Anaheim, pp 142–149

    Google Scholar 

  • Soloway E (1986) Learning to program = learning to construct mechanisms and explanations. CACM 29(1):850–858

    Google Scholar 

  • Spohrer JG, Soloway E (1986) Analyzing the high frequency bugs in novice programs. In: Soloway E, Iyengar S (eds) Empirical studies of programmers. Ablex, Norwood, pp 230–251

    Google Scholar 

  • Stoeffler K, Rosen Y, von Davier A (2017) Exploring the measurement of collaborative problem solving using a human-agent educational game. In: Proceedings of the seventh international learning analytics & knowledge conference (LAK ‘17). ACM, New York, pp 570–571

    Google Scholar 

  • Vainio V, Sajaniemi J (2007) Factors in novice programmers’ poor tracing skills. SIGCSE Bull 39(3):236–240

    Google Scholar 

  • Vasconcelos J (2007) Basic strategy for algorithmic problem solving. http://www.cs.jhu.edu/~jorgev/cs106/ProblemSolving.html. Accessed 2 June 2010

  • Vírseda R d V, Orna EP, Berbis E, Guerrero S d L (2011) A logic teaching tool based on tableaux for verification and debugging of algorithms. In: Blackburn P, van Ditmarsch H, Soler-Toscano F, Manzano M (eds) Proceedings of the third international congress conference on tools for teaching logic (TICTTL’11). Springer, Berlin/Heidelberg, pp 239–248

    Google Scholar 

  • Von Davier AA, Halpin PF (2013) Collaborative problem solving and the assessment of cognitive skills: psychometric considerations. ETS Res Rep Ser 2013(2):1–36

    Google Scholar 

  • Wallingford E (1996) Toward a first course based on object-oriented patterns. In: Proceedings of the SIGCSE, pp 27–31

    Google Scholar 

  • Wirth N (1971) Program development by stepwise refinement. CACM 14(4):221–227. http://sunnyday.mit.edu/16.355/wirth-refinement.html. Accessed 13 Nov 2010

Download references

Author information

Authors and Affiliations

Authors

Rights and permissions

Reprints and permissions

Copyright information

© 2020 Springer Nature Switzerland AG

About this chapter

Check for updates. Verify currency and authenticity via CrossMark

Cite this chapter

Hazzan, O., Ragonis, N., Lapidot, T. (2020). Problem-Solving Strategies. In: Guide to Teaching Computer Science. Springer, Cham. https://doi.org/10.1007/978-3-030-39360-1_8

Download citation

  • DOI: https://doi.org/10.1007/978-3-030-39360-1_8

  • Published:

  • Publisher Name: Springer, Cham

  • Print ISBN: 978-3-030-39359-5

  • Online ISBN: 978-3-030-39360-1

  • eBook Packages: Computer ScienceComputer Science (R0)

Publish with us

Policies and ethics