Teaching


CIS 706/801: Translator Design I & II

The course teaches modern compiler techniques applied to general-purpose programming language. The goal of the course is to give students a working knowledge of the foundations, tools, and engineering approaches used in developing formal language translators. The emphasis is on the construction of compilers to position students to build translators for little languages in their careers.


CIS 301: Logical Foundations of Programming

This course teaches the basic elements found in a formal logic including syntax for claims and rules for making deductions, as well as on how to judge if the rules are suitable in the sense that they only lead to claims that match the reality of the domain that are being reasoned. The focus will be on formal logics for reasoning about program behavior.


CIS 501: Software Architecture and Design

This course is about designing and implementing component-based software systems using blueprints and architectural design patterns.


CIS 771: Software Specifications

The course teaches a collection of techniques that lie at the foundation of an approach to software development that can enable the construction of large highly reliable software. That foundation is specification of the precise meaning of the execution behavior of software. The techniques covered span the development process ranging from high-level semantic modeling, to system architecture design, and to coding and debugging.


CIS 842: Specification and Verification of Reactive Systems

This course studies various model-checking techniques with the goal of applying those techniques to real concurrent software systems.