[Edu-sig] Python as first language - yet another paper

Radenski, Atanas radenski at chapman.edu
Tue Aug 29 03:49:14 CEST 2006


> -----Original Message-----
> From: kirby urner [mailto:kirby.urner at gmail.com]
> Sent: Wednesday, August 16, 2006 9:09 PM
> Subject: Re: [Edu-sig] Python as first language - yet another paper
> 
> On 8/16/06, Radenski, Atanas <radenski at chapman.edu> wrote:
> > For those of you who might be interested, I have posted a recent
paper
> > on the use of Python as a first language. The paper is entitled:
> >
> > "Python First": A Lab-Based Digital Introduction to Computer Science
> >
 
> Thank you sir.

Thank you for reading the paper.  I agree with most of your comments; a
thoughtful message indeed. Your reasoning on terminology needs some
response, though (below).

> I think your arguments will be understandable to people outside of CS,
> which is important, as there's a lot of concern about how we're not
> getting enough competent technical people across the board, and CS is
> seen as a bottleneck, i.e. its inability to recruit seems
> counter-intuitive given it has, in principle, access to a lot of the
> best toys.  CS-related careers have a lot of glitz and glamour.  But
> as you say, a dry course in nothing-but-Java doesn't give that
> impression, and would-be stars wander off to other majors.
> 
> Internally to CS, however, there's the more esoteric line we draw, not
> between commercial and education languages, but between system and
> agile languages, the former being used to write the latter.  Classic
> core Python is a very commercial project because it's written in
> lickity-split C code, and that's about the fastest on the planet.

I use terminology with a purpose in this paper. Speaking of educational
and commercial languages serves my purpose, while speaking of system and
agile languages would not.

Here is part of my message:

"In the not so distant past, introductory computer science education was
dominated by languages that were specifically designed for education,
such as Pascal, Basic, and Logo." I mean Wirth's Pascal (not Delphi),
Kurtz's and Kemeny's Basic - the one also beloved by Bill gates (not
VB.net), and the Logo of the Feurzeig and Papert flavor. Such
educational languages are intended for small scale programming. They are
simple and manageable by beginners.
 
Also:

"Today, the majority of introductory computer science courses are based
on a commercial language, such as Java or C++." Commercial languages,
such as Java and C++, are intended for large scale software development.
Such languages are naturally complex and difficult to learn by beginners
(who originally do only small scale programming).

The full discussion is in the paper
(http://www1.chapman.edu/~radenski/research/abstracts/python-iticse06.ht
ml). My point is that this particular conversation cannot be carried out
in terms of 'system' and 'agile' language. For one thing, Pascal, Java,
and C++ are all considered system languages
[http://en.wikipedia.org/wiki/Systems_programming_language]. Besides, it
is difficult to decide if Logo and Basic (the original ones) are system
or agile languages. May be they are neither system nor agile languages,
yet these languages are quite clear educational ones. So I think that
speaking of educational and commercial is the right thing to do in the
context of the paper.

> As for whether Java is the right follow-on for a CS2, I think a bigger
> success in recruiting will open more options there too.
> 
> Yes, the Java track is secure for the time being.  But don't deny
> those who wish to dive into C, now that they're hooked, now that they
> know that coding is for them.  Explore the guts of CPython, the study
> the Java and C# implementations.

ANSI C is a wonderful language. The only hurdle to a student is to
understand that arrays and pointers are the nearly the same thing. Once
this is realized, C should look like a really simple language to the
student.

C++ is a different story. It is the product of a pretty long evolution.
The whole thing lacks uniform design and is messy. For example, is it
really necessary to have C++ objects possibly allocated on the stack,
not only in the heap? And look at exceptions - they seem pretty ugly
linguistically. Java is now going the same way - evolution clutters and
complicates the language. Until Java 5, Sun managed to hide the
evolution inside the API only, though. 

Python, in its entirety is not simple, either. Hey, we got two styles of
classes, for example. But Python has this beautiful kernel that one can
use to teach beginners effectively, by arranging concepts in a
reasonable hierarchy, without many cyclic dependencies. It is not like
teaching Java, when you have to say all the time: "This concept is
important, but we will study it later." The design of Python was
initially motivated with educational goals, and it shows. Yet, the
language caught up with industry, which is very fortunate. A wonderful
hybrid language: good for beginners and good for advanced work.
Functional, imperative, OOP - you name it :-) 

> Kirby

Atanas

Atanas Radenski      
mailto:radenski at chapman.edu      http://www.chapman.edu/~radenski/

There are wavelengths that people cannot see, there are sounds that
people cannot hear, and may be computers have thought that people cannot
think -- Richard Hamming



More information about the Edu-sig mailing list