Aim/Purpose: The teaching of appropriate problem-solving techniques to novice learners in undergraduate software development education is often poorly defined when compared to the delivery of programming techniques. Given the global need for qualified designers of information technology, the purpose of this research is to produce a foundational template for an educational software development methodology grounded in the established literature. This template can be used by third-level educators and researchers to develop robust educational methodologies to cultivate structured problem solving and software development habits in their students while systematically teaching the intricacies of software creation. Background: While software development methodologies are a standard approach to structured and traceable problem solving in commercial software development, educational methodologies for inexperienced learners remain a neglected area of research due to their assumption of prior programming knowledge. This research aims to address this deficit by conducting an integrative review to produce a template for such a methodology. Methodology: An integrative review was conducted on the key components of Teaching Software Development Education, Problem Solving, Threshold Concepts, and Computational Thinking. Systematic reviews were conducted on Computational Thinking and Software Development Education by employing the Preferred Reporting Items for Systematic Reviews and Meta-Analyses (PRISMA) process. Narrative reviews were conducted on Problem Solving and Threshold Concepts. Contribution: This research provides a comprehensive analysis of problem solving, software development education, computational thinking, and threshold concepts in computing in the context of undergraduate software development education. It also synthesizes review findings from these four areas and combines them to form a research-based foundational template methodology for use by educators and researchers interested in software development undergraduate education. Findings: This review identifies seven skills and four concepts required by novice learners. The skills include the ability to perform abstraction, data representation, decomposition, evaluation, mental modeling, pattern recognition, and writing algorithms. The concepts include state and sequential flow, non-sequential flow control, modularity, and object interaction. The teaching of these skills and concepts is combined into a spiral learning framework and is joined by four development stages to guide software problem solving: understanding the problem, breaking into tasks, designing, coding, testing, and integrating, and final evaluation and reflection. This produces the principal finding, which is a research-based foundational template for educational software development methodologies. Recommendations for Practitioners: Focusing introductory undergraduate computing courses on a programming syllabus without giving adequate support to problem solving may hinder students in their attainment of development skills. Therefore, providing a structured methodology is necessary as it equips students with essential problem-solving skills and ensures they develop good development practices from the start, which is crucial to ensuring undergraduate success in their studies and beyond. Recommendation for Researchers: The creation of educational software development methodologies with tool support is an under-researched area in undergraduate education. The template produced by this research can serve as a foundational conceptual model for researchers to create concrete tools to better support computing undergraduates. Impact on Society: Improving the educational value and experience of software development undergraduates is crucial for society once they graduate. They drive innovation and economic growth by creating new technologies, improving efficiency in various industries, and solving complex problems. Future Research: Future research should concentrate on using the template produced by this research to create a concrete educational methodology adapted to suit a specific programming paradigm, with an associated learning tool that can be used with first-year computing undergraduates.
Read full abstract