Skip to main content

2008 | Buch

Reflections on the Teaching of Programming

Methods and Implementations

herausgegeben von: Jens Bennedsen, Michael E. Caspersen, Michael Kölling

Verlag: Springer Berlin Heidelberg

Buchreihe : Lecture Notes in Computer Science

insite
SUCHEN

Inhaltsverzeichnis

Frontmatter

Issues in Introductory Programming Courses

Frontmatter
Introduction to Part I Issues in Introductory Programming Courses
Abstract
Learning to program is notoriously difficult. Since the early 1970s, teaching programming to novices has been considered a big challenge and —according to the number of people attending conferences on programming— it still seems to be [Dijkstra, 1969; Gries, 1974; McCracken et al., 2001; Robins et al., 2003; Soloway and Spohrer, 1988; Wegner et al.,1996]. Indeed, it is considered one of seven grand challenges in computing education [Mcgettrick et al., 2005]. Teaching introductory programming at university level has been the basis for many lively discussions among computer science teachers [Astrachan et al., 2005; Bailie et al., 2003; Bruce, 2005; SIGCSE-members, 2005], and for a substantial number of articles (e.g., searching “CS1” at ACM’s digital library gives 1402 hits and searching “introductory programming” gives 62,654 —[search done December 20, 2007]). More official approaches to the design of computing curricula have also been taken —the most well know and influential being the series of curricula recommendations made by the ACM (American Association for the Computing Machinery ) and IEEE (Institute of Electrical and Electronics Engineers, Inc).
Jens Bennedsen
Exposing the Programming Process
Abstract
One of the most important goals of an introductory programming course is that the students learn a systematic approach to the development of computer programs. Revealing the programming process is an important part of this. However, textbooks do not address the issue —probably because the textbook medium is static and, therefore, ill-suited to expose the process of programming. We have found that process recordings in the form of captured, narrated programming sessions are a simple, cheap, and efficient way of providing the revelation. We identify seven different elements of the programming process for which process recordings are a valuable communication media in order to enhance the learning process. Student feedback indicates both high learning outcome and superior learning potential compared to traditional classroom teaching.
Jens Bennedsen, Michael E. Caspersen
Apprentice-Based Learning Via Integrated Lectures and Assignments
Abstract
Various methods have been proposed in the past to improve student learning by introducing new styles of working with assignments. These include problem-based learning, the use of case studies and apprenticeship. In most courses, however, these proposals have not resulted in a widespread, significant change of teaching methods. Most institutions still use a traditional lecture/lab class approach with a strong separation of tasks between them.
In this chapter, we propose an approach to teaching introductory programming in Java that integrates assignments and lectures, using elements of all three approaches mentioned above. In addition, we show how the BlueJ interactive programming environment can be used to provide the type of support that has hitherto hindered the widespread take-up of these approaches. We arrive at a teaching method that is motivating, effective and relatively easy to put into practice.
Michael Kölling, David J. Barnes
Experiences with Functional Programming in an Introductory Curriculum
Abstract
We present the rationale behind a first semester course on functional programming. We describe the design of the course, emphasizing programming as a modelling discipline, as well as the curriculum it was a part of. In particular, we discuss our experiences concerning the transition from functional programming to object-oriented programming. We also discuss and compare this functional-first approach to the objects-first approach of our recently introduced curriculum.
Michael R. Hansen, Jens Thyge Kristensen
Learning Programming with the PBL Method — Experiences on PBL Cases and Tutoring
Abstract
In the seven steps method of problem-based learning (PBL), students work in small groups and learn about the problem domain by trying to make sense of complex real-world cases. We have been using the seven steps method for several years to organize the learning in an introductory programming course. In this chapter, we outline the evolution and the arrangements of the course, and give examples of possible cases. The requirements for PBL cases are analyzed, as it is not straightforward to identify good cases in the area of programming. The analysis focuses on the concept of “open-ended, real-world problems” and its interpretation in the domain of programming. We relate the cases to different aspects of programming skills and present student feedback on the cases. We also report about experiments with tutorless PBL that were carried out to see if the method could scale up to courses with large numbers of students. The results were not encouraging. Student questionnaires reveal possible reasons. Firstly, when a tutor is not present, the students become insecure if they are progressing in a fruitful direction and thus, they become frustrated and lose motivation. Secondly, the behaviour of a group may deteriorate (i.e., become unbalanced or turn into irrelevant chatting).
Esko Nuutila, Seppo Törmä, Päivi Kinnunen, Lauri Malmi
Using On-Line Tutorials in Introductory IT Courses
Abstract
Many universities offer introductory IT courses covering an introduction to programming and the use of applications such as spreadsheets, presentation tools, word processing and databases. Teaching such introductory IT courses is, for many Computer Science lecturers, an extremely difficult task. The pedagogical challenges include institutional setup, reduced teaching resources, the perceived ease of IT, a growing number of students, a reduced student effort and a growing motivational gap. Although applications have become easier to use, they have also become more advanced with a growing list of advanced features. Similarly, programming technology has improved with new programming languages such as Java, but the fundamental concept of programming is still difficult to grasp for many students. This chapter reports on two pedagogical experiments using on-line tutorials in combination with lectures and hands-on exercises. Although it is still the early days, the results seem to suggest that the approach could contribute to establishing a best -practice for courses of this nature. The approach seems especially suited for motivating and activating the growing number of students whose will to learn is low, the so-called “minimalist students”.
Bent Thomsen

