[Edu-sig] Python @ Education: What are your problems?

Louis Bertrand Louis.Bertrand@durhamc.on.ca
Fri, 31 May 2002 18:53:48 -0400

[warning to edu-sig readers -- somewhat long]


I use Python to teach the first year programming course in the "computer
systems" and "computer programmer" streams in the School of Technology here
at Durham College. The intent of this course is to take students with no
prior programming experience and teach them the fundamentals: variables,
branches, loops, functions, objects and a bit (excuse the term) of binary &
hex. Students are from mixed backgrounds (fresh out of high school,
returning to school as mature student, foreign students), aiming for
practical, hands-on training as opposed to university-style courses.

The experience has been mixed but mostly good.

Java was the first choice for this course but I got nightmares at the
thought of teaching monstrosities like:
  class HelloWorld {
      public static void main(String[] args) {
          System.out.println("Hello World");
instead of:
print "Hello World"

Interpreted rather than compiled: driving the interpreter directly, line by
line is great for in-class demonstrations because I can "walk" through an
example, then run it full speed from the .py file. This is especially good
for Tkinter examples.

Objects: Python's object model is simple and uncluttered so that's good.
However the "self" reference in method parameter lists and for instance
variables is a source of aggravation. There is trouble reconciling the fact
that a method is nested in the class definition, but it still needs to be
told about itself, and all instance variables need to also be referenced.
Java's "this" is more subtle -- you don't see it, but it's there when you
need it. You don't need to introduce it immediately.

Dynamic typing: mixed blessing. Students don't trip on types, but they
aren't prepared for the strict typing  in Java and the little disasters due
to type errors in C.

Simpler syntax. No squiggles and semicolons to worry about. However, this
leaves the students unprepared for the squiggles and semicolons in C, C++
and Java.

Indenting block structure. Nice because it matches the pseudocode I do in
class. However, some students often don't get it and occasionally give me:
if x == y :
  # do some stuff
  else :
    # do something else
    # Sorry, I couldn't get it to work. It kept giving me errors :(
Basically, since IDLE keeps suggesting an indent, they never de-indent when
they are done the particular block.

The fact that nobody around here had heard of Python before I started has
been a constant aggravation. "If it's not popular, it can't be any good"
(read between the lines: "if it didn't come from Microsoft, it's no good"),
or the even deadlier slag "it won't help our grads get a job"). This leads
to pushback from other teachers and some students who feel I'm teaching
something totally irrelevant and "out in left field". Visual Basic, C, C++,
Java and Turing are the alternatives proposed. (References and "ammunition"

IDLE, while it meets its design goals for portability and simplicity, may be
_too_ simple. For example, IDLE doesn't even let students print out their
work -- I have to get them to copy and paste their console output to
Notepad. I'm afraid that we have to "market" to students these days, and the
glitz and flash of Microsoft Visual Studio totally obliterates IDLE. I need
to find a more Microsoft-oriented IDE (but not python for dot N0T) .

Anyway, that's it for now (I vented my frustrations). On the whole, I'll
keep doing the course my way. I want to change a few things, but Python
stays. If there are points you'd like me to follow up, feel free to ask
privately or on the edu-sig list.


Louis Bertrand
Durham College, Oshawa, Canada