Educators' reasons for asking students to program have changed since the early days of Logo and Basic [Solomon, 1986 #262]. Claims that programming alone might improve problem-solving skills or other general metacognitive skills have gone mostly unsupported [Palumbo, 1990 #182]. Today, education researchers are more interested in programming as a medium, as a way of thinking about and exploring disciplines other than computer science [diSessa, 1986 #21; diSessa, 1991 #24; Soloway, 1993 #561]. We are still interested in having students learn about programming, because we view programming as an important skill and as a medium of communication. But now we are even more interested in having students learn through programming because we recognize that programming is a good lever for understanding many domains.Harel & Papert [Harel, 1990 #108] are referring to this notion of programming-as-leverage when they write that programming is reflexive with other domains, meaning that learning the combination of programming and another domain can be easier than learning each separately. A synergy is created when concepts in another domain are easily reflected in the programming medium. In this case, learning the programming means learning to construct representations for the concepts, which in turn supports learning the concepts and provides motivation for learning to program.What hasn't changed is that programming is still a hard activity and a difficult skill to learn. Few students will understand programming well enough after completing their first programming courses to be able to write simple programs, let alone use programming as leverage for understanding other domains [Soloway, 1982 #263; Pea, 1986 #146]. The most critical reasons that students have difficult with programming seem to be the following:• Assembling programs is hard. Programming languages have only a few components which are combined in many different ways, and learning to understand the semantic results of different combinations is complex [Schneiderman, 1977 #235]. Understanding how to combine programs to achieve particular goals is a challenge [Spohrer, 1985 #271; Spohrer, 1989 #273].• Syntax is complex. When students try to combine elements, syntax gets confused, which leads to students battling syntax problems as they struggle to understand semantic ones [Perkins, 1986 #196; Johnson, 1985 #311]. When the syntax problems are alleviated, students can focus on the semantic ones [Hohmann, 1992 #260; Soloway, 1993 #267; Anderson, 1989 #479; Garlan, 1984 #583].• Students lack an understanding of computational process. Many students do not understand how interpretation of traditional computer languages works, e.g., where does control flow and how do variables get updated [DuBoulay, 1989 #67]. If students are presented with a simplified or clearer description of the process, they can understand their programs more easily and perform more successfully [diSessa, 1985 #306; diSessa, 1991 #406].
2The challenge in using programming to learn other domains is ...