Our research on model-driven engineering develops languages and tools to express complex systems by describing their essential properties, often within a restricted domain, while automating or providing automated assistance to generate or synthesize an efficient implementation of the system.


  • Product Line Engineering
    • Feature Oriented Programming. Program Refinement.
  • Program Synthesis
    • Generic Algorithm Theories. Problem Specification. Automatic Programming.
  • Component Engineering
    • Modularity. Modular Proofs. Design Patterns.
  • Domain-Specific Languages
    • Domain Modeling. Metamodels. Formal Semantics. Language Integration.
  • Optimization
    • Partial Evaluation. Algorithm/Representation Selection.
  • Applications
    • User Interfaces. Security. Data Abstraction. Enterprise Applications. Databases. Physics Simulation.


  • CS 345 -- Undergraduate Programming Languages
  • CS 345H -- Undergraduate Programming Languages: Honors
  • CS 347 -- Undergraduate Database Systems
  • CS 371S -- Object-Oriented Software Development
  • CS 378 -- Software Design
  • CS 386D -- Graduate Database Systems
  • CS 386L -- Graduate Programming Languages
  • CS 392F -- Feature Oriented Programming
  • CS 394P -- Automatic Programming

Research Groups: