[Edu-sig] Python for CS101

André Roberge andre.roberge at gmail.com
Thu May 5 23:48:41 CEST 2005


Arthur wrote:
> 
[Snip]
> In an educational setting the answer is easier, and Python is fully
> self-sufficient without the .Net add-on.  Except to the extent the
> educational mandate is related to introduction to the tools specific to
> closed source programming.  To what extent does that need to be true?  IMO,
> very little. 
> Not arguing against closed source - per se.  But if that is important to
> industry, let industry bear the training costs.
> Art 
> 

University is supposed to be about education, not training.  In other 
words, it is to about learning how to think, rather than how to use some 
technical tool that has the flavour of the day.

If I had to design a complete curriculum in computer science, I would 
most likely pick Python as the core language (with some help from C) for 
all topics.  Here are some very broad, off the cuff, examples...

When studying scientific visualisation, I would introduce all the 
general principles and simple examples using Python and the various 
available libraries.  For the last quarter of the course, I might use a 
combination of Mathematica, Maple and some specialised software (say for 
rendering) to introduce some advanced topics.

When studying "compilers", I would first use Python parsing modules.  At 
some point, I would introduce Python's "compiled" file syntax.   Then I 
would look at how this is translated in computer instruction on a 
specific architecture.

To study numerical analysis, once again I would use Python to implement 
the algorithms, so that student learn how to do it.  I would then 
compare with available Python libraries, to show how best it is not to 
reinvent the wheel.  I might, at the end, use something like 
Mathematica, Maple or Matlab, again to illustrate some specific points.

You probably get the idea: either use Python as "executable pseudocode" 
to have the student learn the concepts.  Then, show them how to do more 
advanced stuff using the relevant tool for that area.

Perhaps something like .Net would need to be introduced at the end of a 
given course.

In the second year, I would have a (one semester) course on C - given 
its importance and its portability.

In the third year, I would have a full year course where students would 
have to do 6 projects, using 6 different languages.  Say: Lisp, Java, 
Haskel, APL, Fortran and one other (but NOT Python nor C) at the choice 
of the individual student.  This would be a self-learning course (with 
instructor's prior approbation of topics) with everyone in the 
department available for supervision/guidance, based on their 
experience.  (google is the student's friend ;-)

In the fourth, and final year, I would have the students do a term 
project using Java, in the first term - so they can feel better prepared 
when starting to look for job prior to graduation.

Then, in the last term, they would have another project to do, this time 
using the language(s) of their own choice.  I bet most of them would end 
up using Python!

I believe that the graduating students would be ripe to benefit from 
industry-led-and-paid-by training courses on closed-source technology 
that Art mentions.  And they would be well-equipped to keep learning on 
their own.

Just some rambling thoughts as a non-expert in computer science.

André

=====
[Disclaimer] I work in an educational setting  where both traditional 
university-level education and technical training are offered.  I am not 
  a computer scientist, nor does my institution have a computer science 
departement where we would teach a CS101 type course (- although I am 
attempting to develop a web-based on python in my spare time ;-)

However I have been involved in *serious* restructuring of an 
undergraduate physics curriculum as well as being the driving force in 
putting together a one-of-a-kind undergraduate biomedical curriculum, 
and involved on curriculum-planning committees at two different 
universities.



More information about the Edu-sig mailing list