Software Quality and Security in Teachers' and Students' Codes When Learning a New Programming Language

Introduction In its very essence, the (cognitive) constructivist theory argues that knowledge and meaning are generated from interactions between people's experiences and ideas, that is, people construct their own understanding of the world (also, of themselves) through experiencing things and reflecting upon these experiences (cf. Perkins, 1999; Phillips, 1995; Piaget, 2013). The constructivist theory has drawn huge attention in the educational theory and practice, and many pedagogical terms still in use today have been developed based on its philosophical roots, e.g., problem-based learning, situated learning, teacher as a coacher, learner-centred education (cf. Duffy & Cunningham, 1996; Richardson, 2003). Of a special interest to the current work is the development of many educational programming languages as part of the constructivism-as-pedagogy wave; the use of computer-based learning to complement Piaget's constructivism is mostly attributed to Seymour Papert (1980). Since then, "learning to program" has become by many a synonym to "learning" per se (cf. Mayer, Dyck, & Vilberg, 1986; Soloway, 1986) and "computational thinking" is often considered as key to learning (Barr & Stephenson, 2011; Gazdial, 2008; Wing, 2006). Still today, many believe that learning to code should be an integral part of any school curriculum (1); additionally, lifelong computer training programs often include--along with more traditional modules that teach how to work with popular software (like Microsoft Word or a Web browser)--modules that teach how to code (e.g., Seals, Clanton, Agarwal, Doswell, & Thomas, 2008). However, learning to program might be perceived as a Sisyphean task, as new programming languages are often being introduced and adopted by different communities. In other words, in practice, learning to program should not be considered as a one-time experience, but rather anyone involved with programming must be a true lifelong learner. Indeed, in recent years attention has been given to the preparation of computer science students as lifelong learners, with the presentation of various teaching methods--like problem-based learning, intentional learning environment, and collaborative learning--aimed on developing their capacity for self-direction and metacognitive awareness (Cheong, 2013; Dunlap & Grabinger, 2003). One prominent group of such lifelong programming learners are computer science teachers who often need to adapt their curriculum based on the changing popularity of programming languages. In many cases, teachers from within the system are quickly trained to be acquainted with the new curriculum. This scenario might lead to teachers teach material with which they are not fully familiar and in which they are not fully confident (Lapidot, 2004; Thompson, Bell, Andreae, & Robins, 2013). Another concern in such cases, taking into consideration that today's young generation has easy access to vast amounts of information, is that students will progress with the new material faster than their recently-trained teachers can catch-up. This is often a result of teachers' lack of knowledge of current trends in the field and of the state-of-the-art technology, or of their difficulty to quickly adapt new technologies while their students already master them (Kordaki, 2013; Prensky, 2007). A striking example encompassing these two issues is the adaption into schools' and universities' curricula of cyber security (also known as computer security or IT security), that is, the practice of protecting computer systems from unauthorized access, change, or destruction. This step might seem only natural, as cyber security has caught much attention of governments and industries (cf., Andrijcic & Horowitz, 2006; Cavelty, 2008; Rowe & Gallaher, 2006; Stolfo et al., 2008). Furthermore, cybersecurity may be seen as a bridge between the two classic domains of CS (software and hardware), hence requiring a new point of view on the practice of programming (Lukowiak, Radziszowski, Vallino, & Wood, 2014). …