As 2015 winds down, I’ve found myself with some time to organize my reading list for the new year. Here’s what I want to read in 2016!
Books
This is, as usual, a mixture of programming/computer science and poetry. If you have recommendations for novels, non-fiction, &c, please let me know!
Structure and Interpretation of Computer Programs
Harold Abelson and Gerald Jay Sussman with Julie Sussman I’ve gotten about a third of the way through SICP twice; in 2016, my goal is to finish it.
The Odyssey
Homer (translated by Robert Fitzgerald) I first read The Odyssey in high school. I was unemployed for most of the summer after I graduated from college and read it again; since then, I’ve made it a habit to re-read The Odyssey every summer. (The Fitzgerald translation is my favorite.)
Creativity, Inc.
Ed Catmull and Amy Wallace I’m sort of cheating by including this one, since I’ve already started it, but I figure it counts since I’ll finish it in 2016. It’s about managing and leading creative teams in the context of Pixar’s founding and growth, and I’m really enjoying it so far.
Managing Humans
Michael Lopp Now that I’m managing a team, I’m setting aside time each week to level up my managerial skills. (It would be nice if I could practice managing as much as I practice programming.) I’ve read Peopleware, which was excellent, so now I’m pretty much reading every management resource I can get my hands on. Since managing humans is a large part of what I do these days, I figure Managing Humans could be of some help.
Statistics in a Nutshell, 2nd Edition
Sarah Boslaugh I never properly studied statistics in school, so hopefully this will be a good starting point—I’m also interested in Coursera classes on introductory statistics and data analysis.
Refactoring
Martin Fowler This is something of a modern classic in the vein of the GoF book, focused on best practices and recipes for refactoring object-oriented code. I think this could be particularly useful for my Java development, but hopefully the lessons here are applicable to any codebase.
Shock by Shock
Dean Young I love Dean Young’s poetry and am always excited when a new book of his comes out.
Space, Time, and Spacetime
Lawrence Sklar I wrote my undergraduate thesis on the topic of philosophy of physics (specifically, Zeno’s paradoxes of motion in a theory of discrete space). Sklar’s book explores the interdependence of science and philosophy through examinations of spacetime geometry, causation, and the nature of time, so I hope to gain a broader understanding of my undergraduate work by reading Space, Time, and Spacetime.
Seven Concurrency Models in Seven Weeks
Paul Butcher
Q: Want to hear a Ruby joke?
A: Concurrency!
Coming from Ruby (which has mutexes, threads, &c, but a GIL that prevents more than one thread from executing at a time) and JavaScript (which uses an event loop and a single thread), Clojure was an eye-opener: its concurrency primitives (including software transactional memory, atoms, and agents) were unlike anything I’d ever used before. After writing Clojure for almost three years and using it in a production web and iOS app, I’ve gained a deep appreciation for new ways of thinking about and writing concurrent applications. This book seems like it has a thing or two (or seven!) to teach me.
Voyage of the Sable Venus
Robin Coste Lewis Voyage of the Sable Venus won the 2015 National Book Award in poetry, but that’s not the reason I picked it—I did my MFA with Robin at NYU, so I know she’s a phenomenal poet and am really excited to read and support her work. (I’m also curious to see if any of the poems she shared in workshop are in this collection.)
Poems 1962 – 2012
Louise Glück I meant to read this a couple of years ago and haven’t gotten around to it yet, so I’m relisting it for 2016. I loved Glück’s The First Four Books of Poems, Ararat, and Averno, so I’m sure I’ll enjoy Poems 1962 – 2012.
Purely Functional Data Structures
Chris Okasaki While I was taking Algorithms: Design & Analysis, parts one and two on Coursera, I became interested in applying what I’d learned to functional programming languages like Clojure (as opposed to Java or Python, which I figure are the languages most students are using). This led me to Okasaki’s book, which I think is an expansion of his doctoral thesis (see below).
Papers
I realized this past year that while I’ve been interested for a long time in reading short-form literary work (novellas, chapbooks) and revisiting the classics, I’ve neglected to do so when it comes to reading programming/CS material. So! In 2016, I’d like to read more short-form content (academic papers) and am starting with a mix of classic and new. The newer papers I chose focus primarily on functional programming, type theory, distributed systems, and machine learning. Links are directly to papers (PDFs), most of which are hosted on university websites. Starting with the classics:
Recursive Functions of Symbolic Expressions and Their Computation by Machine, Part I
John McCarthy I really enjoy writing Clojure, and since Clojure is a LISP, it seems only fitting to read the paper that started it all.
Computing Machinery and Intelligence
A. M. Turing
I propose to consider the question, “Can machines think?”
This is gonna be good.
On Computable Numbers, with an Application to the Entscheidungsproblem
A. M. Turing Church technically beat Turing to the punch on this one, but I figure it’s a classic well worth reading regardless.
An Axiomatic Basis for Computer Programming
C. A. R. Hoare I read this paper earlier this year but as per Michael Fogus’ recommendation, I’m reading it again in 2016.
A Theory of Type Polymorphism in Programming
Robin Milner After some long discussions about static typing and Hindley-Milner at RubyConf this year, I became really interested in ML, Haskell, and Idris, so I thought it made sense to read Milner’s paper.
A Formulation of the Simple Theory of Types
Alonzo Church Ditto the above! Also, I want to better understand the λ calculus.
Purely Functional Data Structures
Chris Okasaki See my above notes for the book version. I’m curious how the paper differs!
Organizing Programs Without Classes
David Ungar, Craig Chambers, Bay-Wei Chang, and Urs Hölzle This is a Fogus recommendation (see above). I’ve yet to write Clojure programs that feel disorganized, but 1) it’s possible this will happen with other functional languages (e.g. ML, Haskell), or 2) this may eventually happen when I write sufficiently large Clojure programs.
Fundamental Concepts in Programming Languages
Christopher Strachey Another Fogus recommendation. I get the feeling I’m about to have a ton of knowledge dropped on me.
Why Functional Programming Matters
John Hughes Yet another Fogus recommendation. I’m not sure there will be any major revelations here, but at the very least I’ll be better able to articulate my argument when someone asks me why I think functional programming is so great.
Out of the Tar Pit
Ben Mosely and Peter Marks YAFR (Yet Another Fogus Recommendation; honestly, that blog post is gold). This is mostly “mutable state is the root of all misery,” and I’m curious to see where it will go.
Time, Clocks, and the Ordering of Events in a Distributed System
Leslie Lamport This seems to be one of the classics in distributed programming, and one of my goals this coming year is to get better at understanding, writing, and debugging distributed systems.
Kafka: a Distributed Messaging System for Log Processing
Jay Kreps, Neha Narkhede, and Jun Rao How to Kafka!
Millwheel: Fault-Tolerant Stream Processing at Internet Scale
Google (This paper wasn’t written by Google per se—there were just too many names to list.) I first read this paper last year, but now that I have more context, I’m hoping to understand it a bit better the second time around.
A Few Useful Things to Know About Machine Learning
Pedro Domingos I’m interested in machine learning. This seems like a good place to start!
Dependent Types in Functional Programming
Hongwei Xi and Frank Pfenning As mentioned, I learned a bit about type theory at this year’s RubyConf, and Gary Bernhardt introduced me to the idea of dependently-typed languages. I picked this paper (and the ones that follow) in order to further explore the topic.
Idris, a General Purpose Dependently Typed Programming Language: Design and Implementation
Edwin Brady Idris has been around for a couple of years now, but I only just discovered it!
Programming and Reasoning with Algebraic Effects and Dependent Types
Edwin Brady Idris manages side-effects via its Effects library, the underpinnings of which are explained in this paper.
Resource-Dependent Algebraic Effects
Edwin Brady The effects described in the above paper are limited to compile-time state transitions. This paper promises to extend effects to reason about run-time state transitions.
Dependent Types for Safe and Secure Web Programming
Simon Fowler and Edwin Brady Web programming is pretty much all the programming I do. Anything that promises to help make it safer and more secure is worth checking out. (Also it’s a nice excuse to read another paper about Idris.)