On the Design and Development of a UML-Based Visual Environment for Novice Programmers

Background Traditionally, novice programmers have encountered difficulties in learning to program in several different areas, including: the comprehension of fundamental computing concepts, the appropriate decomposition of the problem into easily managed sub-problems, design and implementation of a working solution, and the debugging of the resulting program. Research in the areas psychology of programming, human-computer interaction, cognition, and pedagogy have identified and classified a number of these problems that novices face when learning to program. Bladek and Deek (2005) note that novice difficulties can be adequately classified into the following categories: pedagogical roots, psychological roots, programming language paradigms, programming language intricacies, debugging skills, and external influences. An ineffective pedagogy in learning programming is one of the most vital factors that will influence how a novice programmer will perform in subsequent experiences. Liffick and Aiken (1996) observe that beginning programmers may stumble in their understanding of a new concept not because it is difficult, but because it is depending on an earlier concept. Another contributor to an ineffective pedagogy can be attributed to the lack of adequate problem solving skills. Suchan and Smith (1997) note that as a result, novice programmers begin to write programs but generate code without any planning or organized thought process. Consequently, Pane and Myers (1996), as well as Olson, Catrambone, and Soloway (1987) collectively observe that general problem solving strategies should be explicitly acquired along with program development skills. A great number of novice difficulties have been classified as having psychological roots. With computers, the manner in which information is represented and manipulated causes a challenge to its understanding. As a result, novices lack an adequate mental model of the machine's internals and how it operates. In addition, some of the programming concepts, such as recursion, are abstract in nature, having no real-world counterpart for the beginner to refer to. Novices lack the ability to perform effective sub-goal decomposition. Baile (1991) notes that decomposing while coding is the primary factor that influences a programmer's ability to perform effective sub-goal decomposition. In addition, Pane and Myers (1996), as well as Bonar and Soloway (1985) both observe that when novices lack an appropriate plan, they tend to invent one using pre-programmed knowledge acquired through their real-world experiences. Deek, McHugh, and Hiltz (2000), however, conclude that these plans are often inappropriate because they do not take into account computer limitations. Program comprehension is inherently difficult for novices. Ramalingam and Wiedenbeck (1997) define program comprehension as the process that facilitates the understanding of an existing program. The primary focus of beginning programming is typically on the development of programming solutions to problem statements. Very little attention is given to comprehension skills for programs that have already been written, and more importantly how these programs can possibly be modified and/or applied to other similar problems. Defect discovery strategies, which play a critical role in real-world program maintenance, are almost always ignored. Along the lines of program comprehension is the difficulties novices face in the debugging of implemented programs. Very rarely does a program work perfectly upon the first execution attempt. Therefore, debugging proves to be an essential skill that a novice programmer must develop. Gugerty and Olson (1986) note that much of the skills for debugging must be learned through the experience of writing programs and since novices lack adequate program comprehension skills, errors are often inadvertently injected into programs while debugging. Consequently, Satratzemi, Dagdilelis, and Evageledis (2001) observe that, due to this lack of understanding, beginning programmers will repeatedly attempt to correct their errors with an understanding of the meaning of the error message produced by the compiler. …