Teaching§
I'm an associate professor of computer science at Illinois Wesleyan University.
As a member of a small department, I've developed and taught over a dozen courses across the CS curriculum. The list below links to syllabi for all of them. Additionally, I collect and curate resources for my classes in CS Codex.
Spring 2026:
- CS 229 - Data Structures
- CS 256 - Computer Organization and Architecture
- CS 354 - Algorithm Design and Analysis
All past courses:
- CS 111 - Physical Computing: 2015m 2012m
- CS 127 - Computer Science I: 2017f 2016f 2014f 2013s 2012f 2011f 2011s 2010f 2009f
- CS 128 - Computer Science II: 2025f 2023f 2022s
- CS 229 - Data Structures: 2026s
- CS 253 - Software Development: 2024f 2022f 2021f 2020f 2019f 2018f 2016f
- CS 256 - Computer Organization and Architecture: 2026s 2025s 2024s 2022s 2021s 2020s 2019s 2018s 2017s 2016s 2015s 2014s 2013s 2012s 2011s 2010s
- CS 330 - Computer Networking: 2025f 2023f 2021f 2018f 2014f 2011f 2009f
- CS 338 - Artificial Intelligence: 2012f 2010s
- CS 354 - Algorithm Design and Analysis: 2026s 2022s 2018s 2017s 2016s 2015s 2014s 2013s 2011f 2010f 2009f
- CS 355 - Programming Languages: 2025f 2024f 2023f 2022f
- CS 370 - Special Topics: 2021s 2011s
- CS 387 - Deep Learning: 2025s 2024s
- CS 456 - Operating Systems: 2020s 2016s 2014s 2012s 2010s
- CS/DS 125 - Intro. to Computer and Data Science: 2019s 2018f
- GW 100 - Gateway: 2010f
Research§
Infeasible Constraint Systems§
A major focus of my research has been on analyzing infeasible constraint systems. Specifically, I have developed algorithms for extracting information about their infeasibility in the form of Minimal Unsatisfiable Subsets (MUSes) and Minimal Correction Sets (MCSes) as well as autarkies, which are independently satisfiable subsets of constraints. Two major outputs of this work are MUS/MCS enumeration algorithms, CAMUS and MARCO, both with full source code available.
These algorithms are tools for exploring unsatisfiable constraint systems with applications from planning and scheduling to microprocessor design verification. I have applied CAMUS to two digital logic verification tasks: an automated equivalence checker for Verilog with Zaher Andraus, and a logic error diagnosis tool with Sean Safarpour and others at the University of Toronto.
Seeing the value of cardinality constraints in CAMUS, my student Jordyn Maglalang and I developed a "cardinality solver" we call MiniCARD as an extension of MiniSAT. Source code for MiniCARD is available on GitHub.
See my publications for more, and feel free to contact me about any of this.
CS Education with LLMs§
Since 2023, I have been working on applications of large language models (LLMs) in education. The first result of this work was CodeHelp, an automated tutor for CS that provides the explanations and guidance that LLMs can generate while not providing the full solutions that plain chatbots are all too "eager" to share. CodeHelp, other LLM-based tools for education, and a framework for building web applications around these tools are all fully open source in the Gen-Ed framework on GitHub. With coauthors, I have published a few papers on CodeHelp; see my publications for more details.
Tools§
Every now and then I make a web application, script, or other program to scratch an itch. I collect these on the Tools page in case others might find them useful as well.