Virtual (hosted by Stevens Institute of Technology)
November 7, 2020
November 7, 2020
November 7, 2020
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, D. B., & Baxter, G. P. (2020, November), Improving Pedagogy of Computer Programming Through Orthogonal Skill Isolation Paper presented at 2020 Fall ASEE Mid-Atlantic Section Meeting, Virtual (hosted by Stevens Institute of Technology). https://peer.asee.org/36049
ASEE holds the copyright on this document. It may be read by the public free of charge. Authors may archive their work on personal websites or in institutional repositories with the following citation: © 2020 American Society for Engineering Education. Other scholars may excerpt or quote from these materials with the same citation. When excerpting or quoting from Conference Proceedings, authors should, in addition to noting the ASEE copyright, list all the original authors and their institutions and name the host city of the conference. - Last updated April 1, 2015