[Edu-sig] Teaching Python as a gateway to teaching whatever...
Kirby Urner
pdx4d@teleport.com
Mon, 12 Mar 2001 09:40:44 -0800
>Why don't you compare Python with a true competitor such as Scheme?
>
>It has the same advantages as Python, has been around much longer, is
>regular, and is already taught at hundreds of colleges and high schools.
>
>-- Matthias
In theory, we have a lot of latitude regarding how to craft
a course, even at the high school level.
Given that Python incorporates a lot of features common to
other languages, it's useful for developing some ideas and
skills with an eye towards introducing other languages as well.
I always appreciated my intro classes in college for
precisely this approach: part of the aim was to open our
eyes to the huge number of languages out there and something
about their history as well. I got some hands-on experience
with a sampling, and really enjoyed that.
In sum, I think a dynamite intro to programming course might
use Python as a base of operations within which to develop
concepts Mr. Elkner was listing etc. (branching, looping,
resursion, procedure, class/subclass/object, data types,
arrays), and then get into something of the rich heritage a
contemporary student inherits, if willing.
Speaking of the tree structure, how languages tend to grow
on trees is useful information. Show the LISP family tree,
give some sense of its nomenclature and current state.
Download DrScheme and introduce some of the basics. Do
the same with a LISP (which has a loop construct and relies
far less on recursive strategies -- unless in the hands of
a Schemer).
Talk about SmallTalk and Squeak -- dive into it for a few
days.
Maybe use Jython as an intro to Java. Then talk pure Java.
Use this as a bridge back to C/C++ and, coming full circle,
touch on CPython as C code, and how to extend same.
Did I forget to mention Perl? Tsk. And what about Haskell
and ISETL and FORTRAN and APL and... obviously it's up to
the teacher what to cover in finite time. But what's so cool
about getting your intro today, vs. X years ago, is you've got
a lot of free resources and GUI versions of just about all
of the above. It's a rich and well-supplied environment, all
there, ready to be explored.
What I'd like to see in a next generation of programmers is
less propensity to indulge in language wars of any kind --
especially of the pointless kind, as if the aim were to make
the "competition" simply go away and to envision an "ideal
world" wherein everyone eventually sees the light and programs
in language X (whatever language X might be). So many religions
have made this mistake, and I think the less of them for it.
So when we teach Python as a first language, I _hope_ the
attitute isn't going to be to encourage snobbery and "my
language is better than yours" attitudes. On the contrary,
_all_ the languages are part of your common heritage, and
you can use any of several to leverage your understanding
of all the others.
To me, this is what any "introduction to programming" is really
about, at least initially. It's about learning some of the
basic concepts (and that includes knowing something about how
computers work) and it's about getting some overview and feel
for the evolutionary picture, the zoology, the taxonomy. It's
not about studying just one animal in the zoo the whole day,
and ignoring all the other creatures.
And finally, in an even "grander" scheme of things, I'm looking
at ordinary non-computer languages in the same overview, starting
with the math notations, with all their varied syntax and symbols.
Math languages have had a big influence in computer language
from the start -- except I think it's increasingly a two way
street, with the bidirectional aspect becoming clearer by the
day. So I'm all for a hybrid of computer science and concrete
mathematics which draws examples of what to program from the
math texts, and which shows students how language X is managing
to implement some of the same ideas as embodied in math
notation Y (boolean algebra is a good place to start, then
maybe loops of the kind signified by Sigma and Pi, then gcd
and lcm... etc. etc.
See: http://www.inetarena.com/~pdx4d/ocn/overcome.html -- which
is mostly addressed to math teachers, as I don't believe in
necessarily putting computers on one side of a bureaucratic
turf divide and math courses on the other -- leaving serious
math teachig to the graphing calculator crowd seems a serious
misallocation of resources in my book).
I'll try to summarize with a course outline, drawn off the top
of my head and on the spot:
Introduction to Computer Programming
Cardinality (numbers as names)
Looking at serial numbers, social security numbers, license
plate alpha-numeric strings, and talking about the
pervasiveness of databases in our culture (record keeping)
Videoclip possibilities: airline reservations, talking
heads re their jobs, clips from the movie 'Brazil' (welcome
to information retrieval -- metropolis/bureaucracy/art deco)
-- I recommend short vidclips from your school's DVD juke
box wherever appropriate (won't continue listing them here,
as your school probably doesn't have a repository in any
case). http://www.inetarena.com/~pdx4d/ocn/cardinality.html
Ordinality (numbers in order)
quick review of integers and real numbers, with an eye towards
data types and the computer concepts of floating point, double
precision, big numbers, integers, negatives numbers (ties forward
to later mention of binary representations, 2s complement etc).
Emphasize the importance of operators > < = in an ordered
system, plus the appearance of operations such as + / * -
(quick mention of groups, fields and rings, just as an aside
and the fact that these are topics in algebra)
Positional Notation and Bases
talk about base 10, other bases, with strong links to the abacus
as the artifact that makes all this rather easy to think about.
Start introducing Python, including a module with lots of precoded
methodes having to do with bases and base conversion. Show the
binary strings corresponding to integers.
Binary representation
ASCII
more use of Python to show bytes as 8-bits, some discussion
of the history of ASCII, leading up to a discussion of:
Unicode
visit the Unicode website and take a look at some of the PDFs
showing the symbols/glyphs covered by this system. Talk about
powers of 2, and the space of permutations depending on how
many bits in a string (2^N).
Review: http://www.inetarena.com/~pdx4d/ocn/intro0.html
Computer Languages
History of Computers and Computing Devices
Start with the abacus, move through navigation as a principle
challenge for humans and the development of knowledge and
instrumentation in that domain, and ballistics. The importance
of ciphers, codes, cryptology should be emphasized, with this
thread picked up in WWII. Discuss Alan Turing at Bletchy Park,
the German Enigma codes. Use Python to play with the rotor
module. Clubhouse codes. Mention Ada Byron and some of the
controversy around her 'first computer programmer' title.
http://www.teleport.com/~pdx4d/adaessay.html
Talk about Grace Hopper and COBOL, and the idea of a compiler.
Overview of Compiler, Interpreter, Bytecodes, Virtual Machine,
libraries, linking, Assembly Language, chips as having
instruction sets, registers, access to short and longer term
memeory via bus, RISC, MIX, MMIX (talk about Knuth's multi-
volume classic without trying to make this a college course
about it).
Getting into it with Python
Overview
Discuss its lineage/heritage, how it's a VHLL coming out after
a long history of language evolution, and how we'll therefore
be using it to study earlier life forms and other branches of
the evolutionary tree, down to live/evolving languages in
contemporary use.
http://www.inetarena.com/~pdx4d/ocn/cp4e.html
Data Types and Data Structures, Conversion
Strings, floats, integers, long numbers
Types, attributes, lists, tuples, dictionaries
Managing Program Flow
Branching, looping, recursion, calling and
returning, mapping (includes list comprehension)
Functions and Methods
parameters, functions as objects with attributes,
passing functions as parameters (optional, by name)
Classes/Subclasses and Objects
[this is where I usually swap in Polyhedra as objects
and/or Groups as objects, after some simpler examples]
Managing with Modules
Scope issues, namespaces, importing, documenting
<< SNIP >>
Kirby