[comp.edu] Teaching computer science.

mcglk@blake.acs.washington.edu (Ken McGlothlen) (01/18/89)

Here at the University of Washington, we have a rather interesting
situation.

I spend part of my time playing impromptu computer tutor for a
number of students taking computer courses.  This doesn't typically
bother me very much, but there are two courses in particular, taught
by the same teacher, which has caused me quite a bit of concern--
especially as I'm considering a teaching career myself.

The professor in question, at one point, was using Modula-2 to teach
introductory programming.  I don't really have an opinion one way or
the other as to whether this is an appropriate language to use for an
introductory course--*I* wouldn't use it, but the prof in question
really likes it, and he opted to inflict it on his students.

So far, so good.  The headache began when the professor opted to
force each of his students to use his personal set of library
functions *instead* of the standard Modula-2 libraries.  Apparently,
the prof "didn't like" the original libraries, and wrote a number
of small procedures which called the real procedures, using a
different set of parameters, names, and so on.  He took points off
for different commenting styles (you had to use *his*), different
(though perfectly valid) indentation styles, and using the standard
Modula-2 routines instead of his personal library.

At the end of the course, if anyone wanted to use Modula-2 for anything,
they had to unlearn some of the ridiculous stuff they had picked up in
his class.

Now, the professor in question has opted to teach in Ada.  You can just
imagine what's going on now.  Not only has this teacher supplied a
completely nonstandard library, but has gone so far as to mark a point
off for adding one to a variable (c := c + 1) instead of calling one of
his library routines (as in lib.inc(c);).  The comments and indentation
once again have to follow his personal style (no great advantage, and
several small disadvantages, in my humble opinion), and his method of
teaching doesn't tend to emphasize some of the things *I* was brought up
with--like efficient, readable code.  In fact, it barely looks like
recognizable Ada by the time you wade through all the odd library calls.

The approach tends to confuse almost every student I've come in contact
with.  Several of them have learned horrendous coding habits, others have
gotten some of the strangest ideas of what efficient code really means,
and I've been finding that the libraries that the students are forced to
use are missing a few key features--for instance, there doesn't seem to
be any way to append to a file.  Perhaps the teacher never has a need for
an append--but Lord knows that if you call the Ada routine which allows
this, you get marked off for it.

Maybe I'm just a little out of date.  This can't possibly be a sound
approach to teaching a computer course, can it?  Or is it actually
suggested somewhere that this is a good pattern to follow?

As it is, I spend a lot of time patching up misconceptions, and watching
students of this teacher become really frustrated with programming, and
computers in general.  The few who really *want* to learn this stuff
get rather frustrated, because (a) they aren't using the real language,
and (b) they can't use their common sense to increment a variable, or
even call the correct routines to allow them to do what they wish more
efficiently.

It pains me somewhat.  I'm rather enthusiastic about computers, but then
I've had a few really wonderful teachers in my time (thank you Dean
Gienger, wherever you are).  Seeing this happen just irks me somewhat.

If I'm wrong--if this *is* a good approach--could someone please set
me straight, and tell me why?

				--Ken McGlothlen
				  mcglk@blake.acs.washington.edu

wbralick@afit-ab.arpa (William A. Bralick) (01/18/89)

In article <576@blake.acs.washington.edu> mcglk@blake.acs.washington.edu (Ken McGlothlen) writes:
>Here at the University of Washington, we have a rather interesting
>situation.
>
>I spend part of my time playing impromptu computer tutor for a
>number of students taking computer courses.

Is this a (paying) job, or are you doing it from charitable impulse?
If it is a job, I sympathize with you, but I am happy for the students
who are fortunate enough to have your assistance.  If your are doing 
this out of a charitable impulse, then, while I laud your motives, I
would suggest that you might be exacerbating the problem. How?  By acting
as a buffer for the professor in question.  If he had to deal with all
these questions himself, he might alter his teaching style.

>This doesn't typically
>bother me very much, but there are two courses in particular, taught
>by the same teacher, which has caused me quite a bit of concern--
>especially as I'm considering a teaching career myself.
>

Hmm... I hesitate to bring this up, but if you are interested in a 
*teaching* career then you will need to look at "smaller" schools.  If
you are interested in a *research* career, then you should look at 
the "larger" schools.  I have been told that by going to a *teaching*
school, one subjects oneself to teaching 3-4 courses per semester
and consequently having little time for any research.  Of course,
by going to a *research* school, the pressure is so fierce to publish,
that research demands as much time as you can give it, thereby reducing
your ability to teach effectively.

