Introduction
This is mostly based on an email I wrote to someone a few months ago who wanted to spend some time learning more about programming languages.
Programming languages fundamentals
- UW professor Dan Grossman's teaching materials are fantastic.
- UPenn professor Benjamin Pierce's Types and Programming Languages Book is a classic.
- Tufts professor Norman Ramsey was the one who taught me a lot of what I know. He also has a book here, available upon request.
- MIT professors Abelson and Sussman's Structure and Interpretation of Computer Programs is another classic. I'm pretty sure I've read through the whole thing cover-to-cover multiple times.
- I've never read Feilleisen et al's How to Design Programs, but it's also another highly recommended one.
Advanced topics in programming languages
- There is, of course, Benjamin Pierce's Advanced Topics in Types and Programming Languages. Most PL people I know have this and TAPL on their bookshelf.
- If you're interested in program analysis, you may be interested in checking out CMU professor Jonathan Aldrich's Program Analysis course.
- If you're interested in Coq and formal verification, you may be interested in MIT professor Adam Chlipala's books, Certified Programming with Dependent Types and Formal Reasoning About Programs. You might also consider Benjamin Pierce's Software Foundations. This book is written as a collection of Literate Coq files with exercises.
- If you're interested in the intersection of software foundations and security, you may be interested in the syllabus for this course Matt Fredrikson and I designed at CMU a few years ago. We taught a bunch of grad-level material very slowly to upper-level students and they seemed to learn a lot! Her are the original materials. Here's the current website.
What's cool in programming languages research?
- I taught a graduate seminar a few years ago in which we looked at all programming language designs through the lens of their domains. Here's the reading list for that course.
- When I was the Publicity Chair for Principles of Programming Languages (POPL), one of the flagship conferences of our field, I did an People of POPL interview series with some of the luminaries of our field, as well as a diversity of younger researchers. It gives a pretty good picture of the cutting edge as of 2017.
- The Publicity Chairs for Programming Language Design and Implementation (PLDI), another flagship conference of our field, did People of PLDI in 2019.
What conferences should I follow for programming languages and software engineering research?
It's way past my bedtime, so I'm going to put a list of conferences I've submitted to, plus a couple more. This is by no means a complete list.
- Principles of Programming Languages (POPL)
- Programming Language Design and Implementation (PLDI)
- History of Programming Languages (HOPL)
- Summit on Advances in Programming Languages (SNAPL)
- International Conference on Functional Programming (ICFP)
- SPLASH
- ASPLOS
- International Conference on Software Engineering (ICSE)