Kevin Angstadt


Visiting Assistant Professor of Computer Science
Department of Mathematics, Computer Science, and Statistics

St. Lawrence University


  • +1 (315) 229-1875
  • Bewkes Science Hall 121-1
    Department of Mathematics, Computer Science, and Statistics
    St. Lawrence University
    23 Romoda Drive
    Canton, NY 13617

Summer 2021 Student Hours

My student hours for Summer 2021 are held on Zoom. If you in one of my classes, the link is on your Sakai course page. Other individuals may email me for a link.

I'm also available by appointment. Email me to schedule a time!

About Me

Curriculum Vitae

I am a visiting assistant professor of computer science at St. Lawrence University. My research expertise is in the intersection of computer architecture, programming languages, and software engineering where I develop programming support for emerging hardware technologies. Additionally, I teach a breadth of computer science courses, but generally focus on more systems-oriented courses.

In 2020, I received my Ph.D. in Computer Science and Engineering from the University of Michigan. My advisor was Westley Weimer. In 2016, I received a Master of Computer Science (MCS) from the University of Virginia. My co-advisors were Westley Weimer and Kevin Skadron. In 2014, I received a B.S. in Computer Science, Mathematics, and German Studies from St. Lawrence University. My academic advisors at St. Lawrence were Ed Harcourt (CS), Dan Look (Math), and Ingrid Stipa (German Studies).

In my spare time, I enjoy (among other things) cooking, hiking, 3D printing and modeling, electronics, knitting, playing woodwind instruments, photography, and reading.

Previously, I was Ph.D. candidate in Computer Science and Engineering at the University of Michigan. I was also an Engineering Teaching Consultant for the Center for Research and Learning on Teaching in Engineering at the University of Michigan. Prior to this, I was a Ph.D. student in the Department of Computer Science at the University of Virginia and an Olive B. and Franklin C. Mac Krell Fellow at the Jefferson Scholars Foundation.

I recently completed a successful search for academic positions in departments that support and emphasize undergraduate education, research, and mentorship. For interested individuals, I have provided my curriculum vitae, teaching philosophy, research philosophy, and thoughts on diversity, equity, and inclusion here for reference. I am always delighted to discuss teaching, research, and efforts to broaden participation in computing.

Academic Highlights

  • July 2020: Joined St. Lawrence University as Visiting Assistant Professor of Computer Science
  • May 2020: Graduated with Ph.D. in Computer Science and Engineering from the University of Michigan
  • January 2020: Completed the Graduate Teaching Certificate program run by the Center for Research on Learning and Teaching (CRLT) at the University of Michigan
  • May 2017: Awarded UVA Department of Computer Science Graduate Student Awards for Outstanding Teaching and Service
  • May 2016: Received Master of Computer Science (MCS) from the University of Virginia
  • August 2014–August 2017: Olive B. and Franklin C. Mac Krell Fellow, Jefferson Scholars Foundation (Three fellowships awarded among 394 offers of admission in Engineering at UVA)
  • May 2014: Graduated summa cum laude from St. Lawrence University with a BS in Computer Science, Mathematics, and German Studies


Current Semester

CS 140
Intro to Computer Programming
CS 340
Software Engineering

Previous Semesters

CS 140
Intro to Computer Programming
CS 256
Data Structures
CS 364
Programming Languages
EECS 281
Data Structures and Algorithms
EECS 398
Practical Techniques for Teaching Computing
CS 4610
Programming Languages
CS 4640
Programming Languages for Web Applications

Guest Lectures

  • Lexical Analysis Foundations and Lexical Analyzer Generators. EECS 483 (Compiler Construction), University of Michigan, Winter 2018.  Recording Available
  • Designing and Presenting Programming Languages in the Broader Research Community. EECS 590 (Advanced Programming Languages), University of Michigan, Fall 2017.  Lecture Slides  Reading Guide
  • Data-flow Analysis. CS 4501-005 (Compilers Practicum), University of Virginia, Spring 2016.  Resources
  • Accelerating Pattern Searches with Hardware. CS 6354 (Computer Architecture), University of Virginia, Spring 2016.  Lecture Slides
  • Designing and Presenting Programming Languages in the Broader Research Community. CS 6610 (Programming Languages), University of Virginia, Fall 2015.  Lecture Slides  Reading Guide

German Courses

While an undergraduate at St. Lawrence University, I taught a total of eleven discussion sections for German Language (DaF) courses.

