Are you interested in:
- Hacking on complex systems?
- Getting lost in mathematical formalisms?
- Designing development tools for actual developers?
- Exploring the frontiers of computer programming?
If one, more, or all of these things strike your fancy, then you should consider getting involved with my research group!
Characteristics of Successful Students
There are several key traits of students that are successful in my group that you should be aware of:
- Appropriate Preparation: virtually all of my work involves functional programming in some way, not just as an implementation language but also the language of study. Therefore, comfort with a functional programing language is useful. Most of my work also slants heavily towards logic and deductive reasoning so comfort with fundamental discrete mathematics is also useful. Finally, much of the hacking we do requires knowledge of basic data structures and algorithms. Note that while CSC 151, 208, and 207, respectively, cover these knowledge areas, these classes are not prerequisites for getting involved. Feel free to get in touch with me and share your experience, so that we can determine if my research group is a good fit for you!
- Hacker’s Mindset: regardless of the project you work on, you’ll frequently be tasked to work with many different tools with varying degrees of usability. You will frequently need to work in the terminal and when things go wrong, and you’ll need to be comfortable with searching for random error messages on Stack Overflow, or worst, random developers’ blogs. With a hacker’s mindset, you should feel comfortable working in such environments and have the gumption to tackle these sorts of problems without getting discouraged quickly.
- Love of the Grind: in my research group, you will be working on hard problems from the beginning, whether they are theoretical or practical in nature. The capability to “persevere productively”—see hard problems through to completion via steady, incremental progress—is essential for the work you will do.
Summer MAP Opportunities
The primary way to get involved with my research is through Grinnell’s Mentored Advanced Program which supports students in doing summer research with faculty for credit and a modest stipend. I offer positions in my research group to work on my on-going projects:
- Scythe: type-directed program synthesis.
- Peter-Michael Osera. Constraint-based Type-directed Program Synthesis. In Type-drive Development (TyDe), August 2019.
- Orca/Snowflake: proof pedagogy for undergraduate mathematics
- David G. Wonnacott and Peter-Michael Osera. A Bridge Anchored on Both Sides: Formal Deduction in Introductory CS, and Code Proofs in Discrete Math. arXiv:1907.04134 [cs.PL], July 2019.
- Reactamole: functional molecular programming
- Titus H. Klinge, James I. Lathrop, Peter-Michael Osera, and Allison Rogers. Reactamole: Functional Reactive Molecular Programming. In DNA Computing (DNA 27). 2021.
Feel free to come talk to me via office hours for more information on what we’re currently up to in each project!
Check out this talk I gave at the University of Iowa to get a better sense of my work.
How to Apply
Please do the following by the February 26 common application deadline:
- Fill out Common MAP Application for the Science Division Make sure to list me as a potential research advisor when filling out the form.
- [Basics] Exercise: 1 star, standard (identity_fn_applied_twice)
- [Induction] Exercise: 2 stars, standard, especially useful (basic_induction)
Feel free to complete additional exercises and work through additional chapters if you find the material interesting!
- Email your completed exercises from Software Foundations to me, and we will schedule a time to meet and discuss your work and interests.
If you have any questions, I’m happy to answer them via email; just let me know!