Introducing Object-Oriented Programming

Frontmatter
Introduction to Part II Introducing Object-Oriented Programming
Abstract
The practice of teaching programming at universities, colleges and high schools went through a major change roughly in the mid 1990s: The teaching of objectorientation in introductory courses slowly became mainstream. Fairly soon, the Object First or Objects Early school of thought was formulated, stating that teaching object orientation by discussing objects from the very start is a good thing.
Michael E. Caspersen
Transitioning to OOP/Java — A Never Ending Story
Abstract
Changing the introductory programming course from a traditional imperative model to an object-oriented model is not simply a matter of changing compilers and syntax. It requires a profound change in course materials and teaching approach to be successful. We have been working with this transition for almost ten years and have realized that teaching object-oriented programming is not as simple or “natural” as some proponents claim. In fact, it has proven difficult to convey to the students the advantages and methodologies associated with object-oriented programming. To help ourselves and others in a transition like this we have developed a number of “course design principles” as well as teaching methods and examples that have proven to have positive influence on student learning outcome.
Jürgen Börstler, Marie Nordström, Lena Kallin Westin, Jan-Erik Moström, Johan Eliasson
Using BlueJ to Introduce Programming
Abstract
This chapter describes the BlueJ system. The discussion includes both the software tool aspects of BlueJ, as well as pedagogical approaches that should be considered when teaching with BlueJ. Pedagogical changes that have been suggested go deeper than merely introducing a new software tool: they include changes to a more software-engineering-oriented course, removal of considerable chunks of traditional material, and the introduction of new skills and approaches. We discuss experiences of using the system over eight years at various institutions, and discuss successes and failures as seen retrospectively today.
Michael Kölling
Model-Driven Programming
Abstract
Conceptual modelling is the defining characteristic of object-orientation and provides a unifying perspective and a pedagogical approach focusing upon the modelling aspects of object-orientation. Reinforcing conceptual modelling as a basis for CS1 provides a course structure to integrate the core elements from a conceptual framework for object-orientation and a systematic approach to programming. Both of these are helpful to newcomers. The progression of the course is defined by the growing complexity of the conceptual model, which is to be implemented. The focus is not on conceptual modelling per se, but on the use of conceptual models as a structuring mechanism and a guide for the implementation. In this article we discuss different ways to structure an introductory programming course and give concrete examples on how a course where the complexity of the conceptual model is defining the structure.
Jens Bennedsen, Michael Caspersen
CS1: Getting Started
Abstract
The Logo programming language implements a virtual drawing machine —the turtle machine. The turtle machine is well-known for giving students an intuitive understanding of fundamental, procedural programming principles. In this chapter we present our experiences with resurrecting the Logo turtle in a new object-oriented way and using it in an introductory object-oriented programming course. While, at the outset, we wanted to achieve the same qualities as the original turtle (understanding of state, control flow, instructions), we realized that the concept of turtles is well-suited for teaching a whole range of fundamental principles. We have successfully used turtles to give students an intuitive understanding of central object-oriented concepts and principles such as object, class, message passing, behaviour, object identification, inheritance, and recursion. Finally, we have used turtles to show students the use of abstraction in practice because the turtle package, at a late stage in the course, becomes a handy graphics library used in a context otherwise unrelated to the turtles.
Michael E. Caspersen, Henrik Bærbak Christensen

Teaching Software Engineering Issues

