Courses at University of Pennsylvania
Programming Languages and Techniques I
CIS 120 / CSE 120 - Undergraduate requirement
Spring 2013, Spring 2012, Spring 2011, Fall 2008, Spring 2008, Spring 2007

This course is a fast-paced introduction to the fundamental concepts of programming, with OCaml and Java as the main experimental vehicles.  Prior programming experience is assumed. The enrollment is about 140 students per semester.
Advanced Programming
CIS 552 - Undergraduate / Graduate elective
Fall 2012, Fall 2011

A course that uses the Haskell programming language to extend the breadth of experienced programmers and introduce them to a range of modern software engineering practices. Enrollment is capped at 40 students.
Software Foundations
CIS 500 - Graduate requirement
Fall 2004, Fall 2005

This course provides a solid foundation to the study of programming languages, through formalization and proof. It is required for all M.S. and Ph.D. students in Computer and Information Science. Its enrollment is about 70 students per year.

Principles of Programming Languages
CSE 340 - Undergraduate elective
Spring 2003, Spring 2004

An introduction for undergraduates to the study of programming language, through the design and implementation of a series of interpreters. This elective gets about 10 students a year.

Advanced Topics in Programming Languages
CIS 670/CIS 700 - Graduate research seminar

Fall 10, Spring 09, Fall 06, Spring 06, Spring 05, Fall 03, Fall 02

An advanced graduate seminar for Ph.D. students in programming languages. The topic changes from semester to semester, in Fall 2002 we covered parametric and ad hoc polymorphism. In Fall 2003, we covered advanced type systems, including logical relations, typed operational reasoning, dependent types, effects and regions, and module systems.  The attendance is around a lively 10 (most attendees are not registered for the course.).

Courses at Cornell University
Java Practicum
CS 212 - 1 Credit project course
Fall 2001 

A 1 credit project course required for CS majors, intended to be taken concurrently with CS211, Computers and Programming. During the Fall 2001 semester it had an enrollment of about 60 student. This project course introduces the student to the ways of software engineering using the Java programming language. The course requires the design and implementation of several large programs.

Semantics of Programming Language
CS 611 - 3 Credit, graduate course
Fall 1998 (Teaching Assistant)

A core graduate course covering the semantics of programming languages, including the principles of formal notation for describing computations, and tools for analyzing and proving properties of computations.

C++ Programming
CS 213 - 2 Credits (Pass/Fail)
co-taught with Tugkan Batu
Fall 1997

2 credit, pass/fail course, with an enrollment of about 50 students. This was a semester long C++ course for students who already knew how to program in C or Pascal. Tugkan and I collaborated to design this course; we alternated preparing and giving the lectures and preparation of the assignments, working together to develop the final project. 

A Taste of UNIX and C
CS 214 - 1 Credit (Pass/Fail), 4 weeks
Spring 1997

1 credit, pass/fail, 4 week course, with an enrollment of about 20 students. The lectures demonstrated various development tools in the UNIX operating system, and the course grade was determined by a small project written in the C programming language.

Stephanie Weirich