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