Posted on February 13, 2017
Tags: computer science, literature, learning


From Turing to typed lambda calculus, abstract syntax trees to algebraic data types

My education is not in computer science. While I took a computer science/C++ course in high school, in college and grad school I studied evolutionary biology. Eventually, I found my way back to programming by way of bioinformatics and data analysis. As a result, I’ve been self-educated when it comes to programming and development.

Given my background, I’ve always wondered what I was missing as far as foundational computer science goes. Last year, I was inspired by this post at the morning paper; around that time, I came up with the following plan to work on shoring up my computer science knowledge base.

The plan

Over the next fifty weeks1, I’m going to read and summarize my notes/thoughts on fifty “key” papers on computer science. I currently have a list of 38 papers that I’ve pulled from my larger “to-read” list; this will serve as my starting point. I’m sure the list will grow by the time I run out.

As it reflects my interests, the reading list I’ve put together definitely skews toward functional programming, programming languages, and types. That said, I’ll happily take suggestions for papers!

The Papers

These are the 38 papers that I’m starting with2, ordered by publication year. This is roughly the order that I intend to work through the list.


  1. Give or take; life will certainly get in the way. Realistically, I’ll be happy if I get through 25 papers over the next year.

  2. This is pretty much just a dump of citations from my Mendeley library; there may be some inaccuracies for papers that weren’t matched correctly in their database.