During our first three research studies, we focused on supporting CS ed¬
ucation based on the principles of multi-sensory learning. In this chapter, we
analyse why teaching-learning computer programming is a challenging task and
why multi-sensory approaches could enhance this educational process. The
methods and instruments we designed cover the following areas: loop structures,
recursive algorithms, sorting strategies.
Since the early days of programming education, teachers have signalled
problems regarding students’ programming abilities. Researchers (cognitive
scientists, learning theorists, computer scientists, etc.) have identified specific
difficulties related to learning to program (Mead et al., 2006). For example, du
Boulay (1986) focused on identifying problematic areas and common mistakes
made in them. According to Spohrer and Soloway (1986), Winslow (1996), and
Soloway, Bonar, and Ehrlich (1983), most students have problems in combining
algorithmic structures into programs. Navrat (1994) emphasizes the abstractness
of the programming process as a possible factor contributing to students’ difficul¬
ties in learning to program. The common (disappointing) conclusions of several
studies in the early 2000s were: students cannot program, trace programs, or
design programs at acceptable levels (McCracken et al., 2001; Lister et al., 2004;
Eckerdal, McCartney, Moström, Ratcliffe, & Zander, 2006). Another conclusion
of that research period was that the problem is both long-standing and has an
international character.
Research on learning scientific concepts also yields insights into why under¬
standing complex information is difficult. Many scientific domains (also including
mathematics) deal with abstract concepts that students have difficulty compre¬
hending. Mastery of these concepts requires that students build flexible and run¬
nable mental models. Frequently, the scientific models describe phenomena for
which students have no real-life referents and incorporate invisible factors and
abstractions. This is particularly true in the case of learning algorithms, which is
also characterized by a high-level abstractness (Dede, Salzman, Loftin, & Sprague,
1999). The following chain of ideas confirms the multiple abstract character of
programming: the programming language itself can be considered as a first-level
abstraction, the computer program will be the second abstraction level, and the