Frontmatter
Introduction to Part III Teaching Software Engineering Issues
Abstract
The previous sections of this book covered mostly topics related to early parts of programming education, such as introductory courses and teaching of object-orientation to beginners. Now, it is time to move on.
This section discusses issues that may be touched on in introductory courses, but are more commonly covered in intermediate or in advanced courses.
Michael Kölling
Experiences with a Focus on Testing in Teaching
Abstract
Software of high quality is a major concern in teaching programming: simply making any program that fulfills the requirements is not enough. Yet the way teachers often state exercises tends to make the students focus more on functionality requirements and deadlines than on keeping the program quality high. This chapter discusses some concrete teaching guidelines that help in keeping the learning focus on quality and reports on our experiences in applying them. It furthermore presents an important observation relating to the use of test-driven development as a process that focus on high quality, namely that it tend to improve also the flexibility and reusability of the production code. This issue is presented and argued by a concrete development example.
Henrik Bærbak Christensen
Teaching Software Development Using Extreme Programming
Abstract
Software development is a complex area and extensive practice and reflection is required in order to obtain a good understanding of the different tasks involved in going from idea to deliverable software. To help in providing this understanding, we have developed a team programming course based on extreme programming and a coaching course. We discuss how these courses affect the curriculum, the design of the courses, and our experience from running them for four years, involving over 100 students per year. We also discuss how we have used the extreme programming approach to support the learning cycle through the use of iterative learning, peer learning and a fixed-time budget.
Görel Hedin, Lars Bendix, Boris Magnusson
Frameworks in Teaching
Abstract
Software reuse is important in modern software engineering to ensure high quality software while keeping cost down. Software reuse is therefore an important topic in teaching. This chapter discusses issues relating to teaching object-oriented frameworks that represent a central technique for software reuse. We present concrete techniques for teaching the topic at both introductory and advanced programming level and convey our experiences. At the introductory level we discuss a simple yet powerful framework, Presenter, that serves as a first introduction to programming using frameworks as well as a gentle introduction to the more complex topic of graphical user interface frameworks like Java AWT and Swing. At the advanced level we discuss a complex framework, JHotDraw, that both serves to demonstrate concepts and techniques used in complex frameworks, as well as demonstrate how design patterns are combined in object-oriented frameworks.
Michael E. Caspersen, Henrik Bærbak Christensen

Assessment

Frontmatter
Introduction to Part IV Assessment
Abstract
The last section of this book is concerned with another difficult element of programming teaching at educational institutions, that of assessment.
Assessing programming-related courses has always been difficult. The difficulties are caused by a wide variety of reasons because some are intrinsic to the subject and some are caused by aspects of the course.
Michael Kölling
Active Learning and Examination Methods in a Data Structures and Algorithms Course
Abstract
In this chapter, the implementation of two courses on data structures and algorithms at the Helsinki University of Technology is presented. The courses are based on the constructivist learning paradigm in which the students participate actively and feedback is provided on their performance despite the very large number of enrolled students each year. Moreover, an Internet-based learning environment is an integral part of the larger course because it provides an opportunity to apply active learning methods. Examples of the active learning methods are algorithm simulations exercises and analysis of algorithms for small-scale problems. In addition, students design algorithms and solutions for non-trivial practical applications. Moreover, in the more advanced course they carry out a small-scale research project to determine the empirical efficiency of given algorithms and the corresponding data structures.
Lauri Malmi, Ari Korhonen
Mini Project Programming Exams
Abstract
A number of different types of final programming exams used or considered at the Department of Computer Science, Aalborg University, are identified and analyzed. Based on this analysis, a new type of programming exam is introduced called a Mini Project Programming (MIP) exam. MIP is a group-based programming assignment that is intended as a medium-scale programming effort followed by a final oral exam. MIP is characterized and compared to existing types of final programming exams by use of a number of independent criteria. The chapter motivates the MIP approach and reports on our experience over four years. The MIP exam is a compromise between (1) a long problem-based project exam and (2) a short oral or written programming exam. It is concluded that the strengths of MIP are the high degree of realism in the exam assignment and comprehensiveness relative to the course syllabus. The main challenge of MIP is how to detect fraud.
Kurt Nørmark, Lone Leth Thomsen, Kristian Torp
Backmatter
Metadaten
Titel
Reflections on the Teaching of Programming
herausgegeben von
Jens Bennedsen
Michael E. Caspersen
Michael Kölling
Copyright-Jahr
2008
Verlag
Springer Berlin Heidelberg
Electronic ISBN
978-3-540-77934-6
Print ISBN
978-3-540-77933-9
DOI
https://doi.org/10.1007/978-3-540-77934-6

Premium Partner