Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/jeanqasaur/learn-programming-languages

Resources for the working programmer to learn more about the fundamentals and theory of programming languages.
https://github.com/jeanqasaur/learn-programming-languages

Last synced: 3 months ago
JSON representation

Resources for the working programmer to learn more about the fundamentals and theory of programming languages.

Awesome Lists containing this project

README

        

# 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](https://homes.cs.washington.edu/~djg/teachingMaterials/) are fantastic.
* UPenn professor Benjamin Pierce's [_Types and Programming Languages Book_](https://www.cis.upenn.edu/~bcpierce/tapl/) 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](https://www.cs.tufts.edu/~nr/build-prove-compare/), available upon request.
* MIT professors Abelson and Sussman's [_Structure and Interpretation of Computer Programs_](https://mitpress.mit.edu/sites/default/files/sicp/full-text/book/book.html) 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_](https://htdp.org/), 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_](https://www.cis.upenn.edu/~bcpierce/attapl/). 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](http://www.cs.cmu.edu/~aldrich/courses/17-355-19sp/).
* 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_](http://adam.chlipala.net/cpdt/) and [_Formal Reasoning About Programs_](http://adam.chlipala.net/frap/). You might also consider Benjamin Pierce's [_Software Foundations_](https://softwarefoundations.cis.upenn.edu/). 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](https://github.com/jeanqasaur/cmu-15316-spring17/tree/master/lectures). Here's the [current website](https://15316-cmu.github.io/index.html).

# 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](https://github.com/jeanqasaur/dsl-syllabus-fall-2016).
* 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](http://www.cs.cmu.edu/~popl-interviews/) 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](http://abstract.ece.cmu.edu/peopleOfPLDI/) 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)