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/

Reply via email to