On Tue, 2003-09-16 at 02:23, Allen Milewski wrote: > I've recently had cause to become interested in software/programming > educational techniques. In the education literature, there seem to be > two kinds of positions: (1) OOD has so many advantages that we should > teach it early and (2) OOD is a more natural way to think, as long as > it hasn't been tainted by earlier training in procedural thinking- so > we should teach it early.
Until a couple of years ago I was an academic teaching programming and software engineering. I personally subscribe to 1 above but am not sure about 2. I am sure other members of this mail group will have real data regarding the cognitive issues. My thoughts are more about the educators and my experience. A large number of people who are teaching programming these days grew up with procedural programming (possibly with ADTs but many not) and many had a hard time really appreciating OO. They assume that everyone else will have the same difficulties with OO even though others' histories will be very different. Graham Roberts (UCL) and myself have found that the teaching strategy makes a very big difference to the ability to learn OO. If you teach procedural first (particularly if it is done in a completely constructivist, i.e. bottom-up, way) then OO is hard. If you teach OO from the outset being open that there are things not explained (but giving forward references for those who want to find out) then OO is a lot, lot easier. In this philosophy procedural programming is an aspect of how to create methods. This then makes the "descent" to procedural programming for those that need it actually quite easy. So if OO is on the curriculum I believe it should come first. Note the word believe -- my experience and anecdotal evidence back up this view but I have no scientific data. I am not sure if there are any recent good longitudinal studies based on people who learnt procedural and people who learnt OO -- I am assuming that double blind type studies are unlikely to happen. If there is any recent work comparing people who started with one of C, C++, Java, Haskell, Scheme, Python I would very much like to know about it. > As a result of both positions, teaching Object Oriented Methods is > absolute gosple at most institutions. But, I have heard many > educators quietly complain that OOD is very hard for naive students to > learn, that it requires an entire different "level" of work (namely, > abstract design) and even that for students (even for many experienced > programmers) Object-oriented thinking is often a secondary thing > wherein. programs are first conceived in procedural terms and then > "translated" to object-oriented design because OOD is the "right way". I agree that many educators simply trot out the OO cant and that it has become an unsubstantiated mindset for many people. I have also heard people say that OO is hard with many of the points you allude to above. However, my experience is that these people are exactly the ones who learnt and used procedural programming before learning OO and many of them really wish that they could return to procedural and ignore OO as actually they don't really understand it themselves. Your phrase " first conceived in procedural terms and then "translated" to object-oriented design" really is the give away here. There are many influences here. We talk of algorithm which his about process and how to evolve state. Most people think of this in procedural terms: how do I instruct the computer to evolve the state. The declarative programmers got round this by reinventing algorithm has how do I specify the way in which the data evolves to achieve the goal. This is very much closer to the way OO algorithm, and hence OOD should be viewed. Anyone talking of "conceiving in procedural terms" has missed the point. > Can anyone help me with the basic literature to support position #2 > above? I'm willing to believe that the cognition literature suggests > we can think in terms of objects, but what is the empirical basis for > saying it is more natural? What problem solving steps/techniques are > facilitated by OOD? What is the mechanism for the alleged interference > by procedural thinking on learning OOD? The principal (and indeed principle) issue handled by OO is really encapsulation. This encourages separation of concerns. Abstraction (and hence APIs) are important as well of course. In my experience as long as students can do their assignments and can see the road being followed they are prepared to work with unexplained bits. Students are prepared to take things on trust as long as they know when they will find out what is being left unexplained. Many of the people who continue to push procedural first base their argument on the equally unproven position that students must know everything correctly in a bottom up method: values before variables before expressions before statements before procedures, etc. -- Russel. ==================================================================== Dr Russel Winder, Chief Technology Officer Tel: +44 20 8680 8712 OneEighty Software Ltd Fax: +44 20 8680 8453 Cygnet House, 12-14 Sydenham Road [EMAIL PROTECTED] Croydon, Surrey CR9 2ET, UK http://www.180sw.com ---------------------------------------------------------------------- PPIG Discuss List ([EMAIL PROTECTED]) Discuss admin: http://limitlessmail.net/mailman/listinfo/discuss Announce admin: http://limitlessmail.net/mailman/listinfo/announce PPIG Discuss archive: http://www.mail-archive.com/discuss%40ppig.org/