A selection of my teaching resources may be found here.

Curricula (including materials and selection of topics and activities) for the German Labs were developed by myself to coordinate with the schedule of topics in lectures. An example syllabus is available here.

  • GER 104B: Lab for German 104 (Spring 2014)
  • GER 102C: Lab for German 102 (Spring 2014)
  • GER 102D: Lab for German 102 (Spring 2014)
  • GER 103B: Lab for German 103 (Fall 2013)
  • GER 101B: Lab for German 101 (Fall 2013)
  • GER 101C: Lab for German 101 (Fall 2013)
  • GER 101E: Lab for German 101 (Fall 2013)
  • GER 101B: Lab for German 101 (Fall 2012)
  • GER 101C: Lab for German 101 (Fall 2012)
  • GER 102C: Lab for German 102 (Spring 2012)
  • GER 101C: Lab for German 101 (Fall 2011)



Broadly, my personal research interests fall in the intersection computer architecture programming languages, and software engineering. I enjoy using my computing knowledge to help solve the world's problems, and thus it's not uncommon for me to work on projects outside of my nominal areas of expertise (especially with motivated students).

Programming Support for New and Emerging Technologies

My primary research interest is in the development of suitable abstractions, languages, and tools for new and emerging technologies as well as the design of new hardware architectures to address present-day challenges. In particular, I have studied the application of deterministic- and non-deterministic finite automata (DFAs and NFAs) an push-down automata (PDAs) as a hardware abstraction layer for accelerators.

Collected data is often analyzed in a multitude of different ways, and many algorithms in areas such as data-mining, bioinformatics, deep packet analysis, and spam filtering require identification of exact or near-match character patterns. Special hardware accelerators, such as FPGAs and custom hardware (e.g., Micron's Automata Processor, the Cache Automaton, etc.) can dramatically reduce processing time for these tasks. Because of pressure from industry, physical design limits, and the rapid growth of data collection, these devices are becoming increasingly common in general-purpose computing; however, these technologies often rely on abstractions or assumptions not supported by present techniques for programming, debugging, and securing systems. Thus, programming these devices can be challenging for non-expert users. My goal is to ease the programming burden by providing automated transformations, new language support, and debugging tools, which enable researchers to leverage these performance improvements.

Software Tools


Trusted and Resilient Mission Operation for Autonomous Vehicles

UVA open house
Kevin with a Drone
x86 rover
x86 rover

Autonomous vehicles, such as quadcopters and rovers, perform critical tasks for government agencies and emergency services. Missions often take place in locations where communication with human operators is infrequent or delayed, such as distant planets, war zones, and remote crash sites. Consequently, humans may not be able to take manual control to recover the vehicle if the software begins to malfunction. Many of these malfunctions, or software bugs, do not cause total loss of the vehicle, but rather hinder the successful completion of a mission (e.g., a sample is not collected or a camera is not pointed in the correct direction). How can an autonomous vehicle fend for itself when such malfunctions occur?

To help solve this problem, I collaborate with a team of academics and industry practitioners to combine best-in-breed techniques for securing software, detecting attacks, and automatically repairing bugs in source code. While detecting problems in real-time and repairing software are challenging in and of themselves, deploying new software mid-flight (and avoiding crashes) presents an additional set of challenges. My colleagues and I have been developing a dual controller hardware design that includes fail-over hardware for situations when the main controller is compromised. Additionally, we have developed selective checkpoint and restore algorithms to maintain critical mission state while loading new software.

Our contributions aim to increase system resiliency for autonomous vehicles, allowing more missions to complete successfully in the face of software defects and malicious attacks.

Tutorials and Project Information

I have developed several tutorials for configuring quadcopter software and hardware. Please see below for links to publicly-available documentation.

GPU Database Acceleration

While attending St. Lawrence University, I worked along with my faculty advisor, Ed Harcourt, to complete a year-long senior honors research project, entitled Accelerating Database Joins Using a General Purpose GPU. For this project, I implemented an experimental database engine in CUDA that supports relational joins between tables.


I worked with Robin Lock, Patti Frazer Lock, Ed Harcourt, and Rich Sharp to develop a collection of web-based statistical simulation apps. The application, known as StatKey, accompany Statistics: Unlocking the Power of Data.

As of March 1, 2019, StatKey has had over one million users around the world (according to Google analytics).


statkey 1m hits


Technical Reports

Presentations and Posters