Courses Offered
Click on a course name for a description and the next scheduled offering:

EECS 368 - Programming Language Paradigms

Programming Language Paradigms is an introduction to programming language fundamentals. The objective of the course is to provide an introduction to alternative programming models that compliment the traditional imperative models taught in introductory courses. The course will provide theoretical insight into various aspects of modern languages while requiring hands-on development of programs using Java, Scheme, and Haskell. EECS 368 is offered every semester, I traditionally teach it in the fall.

Website

EECS 443 - Digital Systems Design

Digital Systems Design expands on material from Digital Logic to examine design techniques for digital systems. The course examines register transfer level design, systems level CPU design and specification, data and control path design, and basics of digital systems simulation and synthesis using VHDL. EECS 443 is always offered in the Spring semester when I traditionally teach it.

Website

EECS 662 - Programming Languages

This course is an undergraduate introduction to programming language concepts. The course is taught each semester. I will be teaching the Fall 2008 section.

Website

EECS 690 - Generic Programming

This course is an introduction to generic and polytypic programming using Haskell. This course is offered irregularly.

EECS 743 - Static Analysis

This course is an introduction to techniques for performing static software analysis. It is offered irregularly and is currently not scheduled to be taught.

EECS 762 - Programming Language Foundation I

Programming Language Fundamentals is an introduction to the semantics of programming languages. The course will present modern approaches for defining dynamic and static semantics as well as verifying definitions and implementing interpreters. We will start with dynamic semantics defining languages using operational, denotational, and axiomatic semantics. We will then overview domain theory and being looking at static semantics and types. The course concentrates on pragmatic issues and requires both specification and verification of semantics and implementation of interpreters.

Website

EECS 755 - Systems Requirements Modeling

Systems Requirements Modeling and Analysis is an advanced introduction to modern techniques for specification, verification and implementation of computer-based systems. Topics covered are equally useful for hardware and software verification. We will learn to write formal specifications, refine specifications and verify that implementations meet their requirements. Specific topics include axiomatic specification, invariants, algebraic types and induction, constructive specification, assume-guarantees style specification, safety and liveness, and natural deduction. Currently we use the Isabelle proof tool, but techniques apply equally well to other verification systems. EECS 755 is offered every other fall semester. Next offering will be Fall 2009.

Website

EECS 843 - Programming Language Foundation II

Programming Language Foundation II is a continuation of Programming Language Foundation I focusing on static semantics and type systems. Starting with the simply typed lambda calculus, we will explore defining types consistent with implementations in modern programming languages. We will discuss type inference and type checking and explore the Curry-Howard correspondance. We will continue by examining recursive types, universal and existential types, System F and the Lambda Cube. EECS 843 is scheduled to be offered again in Spring 2009 and has EECS 762 as a hard prerequisite.

EECS 955 - Theoretical Foundations of Software Construction

Theoretical Foundations of Software Construction is an introduction to formal and principled techniques for synthesizing and developing software. Prerequisites are EECS 755 or EECS 762. This course is taught irregularly and is currently not scheduled to be taught.
Undergraduate Advising
For "official" advising appointments, please bring a draft of your schedule. I will have your ARTS form and your departmental folder. Students are welcome to discuss academic advising, graduate school, and employment issues throughout the year, not just during the advising period. Please feel free to make an appointment or visit during office hours. I will not sign enrollment forms for other advisors without permission from them or the department office.

Graduate Advising
I advise students working in my research group exclusively. If you have been assigned to me by the department, I am more than happy to help out, but this is not a commitment to long-term graduate advising. I will not under any circumstances sign forms related to I-20, OPT or CPT visas for anyone except my own students.