This article describes a new teaching method to object-oriented design and programming motivated by principles found in the constructivist epistemology. The need for developing a new teaching method arose when we realized that the predominant model of instruction in computer science education - the objectivist model of learning - was inadequate for most students to learn object-oriented concepts, because it does not engage the mind appropriately to successfully tackle the challenges of the object-oriented approach. Learning the object-oriented approach is indeed difficult for most novice students, mostly because it is more abstract than the procedural approach. Moreover it requires new ways of thinking and more depth to grasp, particularly with regard to the analysis and design activities prior to program coding, and when the problems to be solved were different from those whose solution was explained previously [4]. The constructivist view is more appropriate to deal with the pedagogical problems encountered in switching from the procedural approach to programming to the object-oriented paradigm, since it takes into account students' prior knowledge in programming [5]. Moreover, constructivism offers a potentially powerful way to rethink the pedagogical practice at the introductory level by stressing the need for the learner to play an active role in constructing object-oriented knowledge. Constructivism has been successfully implemented in mathematics and science education [9,10]. It can be applied to our field with slight modifications.
The remainder of this article is organized as follows. In section 2 we give an overview of the objectivist and the constructivist models of learning. In section 3 we reconceptualize object-oriented knowledge within the constructivist epistemology. In section 4 we outline a constructivist approach to teaching object-oriented design and programming at the introductory level. Finally, some remarks on further work conclude the article.
2. PARADIGMS OF LEARNING
2.1 The Objectivist Model of Learning
Basically, computer science education relies on the objectivist model
of learning which views learning as the passive transmission of
knowledge . This model does not suggest that students' prior knowledge,
e.g. procedural programming, can affect current learning, e.g. object-oriented
programming, since its metaphor of mind is that of a blank page, a tabula
rasa, waiting to be filled with knowledge [10]. Clearly, the objectivist
model of learning does not engage the mind appropriately to go beyond
inadequate prior knowledge. The result is, even after one year of instruction,
a lack of conceptual understanding, bad programming habits, and serious
misconceptions about object-oriented program development. Programming is
understood as an art rather than a discipline with principles which guide
the development of readable, modular, extensible, and reusable objects
[8,12]. This situation is, to some extent, the result of passive learning:
listening to lectures, reading textbooks, and doing programming work
without engaging the mind appropriately to successfully tackle the
object-oriented paradigm [5,8].
2.2 The Constructivist Model of Learning
In stark contrast to the objectivist view, the constructivist perspective regards learning less as the product of passive transmission than a process of active construction. Learning is an active process in which learners construct new knowledge based upon their prior knowledge. The constructivist perspective clearly diverges from the objectivist model of learning which presumes that knowledge can be put directly into the learner's head. For more details, see [1,3,5,6,8,9,10]. Consequently, a constructivist approach to learning needs to probe prior knowledge and evaluate whether it conflicts with the knowledge being taught. Similarly, a constructivist methodology needs to evaluate how prior knowledge in programming conflicts with the object-oriented approach. Our experience with teaching Java indicates that students' prior knowledge in procedural programming is, to some extent, a significant epistemological obstacle that makes it difficult to learn object-oriented concepts [4]. Our observation agrees with one made in [7, pp.106] that the object-oriented approach is considered as «a paradigm shift in the world of programming - it is a radical change from traditional design methods». Given this background, we have come to the conclusion that new ways must be found of reconstructing the object-oriented concepts at the introductory level; otherwise there is no guarantee that the object-oriented approach will be adopted.
Before developing a new teaching method, we must reconceptualize object-oriented
knowledge within the constructivist epistemology. From a constructivist
point of view, there are three knowledge types which are relevant for the
object-oriented approach:
3.2 Skills for Constructing Object-Oriented Knowledge
The constructivist view asserts the construction of closely linked knowledge,
as described above, necessitates particular types of problem-solving
skills [9,10]. This is consistent with research and the practical experiences
of expert software designers. Insights from software engineers indicate
that designers focus on the overall structure of the software system, that
is on the general functions of the parts and how they interrelate with
each other to form the whole. Moreover, analysis and design activities
are more central to the development of software than the code, see [11].
This means that building object-oriented knowledge structures that are
strongly linked to each other requires problem-solving at a higher level
than the code level. There are a variety of problem-solving skills. The
most important for our subject are:
4. A CONSTRUCTIVIST APPROACH TO TEACHING OBJECT-ORIENTED PROGRAMMING
The goal of a constructivist method to teaching object-oriented programming is to help students (a) to explore their prior knowledge about computing, (b) to refine their understanding of object-oriented concepts, (c) to use object-oriented concepts to analyse problem situations and to design computational models, (d) to develop problem-solving skills, and (e) to put together object-oriented knowledge into an integrated whole.
Our approach to teaching object-oriented design and programming is rooted in the constructivist epistemology. It includes the following principles:
To be successful, a teaching method motivated by constructivism needs
to be organized around a set of activities where students are actively
engaged in the knowledge being constructed. Each activity includes four
integrated parts:
In this section we give an outline of some activities involving analysis,
design, implementation, and evaluation processes.
In this article, we have presented a new teaching approach to object-oriented design and programming motivated by principles found in the constructivist epistemology. We have come to this approach as we realized that the predominant model of instruction - the objectivist model of learning - was inadequate to successfully tackle the pedagogical problems encountered in switching from the procedural approach to the object-oriented paradigm. Although we have only been able to outline the new approach in broader terms, we are convinced that constructivism offers - by defining learning as an active process of construction - a potentially powerful way to rethink the pedagogical practice in computer science. We are now in the process of implementing the new approach by introducing constructivist ideas step by step. Developing a complete teaching strategy requires a long-term effort in several directions: we need to improve our understanding of students' prior knowledge, refine the program of activities, explore problem-solving skills, develop better assessment and evaluation procedures, as well as material and teaching aids to support constructivist learning in computer science.
REFERENCES
[1] Ben-Ari, M. Constructivism in Computer Science. Proceedings of the 29th SIGCSE Technical Symposium on Computer Science Education, March 1998, 257-261.
[2] Berg, D.J., and Fritzinger, J.S. Advanced Techniques for Java Developers. John Wiley & Sons, New York 1998.
[3] Floyd, C., et al. (eds.). Software Development and Reality Construction. Springer-Verlag, 1992, 86-100.
[4] Hadjerrouit, S. Teaching Java as First Programming Language: A Critical Evaluation. SIGCSE Bulletin, Volume 30, Number 2, June 1998, 43-47.
[5] Hadjerrouit. S. A Constructivist Approach for Integrating the Java Paradigm into the Undergraduate Curriculum. Proceedings of the 3th Annual Conference on ITiCSE, August 1998, 105-107.
[6] Kafai, Y., and Resnick, M. (eds.). Constructionism in Practice: Designing, Thinking, and Learning in a Digital World. Lawrence Erlbaum Associates, New Jersey 1996.
[7] Lanttazi, M.R. and Henry, S.M. Teaching the Object-Oriented Paradigm and Software Reuse: Notes from an Empirical Study. Computer Science Education, Vol. 7, no. 1, 99-108, 1996
[8] Mereno-Seco, F., and Forcada, M.L. Learning Compiler Design as Research Activity. Computer Science Education 7, 73-98, 1996.
[9] Phye, G..D. (ed.). Handbook of Academic Learning: Construction of Knowledge, Academic Press, London 1997.
[10] Steffe, L.P., and Gale, J. (eds.). Constructivism in Education. Lawrence Erlbaum Associates, New Jersey 1995.
[11] Sims-Knight, J.E., and Upchurch, R.L. Teaching Object-Oriented Design Without Programming: A Progress Report. Computer Science Education 4, 135-156, 1993.
[12] Tewari, R., and Friedman, F. L. A Framework for Incorporating
Object-Oriented Software Engineering in the Undergraduate Curriculum. Computer
Science Education 4, 45-62, 1993.