[Edu-sig] teaching with python experience
Massimo Di Pierro
mdipierro at cs.depaul.edu
Mon Mar 31 08:41:03 CEST 2008
Hello everybody,
I would like to share some of my experience in teaching Python at
DePaul University in Computer Science. The main problem we have been
facing with C++ and Java courses is that it takes years of practice
before students are able to develop something interesting. We tried
different approaches:
1) We created an optional introductory sequence in Python (in
alternative to Java or C++, but they still have to learn Java and C++
in more advanced courses). Students who take the class tend to be
generally more knowledgeable of CS concepts than students who choose
the Java and C++ intro courses (who chose them because they have
heard of the names).
2) We use Python more and more in courses that are not language
specific. For example I teach graduate courses on Monte Carlo
Simulations for Financial Applications, a course on Scientific
Computing and a course on Parallel Programming. In all these courses
I use python instead of pseudo code and the students get it right
away even if they have not been trained in the language. In some
cases they have to translate python in C++ but Python helps them
separate the complexity of the algorithms from the complexity of C++
progamming.
3) We created a new course on web frameworks in Python. The course is
not on the usage of one particular framework, although we had to
choose one, but on the programming patterns used to develop
frameworks. This course was targeted to both undergraduates and
graduates students in order to fill gaps in their knowledge. The
basic idea was to follow the path of an HTTP request from the moment
its is generated by a browser until it reaches the server, is
processed and the response is sent back. We discussed good practice,
security, different types of persistence (database, cookies,
sessions, filesystem, ram) and the Model View Controller design. Most
of the students had no previous python experience and no server-side
programming experience. They all new HTML but minimal CSS and zero
knowledge of network protocols such as HTTP.
After evaluating a number of web frameworks and having tried to teach
a previous course using Django I found that most of the existing
frameworks have a too steep learning curve. A typical problem for
example is the need for shell commands (Ruby on Rails, Django,
Pylons, TurboGears, they all require use of a shell) but most
students have only bee exposed to windows and they the concept of
shell very alien to them. In order to solve this problem I wrote
http://mdp.cti.depaul.edu (TRY THE LIVE DEMO ONLINE) (GPL license)
specifically for these students. This experiment had more success
than expected and all students in the class have been able to create
decent projects using the framework and the best students got more
involved the core development, joined the mailing list and were glad
to give a real contribution to their first open source project. For
some reason, since then, web2py has picked up some steam more in the
business environment than in the teaching environment.
Although my class was not targeted to freshmen, it could have been
(with some changes).
My experience with 3) is that students appreciate programming better
when they develop something that they can use, that they can show
their friends who are not computer scientists, and they get it. One
way to do it is by programming inside a web framework (whether it is
web2py or Django or Pylons does not really matter).
Some things are different and some things are the same when compared
with teaching "normal" programming:
a) One visits a URL and a function is called, the output of the
function is sent back to the browser. You still has to write the
function, but the concept is more intuitive than calling a function
from main(). They get it right away because it is related to their
everyday experience. They also understand parameters passing because
they are familiar with filling forms online. In the case of a full
stack framework all of the work is actually done by the framework
itself, the students only have to write the function the "returns"
the response as a string.
b) Conditionals are not much different than in "normal" programming.
c) Loops are somewhat less important in the initial phase because
there is a lot one can do without looping. This is good because it is
with loops that students have the most trouble.
d) Most web frameworks abstract the access to the database, therefore
adding real database persistence is not much more difficult than
using a member variable of a Java class. This enables students to
created rich functionalities with a small set of API.
e) cookie, sessions and cache add a small level of complexity but a
good web framework should be able to take care of these issues
transparently. web2py does. Django, Pylons and TurboGears doo to
although they require some configuration.
f) They do not need to know HTML because they can use an HTML WYSIWYG
editor.
Moreover in doing web programming at a more advanced level, two
crucial CS tasks show up naturally: regular expressions (for
validation of user input) and parsing (for reading HTML/XML/XML-RPC/
RSS and for all kind of tasks like parsing code embedded in a web
page, for performing syntax highlighting, etc.). These are concepts
that every CS major should know but we often teach them in ways that
do not relate to the everyday experience of the students.
*****
Anyway, the bottom line is that instead of start teaching programming
using programs that interact with a shell or with a GUI, today it is
becoming easier and easier to write programs that interact with the
web. There is a small overhead but a lot more power and fun for the
students.
Personally I am going to follow this approach in other courses that I
am teaching that do not require python and do not require web
development. If you want to try it too and have questions let me
know. I will be happy to share my experience and material.
Massimo
More information about the Edu-sig
mailing list