Research

Verificator: Educational Tool for Learning Programming

Categories
Published
of 19
All materials on our website are shared by users. If you have any questions about copyright issues, please report us to resolve them. We are always happy to assist you.
Related Documents
Share
Description
Informatics in Education, 2009, Vol. 8, No. 2, Institute of Mathematics and Informatics, Vilnius Verificator: Educational Tool for Learning Programming Danijel RADOŠEVIĆ, Tihomir OREHOVAČKI,
Transcript
Informatics in Education, 2009, Vol. 8, No. 2, Institute of Mathematics and Informatics, Vilnius Verificator: Educational Tool for Learning Programming Danijel RADOŠEVIĆ, Tihomir OREHOVAČKI, Alen LOVRENČIĆ Faculty of Organization and Informatics, University of Zagreb Pavlinska 2, Varaždin, Croatia {danijel.radosevic, tihomir.orehovacki, Received: July 2009 Abstract. The paper introduces Verificator, our learning programming interface aimed for learning programming in C++ at the university beginners level. In teaching programming some specific problems concerning the teaching itself as well as the organization of the teaching process need to be considered. One of the biggest problems is that students tend to adopt certain bad programming habits in their attempt to more easily deal with their examinations, such as trying to write programs without any syntax and logical checking. It is very hard to help them correct those errors once they are deeply rooted. Our students web questionnaire and its results show that the majority of problems in learning programming among our students arise from the gap between the understanding of programming language syntax and problem-solving algorithms. Verificator prevents students from making a lot of errors they are likely to make in learning programming and helps them to learn programming language syntax and adopt good programming habits. Keywords: learning programming, teaching software, Verificator. 1. Introduction The main goal of this paper is to introduce Verificator, our software tool aimed at helping students to more easily acquire programming skills, and improving the process of teaching programming at the university beginners level. Over the years, while teaching programming at the University of Zagreb, Faculty of Organization and Informatics in Varaždin, Croatia, we have faced some problems inherent in the teaching itself as well as those related to the organization of the teaching process. Students tend to adopt some bad programming habits in their attempt to pass the exam. There were cases in which students would learn big fragments of program code by rote, without any or with hardly any understanding. There were also students who wrote large program code without any syntax and logical testing, which produced a huge number of errors, discouraging the students from programming altogether. Our students web-form questionnaire was conducted in 2009 on a population of 182 respondents (students at the University of Zagreb, Faculty of Organization and Informatics, at the beginning of the spring semester, in the Programming I course). Some students had foreknowledge in programming from the Informatics 1 course (basics of Python), and some of them, from the secondary school and individual work. 262 D. Radošević, T. Orehovački, A. Lovrenčić The questions included students previous skills in programming and informatics in general, together with their current problems in acquiring programming skills. Students declared a lack of foreknowledge and being distracted by other duties in their studies to be the most common problems. However, some of the most severe problems, like the fear of programming, are mostly correlated to a lack of programming practice as well as the misunderstanding of basic programming concepts and programming language (in our case, C++) syntax. Therefore we introduced Verificator in our teaching process as a software tool which should motivate our students towards taking the right approach to acquiring programming skills by: preventing students from copying programs or parts of programs from their colleagues. All programs have to be typed (not copied or loaded) in Verificator, and contain the author s data, together with the checksum (which verifies that the program is really written in Verificator), pushing students to check their programs syntax after adding several lines of code. That prevents students from writing programs by rote and collecting a huge number of errors, helping students to find syntax and logical errors in their programs. There are tools for syntax analysis of programs (e.g., using of curly brackets and open program structures) and debugging tools (e.g., using breakpoints). Verificator works as a programming interface (editor with programming tools) which uses a standard C++ compiler (we used a gcc freeware compiler). 2. Related Work Programming is one of the fundamental skills to be adopted by students of information sciences at the end of the first year of their study. It is also expected that they will know basic programming concepts and have developed the algorithmic approach to solving problems. Basic programming concepts include the knowledge of control structures (sequence, selection, and iteration), mechanisms of aggregation (array, structure, union), pointers, functions, etc. When teaching programming, our aim is to teach novice students the basic principles of using programming concepts regardless of the programming language. However, goals are sometimes hard to meet in the real-life context. The research which was conducted at the multi-national level has shown that novice students, after completing and passing their courses in which they learn the basic concepts of programming, still encounter problems creating simple program solutions (Lister et al., 2004). This is probably accounted for by the fact that novice programmers do not have enough experience or skills regarding which programming constructs to use or where and how to use them. Furthermore, students are often faced with syntax errors. It is common for a small set of identical mistakes to occur regularly with all novice students (Spohrer and Soloway, 1986; Ben-Ari, 1998; McCracken et al., 2001). In order to help students in their first steps in learning programming, many visualization and animation software systems are developed. Verificator: Educational Tool for Learning Programming 263 Visualization tools can be very useful in teaching programming, primarily because their main purpose is to facilitate students understanding of code execution by guiding them through a series of animated techniques (Mulholland, 1998; Hundhausen et al., 2002). In addition, the results of several studies (Fowler et al., 2000; Cardellini, 2002, Thomas et al., 2002) showed that the majority of students (more than 75%) adopt new content best when it is presented visually. Thus, the use of a visualization tool in teaching programming allows students to create a mental model of program execution or its parts (Tudoreanu, 2003). However, Naps et al. (2002) emphasizes that visualization tools can be useful only if students are actively involved in the learning process. Owing to the above-mentioned advantages of visualization tools in the educational process, they have been actively used in the study and animation of algorithms (Garner, 2003; Costelloe, 2004) and data structures (Grissom et al., 2003; Laakso et al., 2005). Visualization tools can be divided into two groups: flowcharts and simulation tools. Flowcharts are usually a good choice of a visualization tool for teaching programming, primarily because they can present the algorithm as a mental model that a student with little or no prior knowledge can easily understand. By using flowcharts, students will easily perceive the program flow and later, when they try to independently solve problems, this can be of great benefit. However, whereas flowcharts can be useful for visualization and modeling of simple programming concepts, they are not suitable for large and complex applications (Scott et al., 2006). From among the set of visual programming environments based on a flowchart primarily intended for teaching programming, the following should be pointed out: Rapid Algorithmic Prototyping Tool for Ordered Reasoning (RAPTOR; Carlisle et al., 2004), Flow Chart Interpreter (FCI; Atanasova and Hristova, 2003) and Flint (Crews, 2001). All the mentioned tools enable students to create algorithms through a combination of basic graphical symbols. In addition, studies have shown that the average grades of students using visualization development environments based on a flowchart were significantly higher than those who learned programming by using traditional development environments (Crews, 2001; Carlisle et al., 2004). The second group consists of visualization simulation tools. The general approach to animation of algorithms defined in procedural higher level languages began with the BALSA system (Brown and Sedgewick, 1984) after which TANGO (Stasko, 1990) and Polka (Stasko and Kraemer, 1993) systems were developed at the Georgia Institute of Technology. Their main purpose was the teaching of dynamic behavior of complex algorithms. However, those systems were not very successful, primarily because their animation design was more appropriate for experts in the field than for novice students. At the University of Helsinki, Jorma Tarhio and Erkki Sutinen developed Jeliot (Haajanen et al., 1997), which was focused on the animation of programs. The results of the empirical experiment correlated with the use of the Jeliot tool in teaching programming have shown that the students motivation for learning increased, but also that its interface is too complicated and confusing to novice students (Latte et al., 2000). Therefore, Jeliot 2000 was developed and exclusively designed for beginners. Jeliot 2000 is experimentally used for teaching programming in high schools, where the results of a survey showed that students who used Jeliot 2000 software better understand programming concepts and have a better 264 D. Radošević, T. Orehovački, A. Lovrenčić developed vocabulary than the control group (Ben-Bassat Levy et al., 2001). The latest version of Jeliot is Jeliot 3, developed at the University of Joensuu. Its primary purpose is monitoring the performance of Java code, and thus, easier understanding of control structures and finding errors in the code (Kannusmäki et al., 2004). One of the most successful visualization simulation software packages is certainly Karel, The Robot (Pattis, 1981). It is a tool in which a student controls a robot in a virtual microworld with four basic actions and thus learns basic programming constructs. Karel is the software that facilitates novice students to learn the Pascal programming language and has been used for teaching programming in schools and universities for years. With the development of object-oriented paradigm, changes in the programming languages which were used in teaching programming also occurred. Therefore it is not surprising that Karel has had several different versions: Karel++ (C++ version; Bergin et al., 1997) and Guido van Robot (Python version; Elkner, 2004) but none of them has achieved the same success as their original. It is assumed that the Alice programming environment is the main successor of Karel. It is a 3-D Interactive Graphics Programming Environment that allows scripting and modeling prototype objects that a virtual simulation world is made of (Pausch et al., 1995). In simulations, students can use simple scripts to control the appearance and behavior of objects. During script execution, visualization allows students to establish correlation between the program and the animated action of the complex and thus understand how basic programming constructs operate. TRAKLA2 is a visual environment that allows the assessment of simulation of algorithms and data structures (Korhonen et al., 2003). VILLE is a visual tool that supports Java, C ++ and pseudo programming languages (Kaila et al., 2009). Programming examples can be simultaneously displayed in two programming languages, and thus show different implementations of programming concepts. In addition, VILLE allows monitoring of the execution of the program and thus of the result of changes in the output arising from changes in the value of variables. Finally, we should by all means mention BlueJ as an example of a static visualization tool whose characteristics are a directly parameterized call of the method and automatic generation of applet skeleton. Its basic purpose is acquiring object-oriented concepts in the Java programming language (Kölling et al., 2003). From all the aforementioned examples it can be concluded that visualization tools are very useful in teaching programming to novice students, primarily because they can show and explain programming concepts in a very simple way. However, their main disadvantage is that the majority of them are focused on only one programming language and the simplest program constructs. Furthermore, the aim of teaching programming is that students understand basic programming concepts and that they become able to apply those concepts during the problem solving process, regardless of implemented programming language. Unfortunately, most of these tools are too focused on the visualization component, and less on learning the syntax and semantics of the selected programming language. Therefore, we believe that the visualization tools are more appropriate for teaching programming in elementary schools, but not at universities where the student needs to learn algorithmic approach to solve given problems. Finally, the results of research that has followed the use of most of the aforementioned tools have not revealed any significantly better results and students still experience the same difficulties when learning basic Verificator: Educational Tool for Learning Programming 265 programming (Milne and Rowe, 2002; Lahtinen et al., 2005; Butler and Morgan, 2007). Therefore we decided to develop Verificator, an environment in which students will learn strategies they will use in solving problems and developing the necessary concepts and skills to create computer programs. 3. Our Approach to Teaching Programming There are several problems that we have to deal with in the process of teaching programming. The most important one is a huge disproportion in the students foreknowledge. Programming is an obligatory basic course that students take in the second semester. Their previous knowledge and techniques highly depend on their previous education, which varies from school to school. For many of them the course is their first encounter with programming, so they do not have any experience doing it. On the other hand, there are quite a few students with moderate, or even good programming experience. This problem can be traced back to the organization of programming courses in primary and secondary school. In primary school, which has the same curriculum in the whole country, informatics is not an obligatory subject, although most pupils take it. Even so, these courses teach only the basics of computer usage, and do not deal with any programming. On the other hand, best pupils take part in programming competitions and acquire a moderate knowledge of programming techniques and programming languages Basic and Logo. Most secondary school informatics courses are optional as well. To make all students interested in an obligatory programming course, it is necessary to equalize their previous knowledge as much as possible. To do that we introduced an optional zero level programming course in which students are not awarded any ECTS credits. It was introduced as a free of charge winter school of programming. However, the number of attendants turned out to be a problem. Namely, more than 80% of our students attended this winter school. As a result, owing to such a high percentage of students interested in the preliminary programming school, we decided to change the way of organizing it and include it in the obligatory basic course of Informatics held in the first semester. The second dilemma we had to solve was the choice of the programming language to be used in the programming course. The language to be used has to be widely acknowledged and used in practice, easy to learn and needs to contain all the important concepts of programming languages. As we are talking about a basic programming course, it is obvious that any functional or logic programming language will be excluded. These languages require an understanding and usage of advanced programming strategies, such as recursion and backtracking method, and are therefore not appropriate for a basic course. The three main procedural language lines nowadays are Basic-like, Pascal-like and C- like languages. There is a significant difference between these three lines. While C-like and Pascal-like languages are more frequently used by professionals, languages from the Basic-like language line do not contain many important language concepts and are more appropriate for informative level courses. Furthermore, we deliver our programming course to two different types of students. The first of them are students enrolled in 266 D. Radošević, T. Orehovački, A. Lovrenčić the undergraduate university study of information and business systems. Although there are two distinct study programs at this level information systems and business systems their first two semesters are identical, so the students in both programs have to be treated as a single group. The second group is students enrolled in the vocational study of information technology usage in business systems. The students in the latter group have to get only informative knowledge of programming, so Visual Basic is used in their course. The first group is more interesting because the programming knowledge they acquire is important for several courses they attend further on in the study. The knowledge of programming is thus crucial for their future education as well as for their careers after graduation. Consequently, the approach to this group of students should be more systematic and serious. Therefore, Visual Basic is not a good choice for them. In choosing between C-like and Pascal-like languages we were guided by three different criteria: the popularity of the language in practice, the availability of all important programming concepts, popular OS platform support. Unfortunately, there is no data about the usage of programming languages in Europe, so we used U.S. data, namely, the TIOBE Programming Community Index of programming language usage. A great dominance of C-like languages in current practiceis shown in (TIOBE, 2009) and (Lovrenčić et al., 2009). Four main C-like languages (C, C++, Java and C#) take up more than 50% of the programming code in USA. On the other hand, three languages from the Pascal-like line of languages (Delphi, PL/SQL and Pascal) accounted for less than 4%. In this situation, the C-like line of languages was an easy choice. The narrowing of one language was a slightly harder task. It is obvious that Java, as the most widely-used language, was a very serious candidate. On the other hand, Java has some drawbacks that make it inappropriate for the course. The first problem with Java is the fact that it requires Java Virtual Machine. It is an advanced concept that makes Java the most portable language, although it also makes the basic concepts of compiling and interpreting of the code more difficult to explain. The second problem with Java is garbage collection, another advanced concept that makes Java hard to understand for beginners. When it comes to C#, its popularity is relatively small and decreasing, although, with its C syntax and Pascal semantics, it would be the best choice. Another problem with C# is its strong connection to MS Windows, and the absence of serious open-source compilers or interpreters for it. So, C and C++ languages remain candidates. We decided to choose C++, regardless of its smaller popularity in comparison with C, because it is object-oriented, which makes Java concepts easier to teach in the aforementioned courses. After choosing the programming language, we had to organize the course. In previous years the main organizational problem had been the poo
Search
Related Search
We Need Your Support
Thank you for visiting our website and your interest in our free products and services. We are nonprofit website to share and download documents. To the running of this website, we need your help to support us.

Thanks to everyone for your continued support.

No, Thanks