Relay-Version: version B 2.10 5/3/83; site utzoo.UUCP
Path: utzoo!mnetor!seismo!rutgers!im4u!ut-sally!utah-cs!shebs
From: shebs@utah-cs.UUCP (Stanley Shebs)
Newsgroups: comp.lang.misc
Subject: Re: Teaching object-oriented paradigm to beginners?
Message-ID: <4153@utah-cs.UUCP>
Date: Fri, 9-Jan-87 12:03:05 EST
Article-I.D.: utah-cs.4153
Posted: Fri Jan  9 12:03:05 1987
Date-Received: Sat, 10-Jan-87 02:20:46 EST
References: <4000001@nucsrl.UUCP> <602@sdcc18.ucsd.EDU>
Reply-To: shebs@utah-cs.UUCP (Stanley Shebs)
Organization: PASS Research Group
Lines: 68

In article <602@sdcc18.ucsd.EDU> ee161aba@sdcc18.ucsd.edu.UUCP (David L. Smith) writes:

>My views are that the more you know about what's going on inside of the machine,
>the better.  If you want to teach Joe Freshman how to program, teach him
>whatever his brain can absorb easiest.  If you're teaching a budding programmer,
>I think they should start off in machine language.

This is a really bass ackwards approach to learning.  Rather than learning
general concepts, everybody gets immersed in the minutiae of (I assume)
Von Neumann machine architecture, which is about as bad of a start as I can
imagine.

>I know a lot of students who have very 
>little idea of what actually happens when their program executes.

"Actually happens"?  Do you mean assignments into registers, switching of
transistors, or flow of electrons and holes in semiconductors?  Even as you
decry abstraction, you're depending on it!

>Knowing 
>machine language when I started learning Pascal made understanding pointers 
>simple for me, but it was a real headache for a lot of other people I know.

That's why teaching Pascal is at least as bad an idea as teaching machine
language.  The semantics (i.e. true explanation) of Pascal is inextricably
tied with sequential machine architecture, so of course it's going to be
confusing to learn Pascal without knowing architecture.

It is much better to start off with a reasonable abstract idea of computation
and a language based on that idea.  For instance, Lisp and Scheme are
based on the idea of mathematical functions, Prolog is based on the idea
of proof, SETL is based on the idea of sets, and Smalltalk is based on the
idea of communication.  Although these are quite different ideas, they are
already somewhat familiar to the student and thus relate machines to the
rest of the world.  Later on, students can learn about the low-level details
of contemporary architecture and languages to go with it.  MIT for instance
starts all their CS freshcritters with Scheme, which is introduced as a sort
of fancy calculator with parens in all the wrong places :-).

>Starting from the bottom and then working up in levels of abstraction will
>tend (in my opinion) to make a better programmer at each level.

Maybe a better Von Neumann machine language hacker, but introductory computer
classes also teach the future innovators of the field, and you don't want to
deform their brains with the current set of mistaken beliefs!

>When you
>are taught English (formally), first you learn the alphabet, then you learn 
>words, etc.  You aren't set up with Shakespeare right away.

Not a good analogy.  English is a language, while computer science is a
field of study.  Of course, many people confuse the study of computer science
with the memorization of programming languages...

>Finally, the jump from a "standard" language to an object oriented one is
>not easy.  It takes a lot of re-learning.  The jump from an object oriented
>language back may be just as difficult.

It can be very easy if the basic concepts underlying all languages are
understood in the first place.  The *concept* of objects can be presented
in any language you like, even Pascal or machine language.

>			David L. Smith
>			{ucbvax, ihnp4}!sdcsvax!sdcc18!ee161aba


							stan shebs
							utah-cs!shebs