{"id":13647106,"url":"https://github.com/jeanqasaur/learn-programming-languages","last_synced_at":"2026-03-27T04:52:48.600Z","repository":{"id":50667015,"uuid":"263263781","full_name":"jeanqasaur/learn-programming-languages","owner":"jeanqasaur","description":"Resources for the working programmer to learn more about the fundamentals and theory of programming languages.","archived":false,"fork":false,"pushed_at":"2020-06-26T05:51:59.000Z","size":6,"stargazers_count":328,"open_issues_count":1,"forks_count":18,"subscribers_count":13,"default_branch":"master","last_synced_at":"2024-08-02T01:26:52.018Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":null,"has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/jeanqasaur.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2020-05-12T07:24:03.000Z","updated_at":"2024-07-28T15:10:26.000Z","dependencies_parsed_at":"2022-08-25T23:12:13.639Z","dependency_job_id":null,"html_url":"https://github.com/jeanqasaur/learn-programming-languages","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jeanqasaur%2Flearn-programming-languages","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jeanqasaur%2Flearn-programming-languages/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jeanqasaur%2Flearn-programming-languages/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jeanqasaur%2Flearn-programming-languages/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/jeanqasaur","download_url":"https://codeload.github.com/jeanqasaur/learn-programming-languages/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":223880448,"owners_count":17219124,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-08-02T01:03:20.748Z","updated_at":"2025-12-28T21:44:37.176Z","avatar_url":"https://github.com/jeanqasaur.png","language":null,"funding_links":[],"categories":["Others"],"sub_categories":[],"readme":"# Introduction\nThis 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.\n\n# Programming languages fundamentals\n  * UW professor Dan Grossman's [teaching materials](https://homes.cs.washington.edu/~djg/teachingMaterials/) are fantastic.\n  * UPenn professor Benjamin Pierce's [_Types and Programming Languages Book_](https://www.cis.upenn.edu/~bcpierce/tapl/) is a classic.\n  * 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.\n  * 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.\n  * I've never read Feilleisen et al's [_How to Design Programs_](https://htdp.org/), but it's also another highly recommended one.\n\n# Advanced topics in programming languages\n  * 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.\n  * 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/).\n  * 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.\n  * 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).\n\n\n# What's cool in programming languages research?\n  * 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).\n  * 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.\n  * 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.\n\n# What conferences should I follow for programming languages and software engineering research?\nIt'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.\n  * Principles of Programming Languages (POPL)\n  * Programming Language Design and Implementation (PLDI)\n  * History of Programming Languages (HOPL)\n  * Summit on Advances in Programming Languages (SNAPL)\n  * International Conference on Functional Programming (ICFP)\n  * SPLASH\n  * ASPLOS\n  * International Conference on Software Engineering (ICSE)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjeanqasaur%2Flearn-programming-languages","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fjeanqasaur%2Flearn-programming-languages","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjeanqasaur%2Flearn-programming-languages/lists"}