It’s that time of year again!
Goals
This is a new section in my annual reading list blog post (see 2018, 2017, and 2016). I’ve realized it’s a really valuable way to structure my overall yearly reading (which in turn provides me with a metric for quitting books I don’t find useful—something I’ve always struggled with—as well as adding books as I discover new interests). This year, my goals are to (re)learn the following:
Math
While finishing my master’s degree in computer science at Georgia Tech, I realized that 1.) I really enjoy math, and 2.) most of why I believed I didn’t enjoy math was because I don’t like how it’s taught in American schools, so I’m starting a self-study course in mathematics. This year I want to cover:
- Logic, proofs, and set theory
- Abstract algebra, group theory, and category theory
After that (this is a fuzzier list, since it’s years-long and I haven’t gotten far enough into these topics to build out a solid self-study curriculum; topics and ordering may change):
- Mathematical logic and boolean algebra
- Number theory and ring theory
- Field theory, algebraic topology, and point-set topology
- The “rest of” discrete math (combinatorics, graph theory, tree theory, and finite state automata)
- Real numbers & real analysis, complex numbers & complex analysis
- Geometry and linear algebra
- Functional analysis
- Differential equations
- Probability and statistics (review)
- Game theory (review)
- Single-variable differential and integral calculus (review) and multivariable calculus (some review, some new)
I imagine these as sort of self-driven survey courses, though I expect to do a deep dive on one or two topics that I find particularly interesting (I think I’m already inclined toward set theory, model theory, and other areas of mathematical logic). In order to solidify my learning (and prove to myself that I have some sense of what I’m talking about), I’ve made a New Year’s resolution to create Julia Evans-style ‘zines that teach the math topics I’m learning about! Specifically, I’m committing to quarterly ‘zines, tentatively on basic set theory, quantified predicate logic, group theory, and category theory, but hopefully I’ll get the chance to do more.
Foreign Languages
A good friend of mine pointed out last year that I “half-speak” several languages, so I want to dedicate 2019 (and onward!) to fully speaking the languages I want to speak. Those languages are:
- French (at my peak, I was probably at a C1 level; I’d like to regain that)
- German (I was probably at a B1 level at my best; I’d like to get to a B2 or C1 level this year)
- Spanish (I can read/understand a lot of Spanish, but have never studied it formally)
- Mandarin (my wife and I took a class a couple of years ago and I continue to hover around HSK 1; I’d like to get to HSK 3 this year)
- Japanese (I can slowly read hiragana and katakana, but my grammar and vocabulary are super, super basic)
This seems like a super tall order, mostly because it is. I think the goals for French, German, and Chinese are fairly clear and attainable; for Spanish, I’d like to take an introductory course sometime this year, and for Japanese, I’d like to be able to communicate with Japanese speakers at the next RubyKaigi. (Like my math self-study program, this language learning will probably be a years-long effort that evolves over time.)
Whew! Okay. On to the reading list!
Books
I mostly read what I set out to read in 2018 (see below for the ones I’m rolling into next year). Here are a few extras I read (as you can see, I took an interest in financial markets):
Bible of Options Strategies (2nd Edition)
Guy Cohen
I’ve been interested in derivatives markets for a bit, but 2018 was the first time I learned about (and traded!) options.
The Little Book of Currency Trading
Kathy Lien
I initially picked this book up to better understand crypto markets (which I think are more akin to currency markets than equity markets), but ended up learning a lot about (and gaining an appreciation for) ForEx trading. I also learned some techniques to apply to equity and derivates markets (e.g. time spent in range vs. in trend, setting stops, having exit strategies, knowing my psychological profile).
What I Learned Losing a Million Dollars
Jim Paul and Brendan Moynihan
I wasn’t a huge fan of this book (I was turned off by Jim Paul’s folksy, swaggering, frat boy persona), but it did have some interesting takeaways: don’t internalize/personalize losses, cut losses quickly and let winning trades continue, your entry point should be a function of your exit point and not vice-versa (both were also mentioned in The Little Book of Currency Trading), don’t overvalue low-probability, high-return opportunities, and don’t undervalue high-probability, low-return opportunities, get fresh/outside perspectives, and preoccupation with being right means you’re betting, not investing. I really liked this quote (clearly written by Moynihan rather than Paul):
“To repeat the leitmotiv of the book thus far: people lose (really lose, not just have occasional losing trades) because of psychological factors, not analytical ones. They personalize the market and their positions, internalizing what should be external losses, confusing the different types of risk activities, and making crowd trades.”
When Genius Failed
Roger Lowenstein
This was a great account of the meteoric rise and brutal fall of Long-Term Capital Management, and I wholeheartedly recommend it (not only for Lowenstein’s writing and storytelling, but to understand the extent to which Wall Street will let medium-talented white dudes repeatedly fail, burning horrifying amounts of time and money in the process).
Flash Boys
Michael Lewis
I read a few of Michael Lewis’ books last year, and I’ve been interested in high-frequency trading since taking Machine Learning for Trading as part of my master’s degree, so I figured this would be a good read. This is another one I’d recommend, especially having just read When Genius Failed (spoiler: you can crash and burn in spectacular ways as a trader and still be able to convince people to give you capital to manage, but back up the wrong file as a lowly software engineer and the Feds will be at your door).
Digital Gold
Nathaniel Popper
I started a blockchain company in late 2017, so I’ve read a bunch of financial and cryptocurrency books/papers over the past year. Most of my work has been in Ethereum, and Digital Gold is almost exclusively about Bitcoin (specifically, its rise and the cast of characters that powered it). This was an entertaining read, but I’m not sure I learned much.
Blockchain Revolution
Don Tapscott and Alex Tapscott
Even though this is the updated 2018 edition (covering the ICO wave of 2017 and the rise of non-fungible tokens), again, I didn’t feel like I learned a ton from this one (though it could be that running the tech org for a blockchain startup forces me to stay hyper-current). I did like that this one focused on a range of crypto-assets, not just Bitcoin, and explored the broader implications of blockchain technology.
The Five Rules for Successful Stock Investing
Pat Dorsey
Although Dorsey strikes me as something of a value investor (I tend to be more interested in growth stocks), I found a lot to like in this book. I particularly liked learning about the various accounting statements, the figures that appear on them, and their implications for company health (e.g free cash flow divided by revenue tells us what proportion of each dollar in revenue the company is able to turn into excess profits).
Here are the books I want to read in 2019, starting with the eight books I’ve rolled over from 2018 (I rolled over more than usual; it turns out having a baby, finishing grad school, and starting a company really eat into your free time):
Type-Driven Development with Idris
Edwin Brady
I did some reading and work on Idris a couple of years ago, and I’m finally starting to hit my stride as a Haskell programmer, so I’m really excited to finally read Edwin’s book this year.
First, Break All the Rules
Marcus Buckingham and Curt Coffman
As mentioned before, I’ve heard good things about this book at each of the last four places I’ve worked, so it’s probably high time I read it.
A Billion Voices: China’s Search for a Common Language
David Moser
This book was recommended by my Mandarin teacher, and I think it’ll be really interesting to see how modern Mandarin arose from a highly fragmented set of spoken languages and traditions.
The Three-Body Problem
Cixin Liu
I’m also including the two sequels, The Dark Forest and Death’s End!
English Grammar for Students of German
Cecile Zorach et al.
As mentioned, my German has gone a bit downhill since I first started learning in high school, and while my pronunciation is still pretty good and vocabulary comes back to me quickly, I don’t feel I have as firm a grammatical footing as I’d like. Hopefully reading this book and practicing my spoken German helps with that!
Working Effectively with Legacy Code
Michael Feathers
Last year, I said that “this book has been recommended to me by too many people for me to continue not reading it.” This is still true.
High Output Management
Andrew S. Grove
This was recommended to me at a conference I attended last year. Andrew Grove was employee number three at Intel and has built some really impressive teams in the course of his career, so I’m looking forward to reading his story and learning from his mistakes.
Consciousness Explained
Daniel Dennett
I’ve been a big fan of Dennett’s work since college (I focused on philosophy of physics and theory of mind), and I’m particularly interested in this book and its view of consciousness as a continuum.
How to Prove It, 2nd Edition
Daniel J. Velleman
The first of many math/logic books! This one is an introduction to basic set theory and proofs.
Introduction to Logic, 12th Edition
Irving M. Copi and Carl Cohen
This isn’t a cover-to-cover read so much as a review of propositional and predicate logic (this was the textbook for my undergraduate logic coursework).
Set Theory and Metric Spaces
Irving Kaplansky
This was recommended to me as a good introduction to naïve set theory, which I plan to augment with How to Prove It and A Programmer’s Introduction to Mathematics (specifically, chapter four, “Sets”).
Gödel, Escher, Bach: An Eternal Golden Braid
Douglas R. Hofstadter
This is technically a re-read, but doesn’t really feel like it because my first read was so long ago (high school, I think). This book is about strange loops (cycles in which continued ascent eventually leads one back to a point in the cycle that’s already been visited), tangled hierarchies (hierarchies that include such loops), and three intertwined areas of art and science where these self-referential topologies appear: the music of Johann Sebastian Bach, the drawings of M. C. Escher, and Kurt Gödel’s incompleteness theorem.
A Programmer’s Introduction to Mathematics
Jeremy Kun
This is another one I may not read cover-to-cover (well, I probably will, but not in order). I want to start with sets and groups, but later move on to other topics in the intersection of math and programming: polynomials, graphs, linear algebra, and calculus.
Categories for the Working Mathematician
Saunders Mac Lane
My first (passing) exposure to category theory was via Haskell, and now I’d like to set up a firmer foundation for myself (including functors, monoids, and monads).
Abstract Algebra
I. N. Herstein
This was a recommendation from Luke Underwood! I’d like to use this to finish firming up my foundation in set theory, then do a bit of a survey of groups, rings, and fields.
Coding the Matrix
Philip N. Klein
This is the first of three recommendations from Brandon Weaver (the next two are the others). I taught myself basic linear algebra prior to doing my master’s degree, and I got to use a fair amount of it while studying machine learning (e.g. linear regression, regularization, principal component analysis, neural network architecture). I saw a Coursera course a couple of years ago that used this book as a topic and was disappointed that it didn’t fit in my schedule, so I’m pleased to be able to tackle this material in 2019.
The Art of Logic in an Illogical World
Eugenia Cheng
One thing I struggle with is squaring rational arguments (mine and others’) with emotional responses (mine and others’), especially in this age of propaganda, “fake news,” and anti-intellectualism. This book is billed as “a lifeline to readers drowning in the illogic of contemporary life,” which sounds… pretty awesome, actually.
Beyond Infinity
Eugenia Cheng
I’ve struggled with the idea of infinity ever since I was introduced to transfinite arithmetic and the work of Georg Cantor, so I’m excited to dig into this one.
Artificial Intelligence: A Modern Approach
Peter Norvig and Stuart Russell
This is another partial re-read—I think I first picked this up during my Recurse Center batch (summer 2013), but I’m delighted that my in-laws gifted me this book so I can work through it on my own.
Machine Ethics
Michael Anderson and Susan Leigh Anderson, Editors
I gave a talk on machine ethics at RubyConf this year, and I spent a lot of time thinking about the moral and ethical implications of AI (not just for human agents building artificial intelligences, but for the artificial intelligences themselves) during my master’s degree. I’m excited to see what professional ethicists have to say on the subjects I’ve been mulling over (as well as learn about brand-new areas of study).
Four Dimensionalism
Theodore Sider
I’ve skimmed through this book a couple of times over the past few years, but I want to read it cover-to-cover in 2019. One of my main philosophical interests has to do with the mereology (study of parts and wholes) of spacetime, as well as whether three-dimensional objects endure in time, or perdure through it (that is, actually have temporal extent, and are therefore really four-dimensional); I suspect the latter.
Space, Time, and Spacetime
Lawrence Sklar
This is mostly re-reading, but I’m actually not sure I’ve read this one in its entirety, so I want to commit to doing that this year. Like Four Dimensionalism, this one is on the philosophy of physics, but is more of a survey of multiple topics than a meditation on perdurantism.
The History of Western Philosophy
Bertrand Russell
This is a classic that I haven’t read in its entirety yet (I think I read chapters here and there as assignments in college).
Turing’s Cathedral: The Origins of the Digital Universe
George Dyson
This was recommended to me on Twitter when I asked for a “multibiography” of 20th-century math and logic. I’m excited to read it!
Mr. Wilson’s Cabinet of Wonder
Lawrence Weschler
My friend Maggie gave this to me as a gift after we talked about how cool the Museum of Jurassic Technology is.
Friday Black
Nana Kwame Adjei-Brenyah
I haven’t read a short story collection in awhile, and I’m particularly excited about this one (blurbed by both George Saunders and Roxane Gay!).
The Book of Joshua
Zachary Schomburg
I’ve been reading Zachary Schomburg’s poems for awhile now (I often think about “The Fire Cycle”), and given the parallels between Schomburg’s poetic interests and my own (as well as the title of this book; my younger brother, Joshua, passed away in 2016), I’m interested to see how this book moves me.
Surrounded by Friends
Matthew Rohrer
I’ve known Matthew since 2010, and I’m always delighted to read his work.
Magical Negro
Morgan Parker
Morgan and I did our MFAs together at NYU, and I really enjoyed There Are More Beautiful Things Than Beyoncé. I’m excited to pick up her new book when it comes out next month!
Subcritical Tests
Ailbhe Darcy and SJ Fowler
I frequently think about Darcy’s poem, “Ansel Adams’ Aspens”, so when I saw this title (I’m always excited to read poems about the intersection of human experience and science), I knew I had to read it.
Mortal Republic
Edward J. Watts
Now is probably the right time to read about the factors that contributed to the fall of the Roman Empire.
Fear: Trump in the White House
Bob Woodward
This oughtta be good. And terrifying. Here’s to that fatuous orange clown getting kicked to the curb in 2019.
Papers
Spring 2018 was the last semester of my master’s degree, which meant I once again read a bunch of papers. While I may read fewer papers in 2019 without grad school to provide a framework, I hope to instead read different papers: in this case, extending beyond computer science to include mathematics, language/linguistics, and philosophy (primarily ethics, theory of mind, and logic). But! We’ll get to those in a minute. Here are the additional papers I read in 2018 beyond the ones I set out to read:
The Anatomy of a Large-Scale Hypertextual Web Search Engine
Sergey Brin and Larry Page
This is the “PageRank” paper (which I assumed only had to do with ranking pages, and not also a play on Larry Page’s name).
Understanding Resiliency of Internet Topology Against Prefix Hijack Attacks
Mohit Lad, Ricardo Oliveira, Beichuan Zhang, and Lixia Zhang
I read this for my Computer Networks class at Georgia Tech, and it was really eye-opening (both in terms of the relationships between network topology and prefix hijacking as well as the relatively unmitigated security horror that is BGP).
ASwatch: An AS Reputation System to Expose Bulletproof Hosting ASes
Maria Konte, Roberto Perdisci, and Nick Feamster
This is a really cool paper: it proposes an autonomous system reputation system, ASwatch, that only uses the control plane (that is, routing behavior) to preemptively identify malicious/criminal ASes, rather than using data plane monitoring to identify malicious behavior after the fact. I definitely recommend this one (the authors report a 93% success rate and 5% false positive rate!).
Sizing Router Buffers
Guido Appenzeller, Isaac Keslassy, and Nick McKeown
Another cool one: this paper demonstrates that the old heuristic for buffer sizing (B = RTT * C, where B is the buffer size, RTT is the average round-trip time of a flow passing over the link, and C is is the link’s data rate) is outdated: in reality, B = (RTT * C) / sqrt(N), where N is the number of flows over the link (since there’s now a much larger number of TCP connections multiplexed over individual backbone router links).
The Crossfire Attack
Min Suk Kang, Soo Bum Lee, and Virgil D. Gligor
Another Computer Networks paper (I’ll note when I pivot from networking to another topic). This one illustrates the crossfire attack, which allows a relatively small number of bots to undetectably take down server targets by flooding just a few links (using low-intensity flows that are indistinguishable from normal network traffic) to cut off the target server(s) from the rest of the Internet.
CUBIC: A New TCP-Friendly High-Speed TCP Variant
Sangtae Ha, Injong Rhee, and Lisong Xu
In this paper, the authors present CUBIC, a TCP congestion control protocol that improves TCP scalability by replacing the previous linear window growth function with a cubic function. (As far as I know, CUBIC is currently the default TCP algorithm for the Linux kernel.)
How Hard Can It Be? Designing and Implementing a Deployable Multipath TCP
Costin Raiciu et al.
This paper aims to answer the question: “Is it possible to extend TCP to enable it to support multiple paths for current applications on today’s Internet?” (Short answer: yes, but it’s not trivial.)
The Performance Impact of Buffer Sizes for Multi-Path TCP in Internet Setups
Feng Zhou et al.
This is another paper on MPTCP, and I found it interesting because of the results the authors obtained with regard to buffer sizing (in particular, due to packet reordering over various paths, the buffer size requirements are actually fairly small—see Table III in the paper).
Hold-On: Protecting Against On-Path DNS Poisoning
Haixin Duan et al.
I first became familiar with DNS vulnerabilities through Dan Kaminsky’s work on DNS cache poisoning (Black Hat 2008), so I was particularly interested in this paper. The authors argue that DNS resolvers should wait after receiving an initial reply (what they call the “hold-on” period) in order to allow legitimate replies to also arrive (since DNS injection attacks often rely on malicious responses arriving at the resolver before legitimate ones).
Jellyfish: Networking Data Centers Randomly
Ankit Singla, Chi-Yao Hong, Lucian Popa, and P. Brighten Godfrey
I thought this paper was really cool because it demonstrated that a random graph topology (the “jellyfish”) is more cost-effective than a fat tree topology, supporting roughly 25% more servers (though at the cost of routing and wiring complexity).
PortLand: A Scalable Fault-Tolerant Layer 2 Data Center Network Fabric
Radhika Niranjan Mysore et al.
This was one of the few papers I read for Computer Networks that I didn’t find all that compelling (though the authors do a good job of describing a “plug-and-play” connection fabric comprising Ethernet-based routing and address resolution protocols for modern data centers).
The Road to SDN: An Intellectual History of Programmable Networks
Nick Feamster, Jennifer Rexford, and Ellen Zegura
This paper is a history of software-defined networking, which wasn’t mind-blowing but was a good introduction to the topic.
How Secure are Secure Interdomain Routing Protocols?
Sharon Goldberg, Michael Schapira, Peter Hummon, and Jennifer Rexford
Hint: not very.
Application Flow Control in YouTube Video Streams
Shane Alcock and Richard Nelson
This paper is a case study on the flow techniques used by YouTube. Super interesting!
Formulas for Bancor System
Meni Rosenfeld
Okay! Moving on from computer networks to cryptocurrencies and game theory. This paper details the math behind Bancor’s autonomous converter contracts.
First-Price Auctions, Dutch Auctions, and Buy-It-Now Prices with Allais Paradox Bidders
Daisuke Nakajima
I read this paper shortly after we started AUX to better understand the game theory underpinning first-price, Dutch (descending price), and “buy it now”-style auctions. (For a general text on auction theory, I highly recommend Krishna’s Auction Theory.)
Snowflake to Avalanche: A Novel Metastable Consensus Protocol Family for Cryptocurrencies
Team Rocket
This paper was a good overview of several non-proof-of-work Byzantine fault tolerance protocols—I absolutely recommend it for those interested in the Byzantine generals’ problem and/or consensus algorithms as implemented in various cryptocurrencies (the paper demonstrates a Bitcoin-like system that can achieve throughput of 1300 transactions per second!).
Finally, here the papers I want to read in 2019 (starting with one rolled over one from 2018):
Polynomial-Time Algorithms for Prime Factorization and Discrete Logarithms on a Quantum Computer
Peter W. Shor
Quantum computing sort of fell off my radar last year, and given all the activity in cryptocurrency markets over the past several months, I figure now’s the time to read up on the sorts of technology that would turn those markets upside-down…er.
A Tutorial Implementation of a Dependently Typed Lambda Calculus
Andres Löh, Conor McBride, and Wouter Swierstra
I’ve been interested in dependent types ever since I first started programming in/contributing to Idris, so I’m excited to work through this paper (including understanding when/whether type checking in dependently-typed programs becomes undecidable).
Safer Smart Contracts Through Type-Driven Development
Jack Pettersson and Robert Edström
I’ve written about safety in smart contracts, and I’m interested to dig deeper into the intersection between smart contract design and dependent types.
On the Practical Nature of Artificial Qualia
Raúl Arrabales, Agapito Ledezma, and Araceli Sanchis
On to theory of mind! One of the things I find myself thinking about with regard to machine learning and AI is the nature of an artificially intelligent agent’s “inner life”: would a machine have experiences and sensations in a way we would recognize (e.g. the color red, the taste of salt)? Hopefully this paper gives me something of a jumping-off point for investigating artificial qualia.
Turing Machines
Hilary Putnam
This paper (and the next one) are from Introduction to Philosophy, Third Edition by Perry and Bratman (continuing my reading on computability and the relationship between machinery and mind).
Minds, Brains, and Programs
John K. Searle
I first encountered Searle’s work in the context of his “Chinese room” thought experiment, and I’m interested in a more explicit treatment of functionalism and artificial vs. natural intelligence.
Off we go!