Proposed Classes
CS1 - Fundamentals of Computer Science
This is an introduction to computer science, but with less emphasis on complexities that are useful only to professional programmers, and more on what is useful to scientists and engineers who will be writing their own programs.  The last three weeks offer students an option 1) continue with some examples of Python and C, or 2) a transition to Java for those who will be returning to the "normal" sequence for CS majors.

CS2 - example programs for scientists, engineers, economists, ... - even if you don't understand quantum mechanics!
    PythonOOP - my best shot at a compact introduction to Object Oriented Programming
    Transition to OOP, adding features one step at a time.
 -> -> ->

Other classes where Python has been useful
ECE175 - Computer Programming for Engineering Applications  ( Introductory C for Engineers )
After students are done with this class, C becomes an orphan, seldom used in later classes.  Here is a lecture on Mandelbrot images, showing how a few lines of C accelerates a Python program by 200X.

Phys 305 - Computational Physics. Lecture on numerical integration.  The algorithms are simple enough that it hardly matters whether they are presented in Python or C.  The advantage of Python is in simplifying all the surrounding stuff - validation of user inputs, timing tests, formatting of printed output, and the nice way Python integrates documentation and code.  The "doctests" run exactly as they are shown.

ECE373 - Object-Oriented Software Design
Python is better for teaching OOP than Java, even at this level.  Here are several examples of Python compared to Java, and a class project done in Python.  Python is also useful as an Interface Description Language in a Java project, providing a smooth transition from class diagrams to a complete interface description, to pseudocode, to fully-functional code.
Diagrams - class, object, sequence and state diagrams created using Visio instead of special tools.

ECE474 - Computer-Aided Logic Design  ( Synthesis and Verification Algorithms )
Pseudocode is a useful tool in explaining algorithms, but often it is not clear what the pseudocode means.  Python is sometimes described as "executable pseudocode", and the fact that it is executable, means there is no ambiguity as to its meaning.  The Python examples here are no more complex than the pseudocode in Hachtel & Somenzi.

ECE478 - Computer Networks
Commercial network simulators are complex programs with hundreds of black boxes and mysterious configuration settings.  A better way to learn fundamentals is by writing your own models of network objects and their interactions.  Python makes that simple enough that we aren't just replacing simulator complexity with programming complexity.  The Ethernet examples here show how to model simple network interfaces, and use these models to run a very realistic simulation of network overload.

ECE509 - Computer Security
Research in network security requires a simple, but powerful scripting language and a large library of functions that can be called from a script to perform complex operations like controlling interfaces, crafting special packets, measuring time intervals, parsing strings, interacting with remote hosts, etc.  Python is the language we have chosen to build our Autonomic Internet Identity and Reputation System.

ECE550 - Analog IC Design
Analog IC design requires very complex CAD programs.  Often it harder to learn the program than the design itself.  An alternative preferred by many designers is a scripting language allowing the designer to control exactly how the tools are run.  Most vendors provide Domain-Specific Languages (DSLs) for their CAD programs.  Most of these DSLs are poorly-designed, poorly implemented, and frustrating for the designer.  Python is ideal for this purpose.  Learn this language, and you have not just a DSL for one tool from one vendor, but a general-purpose, very agile language that will help in just about any computational problem you will face.
    EDA Tools Lab - started to switch to Python, but Barnaby left the Dept :>(   cdp_tut01-a1.tar.gz - prototypes of our Python-powered design platform
    Extra Element Theorem - elegant proof

ECE596 - Cryptography
Python has an excellent library PyCrypto, with many useful cryptographic functions and an active user group. Two things which make Python the best choice for this class:
  1) Easy interactive environment for prototyping and experimentation.
  2) Long integers for public keys, etc.