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

-----Original Message----- From: kirby urner [mailto:kirby.urner@gmail.com] Sent: Wednesday, August 16, 2006 9:09 PM Subject: Re: [Edu-sig] Python as first language - yet another paper
For those of you who might be interested, I have posted a recent
On 8/16/06, Radenski, Atanas <radenski@chapman.edu> wrote: 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@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
participants (1)
-
Radenski, Atanas