I’m actively looking for new PhD students!
Hey! If you’ve found this page, you’re (hopefully) looking at me as a potential advisor for a PhD in computer science. Welcome! I’m starting at Princeton for next semester (officially January 17th 2024), which makes fall 2023 the perfect time to apply to the PhD program!
What might we work on together?
My research focuses on designing new Programming Languages to solve problems in Distributed Systems. I also have active, exciting projects purely in PL or DS.
In systems, I’m excited to build new abstractions and systems for wide-area, local-first, or large-scale distributed systems; really anything where the round-trip latency for communication is way too long, or the cost of coordination is way too high. Active projects in this vein include the Hydro project with Berkeley, the Derecho project with Cornell and Stevens, and some ongoing work with CRDTs.
In Programming Languages, I’m excited to build new languages and type systems which make specific classes of bugs easier for programmers to avoid. This includes things like avoiding concurrent races to ensure safe concurrency, or building new functional languages which feature true zero-cost abstractions. One of my overriding goals in this work is to keep the programmer-facing complexity low; while the type system internals can get complex, the user experience should remain friendly. My ultimate metric: does the language make programs meaningfully easier to “get right” while remaining easy for existing programmers in the domain to understand?
At the intersection, I’ve got lots of ideas on how to build new languages that make distributed systems easier to write and run. Projects in this space include using program synthesis to generate CRDTs that don’t screw with programmer expectations, new transactions languages that keep distributed transactions consistent, or even full programming language designs which rethink how objects can be shared across a distributed program. I’m generally excited to think about how writing communicating programs or programming with distributed storage can be made easier, by taking into account the semantics of the programs.
How does one apply?
Princeton’s Computer Science department features a centralized process for PhD applications; everyone fills out an online application via the graduate school’s application portal, which includes a series of boxes you can check to indicate particular areas of interest. If you’re interested in working with me, then please make sure to check the “Programming Languages” or “Systems” box on the application and mention my name somewhere in your application materials—typically the research statement. You can learn more about the program at the grad program main page, and more about the application itself at the admissions requirements page.
The application Deadline is December 15th
Should I reach out to you before applying?
In short, it’s not necessary.
Many students are encouraged to reach out and directly contact the faculty they want to work with, usually via email. If we’ve got a good research match, or you’ve come across my work before and have ideas of where we could take a collaboration, then by all means feel free to reach out! But please know that this does not affect how—or if—I will read your application. The best way to ensure that I look at your application is to mention my name somewhere in your application. And if you have emailed me or another faculty member without getting a response, then don’t fret! Faculty get a huge volume of email from prospective students, and it’s easy to accidentally miss a few. As long as you apply to the department, we will see your application, even if we’ve missed your email!