Alexa VanHattum
Assistant Professor of Computer Science
My interests span programming languages and computer systems.
I use lightweight formal methods to improve the reliability and efficiency of low-level computer systems. I enjoy collaborating with industry groups and open-source software projects.
I love demystifying systems programming for undergraduate students—I am excited to work with Wellesley research assistants and to teach courses across computer systems, formal methods, compilers, and programming languages.
For my complete CV and more about my research, teaching, service, see my website.
Education
- B.S., Brown University
- M.S., Cornell University
- Ph.D., Cornell University
Current and upcoming courses
This course focuses on modeling and specifying computer systems. Students will learn how to reason about the properties and expected behavior of modern software. Topics include designing specifications, property-based testing, model checking, and satisfiability solvers. We will use real-world case studies to motivate the analysis of reliable computer systems. By the end of the course, students will be able to (1) design specifications for the expected behavior of a system, (2) model system behavior using state-of-the-art tools with automated formal methods, and (3) identify and prevent software bugs. While prior experience with algorithm design and analysis is expected, the course will cover any necessary background in systems programming and formal methods.
Enrollment in this course is by permission of the instructor only. Students who are interested in taking this course should fill out this Google Form.
-
This course introduces the principles underlying the design, semantics, and implementation of modern programming languages in major paradigms including function-oriented, imperative, and object-oriented. The course examines: language dimensions including syntax, naming, state, data, control, types, abstraction, modularity, and extensibility; issues in the runtime representation and implementation of programming languages; and the expression and management of parallelism and concurrency. Students explore course topics via programming exercises in several languages, including the development of programming language interpreters.