[Edu-sig] Re: Python at Wesleyan

Kirby Urner urnerk@qwest.net
Fri, 26 Jul 2002 01:17:54 -0700


>Good points.  Remember, though, that this is the introductory course for 
>students
>not planning to major in Computer Science.  They don't necessarily need 
>exposure
>to multiple languages, since the goal is simply to introduce the concepts and
>techniques of computer programming and develop basic competency in writing
>computer programs.  However, we will next face three questions related to 
>your
>challenge:

My programming 101 course (forget the actual name) featured a smattering
of Assembler, FORTRAN, PL/1, SNOBOL and a few others.  I liked the overview
this gave, along with chatter about machine-level stuff like registers,
the program status word, etc. etc.  To my mind, "intro" and "overview" go
together.  This wasn't necessarily a course for computer science majors,
although it was taught by the engineering department (I ended up in the
philosophy department, though as a freshman I didn't yet know this'd be
my fate).

So Python is a great language to sketch out ideas, such as class structures
with inheritance and polymorphism.  But then you can at least show how these
ideas get implemented in Java, maybe share that chart showing the (huge)
class hierarchy that comprises the power of that language.  Jython is a
possible bridge here, for experimentation purposes.

You can also show operator overriding in Python, then give a simple example
of what this looks like in C++.

I think an intro course should clarify these broad categories of language,
e.g. interpreted versus compiled, strongly, dynamically and weakly typed.
And paradigms for coding, i.e. procedural, functional, and object-oriented.
Historical perspective should also be provided.  I'm a big fan of this
time-line by the way: http://perso.wanadoo.fr/levenez/lang/history.html

Python can be a scratch pad for doing interactive experiments, but somehow
the presentations should weave in plenty of examples from other languages.
You mentioned championing SmallTalk for awhile.  You should keep that
thread alive.
>What language to use in the introduction to programming for potential
>majors -- C++? Java? Python?  (Scheme was used for several years some
>years past, something I have a lot of sympathy for but which tends not
>to work out in practice because the surrounding computer culture is
>so different than Lisp's.)

I could see Python used with potential majors, sure.  And here your
golden opportunity, given the open source nature of Python, is to
start bringing in C by examining Python's guts.  I toss this out as a
possibility -- not as one who has experience using this approach (I'm
not a college teacher -- I spend a lot of time coding for cardiologists,
often not in any of the languages mentioned so far in this thread).

C/C++ still needs to be a focus, starting early I think.  You can use
familiarity with Python to bridge not only to C/C++, but to Unix/Linux,
presuming we might be starting in Windows.  This begins a deeper look
at operating system concepts, such as forking processes and threads.
Linux/Unix is a more transparent environment for studying these things,
and Python is right there at your elbow, helping you learn.

>Next semester I will teach the usual data structures course, to students
>who will have been taught Java (I think) in the introductory course.
>Should I do it in Java? do a quick immersion to Python and use that?
>Use several languages?


I like the "several languages" idea.  Definitely including Python.

>What do we do about students who take the non-major introduction and to
>their surprise find themselves wanting to go on in Computer Science?
>They're not ready for the second semester data structure course, because
>they missed a lot of the conceptual material that's in the introduction
>for majors but not in the introduction for non-majors.  But it might be
>silly to have them sit through another introductory programming course,
>because they will already know the basic techniques.  I don't think
>Wesleyan has the staff to offer yet another low-level course, in order
>to provide non-majors with an appropriate transition into the major sequence.

Curious what kinds of stuff gets left out of the non-major intro course,
that you've gotta know to tackle data structures in particular.

Kirby