Key points are not available for this paper at this time.
Abstract Computer architecture is a set of rules and methods that describe the functionality, organization, and implementation of computer systems. At the university level, undergraduate students are taught computer architecture so they are better able to: (1) debug their programs and (2) write more efficient programs given an understanding of how the computer works. Computational thinking skills including decomposition, abstraction, pattern recognition and algorithms are important to beginner programmers even at the university level. Students must be able to construct a logical sequence of operations to accomplish a task. However, when faced with a highly complex language designed for programming efficiency, not ease of learning (such as C++ or assembler), it is also vital to understand the exact semantics of each operation. Because C++ and assembler are so complicated, students often make mistakes largely due to gaps in their knowledge of the language. This paper focuses on strategies for teaching programming in complicated languages, but the pedagogy of less-complicated mainstream languages such as Java and Python can benefit from some of the same approaches. Research has shown that cognitive overload is one of the main barriers to learning programming. Even in a population of highly motivated engineering students, beginners are easily frustrated by the simplest of programs. Without an accurate mental model of how the computer actually works, beginners tend to use trial-and-error strategies often without success. Further, even when successful, these strategies do not generalize to other more complex programming tasks. To help students learn a complex programming language, we created a set of exercises for each of four critical programming skills: syntax, semantics of basic operations, contextual knowledge (i.e. fill in missing symbols in a incomplete program snippet), and debugging (identify and correct errors). We call this orthogonal skill isolation analogous to the term orthogonality as used in mathematics -- each of the individual skills is independent of the others and can be split into separate exercises, reducing the cognitive overload and frustration for each programming exercise. This does not eliminate the need to write whole programs, just as giving spelling and vocabulary quizzes does not eliminate the need to practice writing essays. Orthogonal skill isolation was implemented in a sophomore computer architecture course in which many students had little or no experience in C++ and/or assembler. After initially poor results on a midterm given prior to orthogonal skill isolation, dramatic improvements were demonstrated using orthogonal skills exercises to scaffold learning of each skill independently. Retest showed increased scores for all students.
Kruger et al. (Tue,) studied this question.