International Conference on Computer Systems and Technologies - CompSysTech’16 Modula-2 versus Java as the first programming language: Evaluation of students’ performance Miloš Savić, Mirjana Ivanović, Miloš Radovanović, Zoran Budimac Abstract: The choice of the first programming language in computer science curricula is a complex multi-faceted issue that needs to be addressed from multiple points of view. In this paper we adopt the perspective of the teacher, and after surveying factors such as language features, programming paradigms, curricular concerns and students’ perceptions, we present extended results of the empirical assessment of student performance at our introductory programming course, where a switch was recently made from Modula-2 to Java, keeping the course structurally unchanged. Our main aim is to investigate the impact of the first programming language to the acquisition of essential programming concepts, techniques and principles. New results involving students’ high-school GPA and performance at other courses, backed up by thorough statistical analysis, remove some potential sources of bias regarding students’ learning and cognitive abilities, reaffirming the overall conclusion that the programming language used in the introductory programming course does not have a deep impact on the acquisition of essential concepts, techniques and principles of the imperative programming style. Key words: Introductory programming course, change of the first programming language, students’ performance, empirical evaluation. INTRODUCTION The choice of the first programming language to learn, as a sort of a “mother tongue,” is wrought with different dilemmas, opinions and influences. There are several seemingly mutually opposing forces at play: preference for “educational” and didactically suitable languages vs. “real” languages and industry trends, perceptions of teachers vs. perceptions of students (vs. perceptions of IT professionals, as well), emphasis on learning “principles” that can later be extended vs. “hands-on” skills, etc. In the past, the problem of first-language choice was discussed at various levels, including language features [3], curricular issues and pedagogy [8], programming paradigms [15], conceptual bugs [4], various wide-ranging criteria [7, 6, 10], students’ perceptions [13], and empirical assessment of student performance [9]. At our department, the introductory programming course for students of computer science, held in the first semester, emphasizes the imperative programming style, while object-orientation (OO) is studied in following semesters. The introductory course covers the basic concepts of primitive data types, statements and control structures, decomposition of a program into procedures, recursion, and abstract data types, with decomposition favouring the separation of data and algorithms into distinct units (data types, and procedures that input data through parameters). Several decades of experience in teaching the basic concepts of imperative programming formed our opinion that good educational programming languages, such as those designed by Niklaus Wirth, are crucial for explaining the aforementioned concepts to novice students. Indeed, up to (and including) school year 2013/14, our introductory programming course was based on the programming language Modula-2. However, due to pressure to change the language used in the introductory course, from 2014/15 we switched to Java, but kept using the imperative-first approach (object-oriented design is relatively briefly introduced at the end of the course).