My question for the general audience is, which schools out there
provide a balanced opportunity for tenure-track faculty to both research
and teach? 

>
> [conserving bandwidth ...]
>
>Now, the professor in question has opted to teach in Ada.

Which I do not think is an appropriate *introductory* programming 
language.  I think that a previous course in the fundamentals of
programming in a language like _Pascal_ should be a prerequisite
to a course in software engineering with Ada.

>
> [conserving again ...]
>
>If I'm wrong--if this *is* a good approach--could someone please set
>me straight, and tell me why?

(1) Ada is inappropriate for an *introductory* programming course.
Modula-2 is better, but I still think that Pascal is the best for an
*introductory* course.

(2) Using standard reusable components in Ada is a good idea, if
you have a relatively complete set (e.g. Booch's reuseable components).

(3) In an introductory programming course (or even later courses), it
*is* appropriate to constrain the student to use certain libraries
(much better if "standard" as mentioned above), and to follow rigid
style and coding conventions.  Why?  Because, unless they are destined
for a life in academia, or working out of a "garage" the students will
need to adhere to some institutional coding and style conventions.
Just try to maintain (not to say grade) code written for a large
project written in a plethora of different styles, you can go crazy
in a hurry!

Regards,
-- 
Will Bralick : wbralick@afit-ab.arpa  |  If we desire to defeat the enemy,
Air Force Institute of Technology,    |  we must proportion our efforts to 
                                      |  his powers of resistance.
with disclaimer;  use disclaimer;     |               - Carl von Clauswitz

nick@aimed.UUCP (Nick Pemberton) (01/20/89)

In article <576@blake.acs.washington.edu>, mcglk@blake.acs.washington.edu (Ken McGlothlen) writes:
[introductory comments deleted]
> So far, so good.  The headache began when the professor opted to
> force each of his students to use his personal set of library
> functions *instead* of the standard Modula-2 libraries.  Apparently,
> the prof "didn't like" the original libraries, and wrote a number
> of small procedures which called the real procedures, using a
> different set of parameters, names, and so on.  He took points off
> for different commenting styles (you had to use *his*), different
> (though perfectly valid) indentation styles, and using the standard
> Modula-2 routines instead of his personal library.
> 
> At the end of the course, if anyone wanted to use Modula-2 for anything,
> they had to unlearn some of the ridiculous stuff they had picked up in
> his class.
While I'm no teacher, I have had to train a large number of people coming
into our company. I've always held that it is far better to learn a
language, a software package, an os feature, etc, as it was originally
intended. Several langauges, C included, allow one to define constructs,
macros, etc, that make the langauge "look like" something the user is more
used to. This is really harmfull in that the user then doesn't really know
or hasn't really learned what the package is about; rather they have learned
how to make it look like something they already knew. (Classic example
of this in the original K & R, making C look like algol (intro to the
C preprocessor) ).

The only argument I can think of *for* this kind of action is to try and
introduce some form of standards, but I can't think of a stupider way to
do it ... all he'll end up with, as you point out, are very confused
students.

As to writing his own routines, his own library, etc, and ramming 'style'
down students throats, well, there are lots of problems with that. Forcing
style is quite serious, it leads to students who tend towards spitting out
programs 'as they were taught to' rather then thinking for themselves how
it ought to be done. Understanding *how* to indent is far less usefull
then knowing *why* one should indent. Writing his one library is just plain
stupid, especially if it achieves the exact same thing as the original. Might
as well invent a whole new langauge like, say, turing... :-)
> 
> Maybe I'm just a little out of date.  This can't possibly be a sound
> approach to teaching a computer course, can it?  Or is it actually
> suggested somewhere that this is a good pattern to follow?
> 
Well, IMHO its a terrible way to teach, and the programmers who come out
of this are either going to be way behind their peers or just downright
unemployable.
> 
> It pains me somewhat.  I'm rather enthusiastic about computers, but then
> I've had a few really wonderful teachers in my time (thank you Dean
> Gienger, wherever you are).  Seeing this happen just irks me somewhat.
> 
I know how that feels - when I was at the University of Alberta I had some
first rate teachers, how shall remain nameless for the moment, and they
only served to strengthen my liking of computers.
>
> If I'm wrong--if this *is* a good approach--could someone please set
> me straight, and tell me why?
> 
Well I think you're right, as I'm sure you can tell...
-- 

Nick Pemberton                   UUCP: !{utzoo,utai}!lsuc!aimed!nick
AIM, Inc                          Bus: (416) 429-4913
                                 Home: (416) 690-0647