From: harrison@faraday.physics.utoronto.ca (David Harrison)
Subject: Teaching CS to science students (was: The Real Meaning of Efficiency?)
Organization: Dept. of Physics, Univ. of Toronto
Date: Mon, 23 Nov 1992 11:39:01 GMT

We have been experimenting with various ways of teaching Computational
Physics to our undergraduates for a couple of years; our guinea pigs
have been III and IV Physics specialists (in the US == "majors").
Since we intend to offer "production" courses beginning Sept/93 I
have been following this thread with interest.  Perhaps I can
contribute constructively.  In most of what follows, the word 'physics'
is generic and others such as 'engineering' or 'physical chemistry'
can be substituted I think.  Similarly, 'Mathematica' is generic
and other symbolic math programs can be substituted.

First, I see a strong parallel between the traditional mathematician/
physicist tension and the emerging comp_sci/physicist one.  Which
means that the solutions may be similar: an amalgam of Dept of Comp
Sci courses, Physics Dept "CS for Physicists" ones, and building the
needed CS in the regular Physics courses in which it is needed.

Second, our students range from cyber-phobes to hacker.  This does
not seem to correlate strongly with their overall ability in Physics,
although will clearly influence the kinds of Physics they are likely
to do in the future.  Thus, if we wish to cast our net broadly, and
maybe even help our cyber-phobes become more comfortable with this tool,
we need to be extremely careful about getting too far down into the
computer-esque details of things.

Third, physicists tend to be people who are particularly interested in
CS (and math) only when it is needed to solve a particular Physics
problem.

We offer a course in "Microcomputer Interfacing" at the IV Year
level.  For the students who choose this course, saying "you better
know or be willing to learn Pascal or C" is sufficient.  These
students are, however, a subset of our student body.

An example: we wrote a package to investigate the physical pendulum.
The package has been used for two years in our III Year Classical
Mechanics course (level == Goldstein for the Physicists reading this),
which is a required course for all students.  For reasons of speed of
execution we wrote a 4th order Runge-Kutta package in C talking to
Mathematica via the Mathlink protocols instead of using a Mathematica
RK package.  The students produced phase plots, etc. and found this part
of the package a great success.  In the process they learned a fair
amount of Mathematica to process the lists produced by the RK code.

Last year we then asked the students to take the existing 4th order C
code and produce 2nd and 3rd order Runge-Kuttas to investigate the
differences in the results of various algorithms.  Disaster!  Actually
writing (or in this case removing) C code was too much for a significant
fraction of these students.  And they hated it.

This year we coded 2nd, 3rd, 4th and 5th order Runge-Kuttas and a
sympectic integrator, and the students could choose the algorithm by
editing a define used by the C pre-processor.  This worked.  The hackers
could get into the guts of how the integrators were coded, the interested
could see what such code looks like, and the cyberphobes at least had
the code in front of them in the editor while they looked for the cpp
define to change.

I agree when in article <1992Nov20.183648.4441@alchemy.chem.utoronto.ca>
mroussel@alchemy.chem.utoronto.ca (Marc Roussel) writes:
 >     There are several constraints in designing a CS/programming curriculum
 >for scientists and engineers.  One of them is that most of your students
 >are unlikely to take more than two half-courses because that is all that
 >their departments mandate. 
We aren't even going to mandate this much.

However I don't agree when he suggests:
 >A worthy approach might be to start out with a half-course in algorithms
 >and basic theory ...
We are designing our courses to be labs, just like our other Physics
labs except they are computer-based instead of equipment-based.  In fact
if we can't illustrate a computational method at an appropriate level 
with a real Physics problem, that method is de-emphasised or maybe even
ignored by these courses.

Since our Computational Physics courses will be getting our students 'up
to speed' in Mathematica, I think that our first Runge-Kutta experiment
above could work in those courses if we used RK's coded in Mathematica.  I
am much less hopeful about C or FORTRAN unless we based the whole course
on one of those languages; doing that would necessarily mean we would end
up teaching a lot more Computer Science than we need to by using a more
natural interpreted environment such as Mathematica.

Finally, we believe we are beginning to see a critical mass phenomenon
with our students.  Some of them begin using Mathematica to do their
problem sets in their regular courses.  Their classmates observe them
doing this and decide to try it too.  Finally, students who are still
solving their differential equations by hand realize they are at a
disadvantage.  [The other phenomenon is the student who spends 3 hours
solving a task with a computer when she/he could have done it by hand
in 37 seconds!  That is learning for the student too.]  When our
undergrads go on to graduate school they are now demanding that their
supervisor provide them with Mathematica; I guess those educational
discounts sometimes do work for the vendors.
-- 
David Harrison                             | "For us believing physicists the
Dept. of Physics, Univ. of Toronto         |  distinction between past present
Inet: harrison@faraday.physics.utoronto.ca |  and future is illusion, however
                                           |  persistent."      -- Einstein
Newsgroups: sci.math