From Theory to Systems: A Grounded Approach to Programming Language Education

Author Will Crichton

Thumbnail PDF


  • Filesize: 315 kB
  • 9 pages

Document Identifiers

Author Details

Will Crichton
  • Stanford University, CA, USA


I am eternally grateful to my advisor, Pat Hanrahan, for his support and feedback through the years. His positivity, encouragement, and wisdom continue to push me and this course to ever greater heights.

Cite AsGet BibTex

Will Crichton. From Theory to Systems: A Grounded Approach to Programming Language Education. In 3rd Summit on Advances in Programming Languages (SNAPL 2019). Leibniz International Proceedings in Informatics (LIPIcs), Volume 136, pp. 4:1-4:9, Schloss Dagstuhl – Leibniz-Zentrum für Informatik (2019)


I present a new approach to teaching a graduate-level programming languages course focused on using systems programming ideas and languages like WebAssembly and Rust to motivate PL theory. Drawing on students' prior experience with low-level languages, the course shows how type systems and PL theory are used to avoid tricky real-world errors that students encounter in practice. I reflect on the curricular design and lessons learned from two years of teaching at Stanford, showing that integrating systems ideas can provide students a more grounded and enjoyable education in programming languages. The curriculum, course notes, and assignments are freely available:

Subject Classification

ACM Subject Classification
  • Social and professional topics → Computing education
  • programming languages
  • programming language education


  • Access Statistics
  • Total Accesses (updated on a weekly basis)
    PDF Downloads


  1. 15-312 Principles of Programming Languages. URL:
  2. CIS 500: Software Foundations. URL:
  3. COS 510: Programming Languages. URL:
  4. CS 164: Programming Languages and Compilers. URL:
  5. CS 421: Programming Languages and Compilers. URL:
  6. CSE 401: Hack Your Language! URL:
  7. CSE341: Programming Languages, Autumn 2018. URL:
  8. futures-rs. URL:
  9. Programming Languages. URL:
  10. Programming Languages. URL:
  11. WebAssembly Semantics. URL:
  12. Leonardo de Moura, Soonho Kong, Jeremy Avigad, Floris Van Doorn, and Jakob von Raumer. The Lean theorem prover (system description). In International Conference on Automated Deduction, pages 378-388. Springer, 2015. Google Scholar
  13. Andreas Haas, Andreas Rossberg, Derek L Schuff, Ben L Titzer, Michael Holman, Dan Gohman, Luke Wagner, Alon Zakai, and JF Bastien. Bringing the web up to speed with WebAssembly. In ACM SIGPLAN Notices, volume 52 (6), pages 185-200. ACM, 2017. Google Scholar
  14. Robert Harper. Practical foundations for programming languages. Cambridge University Press, 2016. Google Scholar
  15. Thomas Bracht Laumann Jespersen, Philip Munksgaard, and Ken Friis Larsen. Session types for Rust. In Proceedings of the 11th ACM SIGPLAN Workshop on Generic Programming, pages 13-22. ACM, 2015. Google Scholar
  16. Benjamin C. Pierce. Types and programming languages. MIT press, 2002. Google Scholar
  17. Justin Pombrio, Shriram Krishnamurthi, and Kathi Fisler. Teaching Programming Languages by Experimental and Adversarial Thinking. 2nd Summit on Advances in Programming Languages, page 15, 2017. Google Scholar
  18. Kaku Takeuchi, Kohei Honda, and Makoto Kubo. An interaction-based language and its typing system. In International Conference on Parallel Architectures and Languages Europe, pages 398-413. Springer, 1994. Google Scholar
  19. Conrad Watt. Mechanising and verifying the WebAssembly specification. In Proceedings of the 7th ACM SIGPLAN International Conference on Certified Programs and Proofs, pages 53-65. ACM, 2018. Google Scholar
Questions / Remarks / Feedback

Feedback for Dagstuhl Publishing

Thanks for your feedback!

Feedback submitted

Could not send message

Please try again later or send an E-mail