Just joined list and haven't taken the time to read the archives yet, so maybe this is a silly post, but I thought it worth putting out there that I will be teaching an Introduction to Programming for non-computer science majors at Wesleyan University this fall, having just taken a position there as a visiting professor. I've convinced the other Computer Science faculty involved to abandon their attempts to make this course work with C++ and Java and to use Python instead. As part of the preparation for my introducing Python at Wesleyan I put together a web page with arguments for using Python (and URLs for more), information about where to find Python tutorials, installations, additional modules, tools, books, etc., and some recommendations on how to get started for different audiences, including people new to programming, experienced programmers, and people in fields such as Biology and Chemistry who need to do some practical programming without become serious programmers. You can find this web page currently at http://homepage.mac.com/MLMConsulting/PythonStart.html. I am likely to drop this site soon and move its contents to my personal site, http://homepage.mac.com/MitchellModel/, so if you don't find it at the first URL, look for it somewhere under the second. I think I've done a pretty thorough job of exploring existing resources. Some I've omitted simply because they are too old to be of much use to people new to Python. Others because I thought the ones I listed served my purposes better. I would be delighted to hear recommendations for other books, papers, URLs, software, IDEs (especially), etc. that would be good to add to the page. I plan to use the textbook Learn to Program Using Python (http://www.aw.com/catalog/academic/product/1,4096,0201709384,00.html), with the Python Essential Reference (http://newriders.com/books/product.asp?product_id={2DF0A321-D759-44A9-8DC2-1900CC090956) as an optional resource. I'll also point students to the online book How to Think Like a Computer Scientist : Learning with Python (http://www.ibiblio.org/obp/thinkCS.php). Since I'm new to the list and plan on keeping the list informed of my experiences introducing Python to the Wesleyan introductory programming course, let me point you http://c2.com/cgi/wiki?MitchellModel as one place you can find out more about me. In addition to teaching computer science courses at Wesleyan I will be working with the science faculty as part of a new interdisciplinary program in Integrative Genomics to develop and teach informatics modules for their genomics-related science courses. (You can read more about the program at http://www.wesleyan.edu/argus/archives/aa_archive_dec072001/dateyear/n2.html and http://www.wesleyan.edu/hughes/ (though the latter is two years old). I am about to install a Wiki (cf. http://homepage.mac.com/MLMConsulting/WhatsWiki.html for introductory information and links about Wiki if your not familiar with the concept or technology) at Wesleyan to facilitate interdisciplinary resource pooling, discussion, and planning. I'm tempted to use the Python-based Moin Moin implementation, but have decided on the Perl-based (sorry) TWiki because it appears to be the most mature and featureful Wiki that is freely available and can be installed and run without a lot of hands-on effort, while still being quite customizable and able to support enterprise-wide activity. I look forward to sharing my experience in these efforts and hearing opinions from others heading, or thinking of heading, in the same direction. Having taught many introductory and computer science courses in many languages to many different kinds of audiences, I find myself thinking that all undergraduate computer courses, whether for majors or not, and whatever the level, should be done in Python. (Of course I've said that about Smalltalk for many years, but Python is less of a leap for the mainstream world:-). -- Mitchell L Model Visiting Associate Professor Computer Science
At 07:59 PM 7/25/2002 -0400, Mitchell L Model wrote:
Just joined list and haven't taken the time to read the archives yet, so maybe this is a silly post, but I thought it worth putting out there that I will be teaching an Introduction to Programming for non-computer science majors at Wesleyan University this fall, having just taken a position there as a visiting professor. I've convinced the other Computer Science faculty involved to abandon their
I applaud your enthusiasm for Python, which is a great language for beginners, as well as more advanced programmers. I think a central question for educators is "Python plus what else?" Because, even if Python is eminently teachable, we always want to provide experiences and familiarity with multiple languages. A course which produced students who mostly turned up their nose re other languages and said "no thanks, just Python for me" will have failed, IMO (especially considering the fact that Python is written in C, Jython in Java). Python should be used as a way to deepen appreciation for concepts and languages across the board. Python is so good partly because it provides familiarity with concepts that'll come up again and again, no matter what tools you're using. Kirby
At 5:26 PM -0700 7/25/02, Kirby Urner wrote:
At 07:59 PM 7/25/2002 -0400, Mitchell L Model wrote:
Just joined list and haven't taken the time to read the archives yet, so maybe this is a silly post, but I thought it worth putting out there that I will be teaching an Introduction to Programming for non-computer science majors at Wesleyan University this fall, having just taken a position there as a visiting professor. I've convinced the other Computer Science faculty involved to abandon their
I applaud your enthusiasm for Python, which is a great language for beginners, as well as more advanced programmers.
I think a central question for educators is "Python plus what else?" Because, even if Python is eminently teachable, we always want to provide experiences and familiarity with multiple languages.
A course which produced students who mostly turned up their nose re other languages and said "no thanks, just Python for me" will have failed, IMO (especially considering the fact that Python is written in C, Jython in Java). Python should be used as a way to deepen appreciation for concepts and languages across the board.
Python is so good partly because it provides familiarity with concepts that'll come up again and again, no matter what tools you're using.
Good points. Remember, though, that this is the introductory course for students not planning to major in Computer Science. They don't necessarily need exposure to multiple languages, since the goal is simply to introduce the concepts and techniques of computer programming and develop basic competency in writing computer programs. However, we will next face three questions related to your challenge: What language to use in the introduction to programming for potential majors -- C++? Java? Python? (Scheme was used for several years some years past, something I have a lot of sympathy for but which tends not to work out in practice because the surrounding computer culture is so different than Lisp's.) Next semester I will teach the usual data structures course, to students who will have been taught Java (I think) in the introductory course. Should I do it in Java? do a quick immersion to Python and use that? Use several languages? (The nature of an introductory data structures course has changed tremendously since I started teaching around 1980, primarily because contemporary languages provide in their libraries or easily accessible external modules most of the data structures the implementation of which the course used to spend most of the time discussing. Now we can teach the concepts and use of data structures if we want, and spend less time on the tedious implementation details -- though of course some of those should be at least shown, we no longer have to rub student noses in them.) What do we do about students who take the non-major introduction and to their surprise find themselves wanting to go on in Computer Science? They're not ready for the second semester data structure course, because they missed a lot of the conceptual material that's in the introduction for majors but not in the introduction for non-majors. But it might be silly to have them sit through another introductory programming course, because they will already know the basic techniques. I don't think Wesleyan has the staff to offer yet another low-level course, in order to provide non-majors with an appropriate transition into the major sequence. -- Mitchell L Model Visiting Associate Professor Computer Science
Good points. Remember, though, that this is the introductory course for students not planning to major in Computer Science. They don't necessarily need exposure to multiple languages, since the goal is simply to introduce the concepts and techniques of computer programming and develop basic competency in writing computer programs. However, we will next face three questions related to your challenge:
My programming 101 course (forget the actual name) featured a smattering of Assembler, FORTRAN, PL/1, SNOBOL and a few others. I liked the overview this gave, along with chatter about machine-level stuff like registers, the program status word, etc. etc. To my mind, "intro" and "overview" go together. This wasn't necessarily a course for computer science majors, although it was taught by the engineering department (I ended up in the philosophy department, though as a freshman I didn't yet know this'd be my fate). So Python is a great language to sketch out ideas, such as class structures with inheritance and polymorphism. But then you can at least show how these ideas get implemented in Java, maybe share that chart showing the (huge) class hierarchy that comprises the power of that language. Jython is a possible bridge here, for experimentation purposes. You can also show operator overriding in Python, then give a simple example of what this looks like in C++. I think an intro course should clarify these broad categories of language, e.g. interpreted versus compiled, strongly, dynamically and weakly typed. And paradigms for coding, i.e. procedural, functional, and object-oriented. Historical perspective should also be provided. I'm a big fan of this time-line by the way: http://perso.wanadoo.fr/levenez/lang/history.html Python can be a scratch pad for doing interactive experiments, but somehow the presentations should weave in plenty of examples from other languages. You mentioned championing SmallTalk for awhile. You should keep that thread alive.
What language to use in the introduction to programming for potential majors -- C++? Java? Python? (Scheme was used for several years some years past, something I have a lot of sympathy for but which tends not to work out in practice because the surrounding computer culture is so different than Lisp's.)
I could see Python used with potential majors, sure. And here your golden opportunity, given the open source nature of Python, is to start bringing in C by examining Python's guts. I toss this out as a possibility -- not as one who has experience using this approach (I'm not a college teacher -- I spend a lot of time coding for cardiologists, often not in any of the languages mentioned so far in this thread). C/C++ still needs to be a focus, starting early I think. You can use familiarity with Python to bridge not only to C/C++, but to Unix/Linux, presuming we might be starting in Windows. This begins a deeper look at operating system concepts, such as forking processes and threads. Linux/Unix is a more transparent environment for studying these things, and Python is right there at your elbow, helping you learn.
Next semester I will teach the usual data structures course, to students who will have been taught Java (I think) in the introductory course. Should I do it in Java? do a quick immersion to Python and use that? Use several languages?
I like the "several languages" idea. Definitely including Python.
What do we do about students who take the non-major introduction and to their surprise find themselves wanting to go on in Computer Science? They're not ready for the second semester data structure course, because they missed a lot of the conceptual material that's in the introduction for majors but not in the introduction for non-majors. But it might be silly to have them sit through another introductory programming course, because they will already know the basic techniques. I don't think Wesleyan has the staff to offer yet another low-level course, in order to provide non-majors with an appropriate transition into the major sequence.
Curious what kinds of stuff gets left out of the non-major intro course, that you've gotta know to tackle data structures in particular. Kirby
Mitchell L Model wrote:
Just joined list ... I would be delighted to hear recommendations for other books,
I think that Non-Programmers Tutorial For Python by Josh Cogliati, Copyright(c) 1999-2002 Josh Cogliati at: http://www.honors.montana.edu/~jjc/easytut/easytut/ is a particular clear exposition. I think it is important that enthusiasm on the part of the teacher for a particular language doesn't in the student's head get turned into a belief that there is only one valid choice for a computer language. Students, even those who are not headed toward a programming focus of education, need to be left open to thinking of other languages as possible (and maybe even appropriate) choices depending on the situation. When they are programming their microwave or Tivo or whatever, they should be able to recognize that they are engaged in an activity which is similar to other programming activities that they have seen -- even if it isn't an object-oriented approach, for example. --D. -- Dr. David J. Ritchie, Sr. djrassoc01@mindspring.com http://home.mindspring.com/~djrassoc01/
participants (3)
-
djr -
Kirby Urner -
Mitchell L Model