Will Crichton

I am a computer scientist. My research combines cognitive psychology and programming language theory to understand how people program, and to design better tools for programmers.

I am a 6th year Ph.D. student at Stanford University advised by Pat Hanrahan and Maneesh Agrawala. I am planning to start a postdoc at the beginning of the next academic year, and to ultimately seek a faculty position.

In my research I build theories and systems about programming. A theory tries to understand a concept in a simplified setting where its properties can be identified via logical or statistical analysis. A system applies theory to a real-world setting where unexpected constraints and engineering concerns influence the theory's application.


I developed an algorithm for using ownership types to statically / modularly analyze information flow, and proved its soundness as noninterference [1].

I showed that working memory limits a person's ability to remember the value of variables while program tracing [3].

I articulated a design space for documentation generators based on a cognitive task analysis of how developers search through APIs [6].

I demonstrated that machine learning models can classify a program's high-level structure to a high degree of accuracy [4].


I built Flowistry, an information flow analyzer for Rust, to help programmers identify code unrelated to their current task [1].

I redesigned CS 242, a graduate-level course on programming languages, to help students better understand how PL theory works in the real world [11].

I extended Rustdoc to automatically find examples for documented functions, to help programmers find examples when learning a new API.

I created Nota, a document language for the browser, to make a world where I never have to write LaTeX again [2].


Conference publications

Will Crichton, Marco Patrignani, Maneesh Agrawala, and Pat Hanrahan.

PLDI 2022.

Will Crichton, Maneesh Agrawala, and Pat Hanrahan.

CHI 2021.

Will Crichton, Georiga Gabriela Sampaio, and Pat Hanrahan.

SIGCSE 2021.

James Hong, Will Crichton, Haotian Zhang, Daniel Y. Fu, Jacob Ritchie, Jeremy Barenholtz, Ben Hannel, Xinwei Yao, Michaela Murray, Geraldine Moriba, Maneesh Agrawala, and Kayvon Fatahalian.

KDD 2021.

Fait Poms, Will Crichton, Pat Hanrahan, and Kayvon Fatahalian.


Workshop publications

I love workshops! I enjoy discussing my half-baked or weirdly-niche ideas with other researchers. PLATEAU and SNAPL were a big part of the reason I got into PL/HCI research.

Will Crichton.


Will Crichton.


Will Crichton.


Daniel Y. Fu, Will Crichton, James Hong, Xinwei Yao, Haotian Zhang, Anh Truong, Avanika Narayan, Maneesh Agrawala, Christopher RĂ©, and Kayvon Fatahalian.

AI Systems @ SOSP 2019.

Anna Zeng, and Will Crichton.


Good Ideas For Free

Here are some interesting ideas that I haven't had time to keep exploring.

  • It should be possible to build a garbage-collected programming language on top of a non-GC language, and get the standard library for free! For instance, there should be a version of OCaml built on Rust that doesn't need to reimplement Vec or HashMap. See Gradual Programming, Rust: The New LLVM and willcrichton/lia for further inspiration.
  • When a CS teacher gets 100 solutions to a new assignment, they should be able to explore the commonalities and differences between solutions. I worked on this a bit [4], but there's a lot more to explore. See "Generative Grading: Neural Approximate Parsing for Automated Student Feedback" for another cool concept in this space.
  • Trait-based languages like Rust have a Turing-complete logic-programming-esque computation model embedded into their type system. I built Tyrade to show that it's possible to translate a sensible functional language into traits. But the translation is limited and I never formally proved the kind of relationship between these languages.