|
Professional experience
|
|
Monmouth College
|
| 2005-present |
Associate professor, department of mathematics and computer science. Undergraduate courses: introductory programming, principles of programming
languages, formal languages and automata, operating systems, architecture, software engineering.
|
|
University of Wisconsin - Milwaukee
|
| 2000-present |
Associate scientist, computer science department.
Graduate and undergraduate courses: principles of programming
languages, formal languages and automata. Supervision of M.S. and
Ph.D. students; textbook development; sponsored research.
|
| 1998-2000 |
Assistant professor, computer science department.
Graduate and undergraduate courses: analysis of algorithms, principles of programming
languages, optimizing compilers. Supervision of M.S. and Ph.D.
students; sponsored research.
|
|
Western Illinois University
|
| 1997-1998 |
Associate professor, computer science department.
|
| 1993-1997 |
Assistant professor, computer science department.
Undergraduate and graduate courses: CS1, CS2, programming language theory, analysis of
algorithms, compiler construction, C, C++, computer architecture, automata and formal
languages, fuzzy logic.
|
| 1992-1993 |
Cornell University
|
|
Teaching assistant.
Undergraduate courses: CS1, CS2, Scheme.
|
| 1985-1988 |
True BASIC, Inc.
|
|
Design engineer. Developed an intermediate-code compiler with integrated
editor and debugging environment for various microcomputers.
|
| 1982-1984 |
Dartmouth College
|
|
Systems programmer. Maintained legacy mainframe operating system.
Implemented file system for its modern replacement. Developed common run-time environment
and virtual-memory loader for PL/1, BASIC, Pascal and Fortran languages.
|
|
|
|
Education
|
| 1989-1993 |
Cornell University
|
|
Ph.D., computer science. Minor, electrical engineering. Thesis research:
high-level optimization of functional languages.
|
|
M.S., computer science.
|
| 1980-1984 |
Dartmouth College
|
|
B.A., mathematics, with honors.
|
|
|
|
Research publications
What is a class invariant? In: Proceedings of the
2001 ACM
SIGPLAN - SIGSOFT Workshop on Program Analysis for Software Tools and
Engineering, (Snowbird, Utah, June 18-19, 2001), pp. 86-89.
This paper discusses the problem of finding a useful definition
for the concept of class invariant. It provides a new way of looking
at some of the problems of programming language design.
Program analysis using binary relations. In: Proceedings of the ACM
SIGPLAN '97 Conference on Programming Language Design and Implementation, (Las Vegas,
Nevada, June 15-18, 1997), pp. 249-260.
This paper presents a method for finding binary relations among
the variables of a program. The method constructs a table of binary relations and treats
the program as a collection of constraints on tuples of relations in the table. An
application of the method analyzes programs of size n in O(n2) time.
Proof of the interval satisfiability conjecture. Annals of
Mathematics and Artificial Intelligence, 15(II), 1995, pp. 231-238.
This paper resolves an open problem published by Shamir and
Golumbic in the Journal of the Association for Computing Machinery, 40(5), 1994. They
studied the complexity of a family of problems involving reasoning about intervals. My
paper provides a missing NP-completeness proof.
Optimization of functional programs by grammar thinning. ACM
Transactions on Programming Languages and Systems, 17(2), Mar. 1995, pp. 293-339.
This paper describes my work on the optimization of functional
programs. Programs are represented as graph grammars, and optimization proceeds by
counterexample: when a graph generated by the grammar is found to contain an unnecessary
computation, the optimizer attempts to reformulate the grammar so that it never again
generates any graph that contains that counterexample. Related papers include:
Principled optimization of functional programs, extended
abstract. In: Proceedings of the Fifth International Workshop on Graph Grammars and
their Application to Computer Science, (Williamsburg, Virginia, Nov. 13-18, 1994),
pp. 224-229.
Principled optimization of functional programs. Ph.D. thesis, Cornell
University, Aug. 1993.
A formal definition of unnecessary computation in functional programs. Technical report
TR 92-1260, Cornell University, Jan. 1992.
Relational constraint: a fast semantic analysis technique. Technical
reportTR 92-1319, Cornell University, Dec. 1992.
Thinning context-free languages. Technical Report TR 92-1318, Cornell University,
Dec. 1992.
|
|
|
|
Other scholarly publications
Formal Language: A Practical
Introduction. To be published by Franklin, Beedle & Associates,
Inc., June 15, 2007.
I developed this textbook for courses in formal
language and automata. The book introduces the foundations of
computer science in a way that is accessible to students whose main
interest in computer science is practical, and who do not have a strong
mathematical background.
Modern Programming Languages: A Practical
Introduction. ISBN 1-887902-76-7. Franklin, Beedle & Associates,
Inc., 2003.
I developed this textbook for my UWM course in
programming language concepts. It leads students to think about
abstract programming language concepts, starting from a foundation of
simple programming exercises in ML, Java, and Prolog. It has been adopted for use at many colleges and universities in the US, including UCLA and Penn State, and at several schools outside the US, including Vrije University Amsterdam and the Kuwait University.
Fluent Pascal: The Pascal Trainer Laboratory Guide. ISBN 0-07-068834-6.
McGraw-Hill, 1996.
The Pascal Trainer. In: Proceedings of the twenty-seventh SIGCSE
technical symposium on computer science education, (SIGCSE '96, Philadelphia,
Pennsylvania, Feb. 15-18, 1996), pp. 261-265.
This paper describes my novel method of teaching programming to
beginners. I believe that beginners should get plenty of practice with simple algorithmic
expression. To this end I built the Pascal Trainer: a self-contained editor, compiler,
interpreter, tester and problem bank. The Trainer presents students with carefully chosen
sequence of simple programming exercises, starting with expressions and working up to
procedures and functions. Students get to practice with the language instead of listening
to lectures about it, and I get the pleasure of helping them individually when they get
stuck.
|
|
|
|
Invited talks
Roots: Concerning Ancient Greece, Modern Algorithms, and Piano Tuning. UWM IEEE-CS group, December 8, 2005.
The limits to computation. Stirling College, April 21, 2004; Augustana College, May 1, 2005.
Analysis of class invariant binary relations. Dagstuhl Seminar on Program
Analysis. Hanne Riis Nielson and Mooly Sagiv, eds. Schloss Dagstuhl, Wadern,
Germany. Apr. 12-16, 1999. Seminar No. 99151, Report No. 236.
|
|
|
|
Grants
Class-invariant assertions in object-oriented programs. NSF grant
CCR-0073070, $187,272. Oct. 1, 2000 to Sept. 30, 2004.
Object-oriented programs contain many "class invariants": propositions
that are true of all objects of a given class, and remain true even as the objects change. These class invariants are the focus of this
research. There are two broad areas of applications for class invariants. First,
class invariants can enable compiler optimizations, allowing programs to run faster. Second, information
about class invariants can be of direct use to programmers, reducing the number of software defects. Research goals include building a
categorization of class invariants that are tractable for static analysis, developing static analysis algorithms for class invariants,
implementing systems that apply class invariants in compiler-style optimization and in verification of user-supplied invariants, and
empirically evaluating the techniques as implemented, with particular attention to their speed and the usefulness of the results for
standard compiler optimizations.
A trainer for rudimentary algorithmic fluency. NSF grant DUE-9653269,
$148,246. Mar. 1, 1997 to Feb. 29, 2000.
The project involved extending my Pascal Trainer to an
integrated web-based trainer for C/C++/Java.
|