Andrew Clausen's recommended books
Here is a list of books/articles that I've enjoyed reading, or found useful.
Also, I've included things I haven't enjoyed, or found useless, so you know not
to buy them.
Feel free to modify and distribute this information freely.
Some Brazillian friends have a similar page (which we sort of share)
here (Portuguese).
(Alguns amigos brasileiros tem uma página parecida que a gente
divide, mais ou menos...)
Computer Science
- "Introduction to Algorithms" by Thomas Cormen, Charles Leiserson, Ronald
Rivest and Clifford Stein. It includes readable pseudocode, decent proofs and
a good range of algorithms. Great book!
- "Algorithms in C", by Robert Sedgewick. This book includes a small amount
of unreadable C code, that is responsible for damaging many a second-year CS
student's sense of taste. It's proofes are reasonable - when they are
included. It's fairly shallow, and not very broad.
- "Purely Functional Data Structures", by Chris Okasaki. Purely functional
data structures are very elegant, and usually quite different from vanilla
imperative algorithms. Very well written, but hard to use a reference. This
book will warp your mind. A good part of this book was the guy's PhD thesis,
and is available
online.
- "Compilers: Principals, Techniques and Tools", by Alfred Aho, Ravi Sethi
and Jeffrey Ullman. Also known as "the dragon book". It
goes well with my striped suit. This
book is both very broad and very deep, and easy to read. I wished more
text-books were written like this one.
- "The Design and Implementation of the 4.4BSD Operating System", by Marshall
McKusick, Keith Bostic, Michael Karels and John Quaterman. The best book I've
found on operating systems. (I looked at about 10 when I was at Marcelo's
house :) Obviously, it doesn't talk about microkernels, but it is a good
introduction to monolithic kernels.
- "Computer Networks", by Andrew Tanenbaum. Pretty good book, although the
technical details get a bit boring... I'd have prefered something shorter but
more theoretical. The occassional humour makes it worth the tedium though.
Eg: "It was called SEAL (Simple and Efficient Access Layer), which suggests
what the designers thought of the old ones."
- "Introduction to the Theory of Computation", by Michael Sipser. A good
introduction with good explanations and proofs. I think it could go into more
depth though. Don't buy it, just borrow it from the library.
- "Haskell: The Craft of Functional Programming", by Simon Thompson.
A good introduction to functional programming if you haven't done programming
before. A bit shallow, and won't answer half of your questions.
- "Handbook of Applied Cryptography", by Alfred Menezes, Paul van Oorschot
and Scott Vanstone. Available free
online. I haven't
read it yet, so I can't comment.
- "Introductory Papers to Quantum Computing", by lots of people. Some
free papers online.
Complicated stuff, but very cool.
- "Notes on Coding Theory" by J.I. Hall. Available free
online. Seems pretty good to me, but the authors says they're out of
date - lots of research has happened since.
- "Managing Gigabytes: Compressing and Indexing Documents and Images"
by Ian Witten, Alistair Moffat and Timothy Bell. It's easy to read, but a bit
shallow in terms of mathematics and analysis, and hard to use as a reference.
There is an emphasis on engineering a good compression system for particular
applications (in particular, digital libraries of scanned documents). The
description of this process is very instructive.
- "Transaction Processing: Concepts and Techniques", by Jim Gray and Andreas
Reuter. Pretty dry writing style, but quite deep and thorough, and easy
to skim and use as a reference.
- "Foundations of Cryptography" (Volumes 1 and 2), by Oded Goldreich. This
book is an amazing achievement. It is extremely technical, but most of the
difficult concepts are explained well. The first volume has a great index, but
the second volume's index is terrible. A major weakness in the book is that it
does not "re-use" definitions. Thus, the phrase "for all positive polynomials
p(n) and all sufficiently large n" appears repeatedly throughout the two
volumes, rather than simply "negligible function", and so on. I think this is
a serious weakness, as it widens the gap between intuition and formalism, and
forces the reader to make the connections between the concepts in the book.
Draft versions are available
online.
- "Reasoning About Knowledge" by Fagin, Halpern, Moses and Vardi. This is a
very interdisciplinary book, and could have gone in philosophy or economics
categories as well! It is very well written, and easy to read despite having
lots of technical detail.
Software Engineering
- "Design Patterns", by Erich Gamma, Richard Helm, Ralph Johnson
and John Vlissides. It looks pretty, feels pretty, and has lots of
people saying it's pretty, but I haven't found any of it useful.
Perhaps it's because they're preaching to the converted, or maybe
it's too abstract. They seem to be making a killing on sequels, so
maybe I'm supposed to find the answers in them instead.
- "The Mythical Man Month", by Frederick Brooks Jr. An interesting
book on software engineering - although it seems to be relevant to lots
of other things too. While there are other solutions to the problems
he discusses in his books, I think the discussions of the problems
themselves are still very accurate and relevant today. I think it
should be compulsary reading for software engineering students. Especially
the ones that are tempted to believe that "management", "organization"
and "policy" are the best ways to make team programming work.
- "The C Programming Language" by Brian Kernighan and Dennis Ritchie.
A very short, small book, for a very minimalist programming language.
I already knew C when I read this book, so I can't comment how helpful
it is for beginners. I've heard mixed reports.
- "The C++ Programming Language" by Bjarne Stroustrup. A very long,
large book, for a very complicated and intricate programming language.
(Cf: the C book above). C++ feels ugly. The fact that he gives a very
convincing argument it's the most practical language available just makes
you feel even more depressed. It has a long section on managing projects
that doesn't seem particularly relevant, but interesting anyway.
-
"The Rise of `Worse is Better'" by Richard P. Gabriel. Available free
online.
A convincing argument for minimalism in implementation (possibly at
the expense of minimalism in an interface). Go for the 50% solution
first.
Mathematics
- "Real Analysis and Probability" by Richard Dudley. An extremely well
written introduction to metric spaces, measure theory, stochastic processes,
functional analysis and so on. While it is entirely self-contained, it mostly
takes the "advanced" route, so it might be easier to read more introductory
text(s) first if you are learning real analysis or metric spaces for the
first time. It's probably the most elegant book I have. It has an
excellent index.
-
"Introduction to Markov Chains", by Ehrhard Behrends. Very elegant, and
Hard Core TM. Strongly recommended. (I only have a good enough background
for Part 1 of 3, but I found it very worthwhile regardless)
- "The Essence of Logic", by John Kelly. Pretty boring book.
Doesn't deal with the many philosophical issues in logic, which makes
it both dry and hard to understand.
- "Discrete Mathematics", by Paul Dierker and William Voxman.
Great introduction to many of the cool branches of Mathematics (as opposed
to what you get taught at highschool). I wished it had a chapter on group
theory. Good book for brainwashing people who were turned off maths at high
school.
- "Advanced Engineering Mathematics", by Erwin Kreyzig. If you
must touch the ugly side of maths, then I guess this book
is ok. I wished it had more proofs though. You'll want a good cover
so you can avoid touching the book directly. (Filthy!)
-
"Introductory Lectures on Rings and Modules", by John Beachy. Lots of useful
examples, but it's focus on non-commutative rings seems misplaced for an
introduction. A more bare-bones version (seems to be of a few different
books, including elementary group theory) is available:
Abstract Algebra Online.
-
"Graph Theory", by Reinhard Diestel. Available free
online.
Looks quite readable, and a lot more in depth than the superficial Graph
Theory subject I took at uni. I should read this properly...
-
"Calculus on Manifolds", by Michael Spivak. A popular classic. I like its
"biased" approach. Unfortunately, it doesn't present abstract measure theory,
which would have made the material easier to understand IMHO... I guess
Lebesgue would have approved. The paperback version is light enough to carry
around anywhere!
-
"Convex Analysis and Optimization", by Dimitri Bertsekas. This book is
quite innovative, and a lot of thought has been given to its presentation.
It has lots of unpublished results, even in the "introductory" sections.
But, I found it underemphasized some key points, which made it easy to
gloss over without really understanding properly. (For example: cones
weren't characterized as scale-invariant sets. Mas-Colell, the economics
text below, does give this characterization.)
- "A First Course in Optimization Theory", by Rangarajan K. Sundaram. I
quite like this book. It is very easy to read, and strikes a good balance
between theorems and applications. It provides multiple proofs for
several theorems, which is nice. Pity it only has economics examples!
Economics
- "Microeconomic Theory" by Mas-Colell, Whinston and Green. The quality of
this book varies a lot. Sometimes, it is very thorough and elegant. For
example, its discussion of the relevance of Nash equilibrium is good. In other
places, it's logic is sloppy, causing varying levels of confusion in readers.
For example: Def 6.E.2 (extended expected utility representation) is wrong.
They want a set of functions with a certain property to exist, but they only
specified that each individual function exists. Also, Def 9.B.1 (subgame) is
TOTALLY bogus. While a game might be a set in some technical set (i.e. the set
construction of tuples), this is definitely not what the authors intended.
Despite these fairly serious problems, it is by far the best economics text
I've found. It is easy to read, has lots of helpful diagrams, and covers
a lot of ground. It has an excellent index.
- "Game Theory" by Myerson. While the philosophical discussions on some
issues were very enlightening (especially the references to Behavioural
Economics, such as some of Kahnemann and Tversky's experiments), I found it
skimped on explainations and justifications of many of the axioms. This
choice was deliberate, but I found it off-putting, so I switched to
Mas-Colell for learning elementary game theory. However, its chapter on
mechanism design is truly brilliant.
- "Game Theory" by Fudenberg and Tirole. This book goes very deep,
and is very advanced. I think it's a great book if you have already read
Mas-Colell et al (see above). I find its mathematical notation a little
clumsy. (It is very rigorous, and I have not found any mistakes in it,
however.) It has a terrible index.
- "Perspectives on Positive Political Economy" edited by Kenneth Shepsle
and James Alt. This book is an amazing collection of essays that have
been very influential in economics. Its target audience includes both
political scientists and economists, and is therefore very easy to read.
- "The Theory of Incentives: The Principal-Agent Model" by Jean-Jacques
Laffont and David Martimort. Terrific book. Mathematically rigorous and
elegant. Very minimalist in its presentation, but very detailed and broad. It
includes interesting historical events as well as theory. It has a good index.
- "The Theory of Industrial Organization" by Jean Tirole. While the topics
in this book are fascinating, I find the mathematics rather clumsy. The models
are typically "simplified" versions from the literature with convexity replaced
with linearity and so on. I found it difficult to understand which assumptions
are critical to the results, and which are peripheral. It has a good index.
- "Lawlessness and Economics" by Avinash Dixit. This is an extremely well
written introduction to the informal institutions that operate alongside and in
the absense of legal institutions. It has a perfect balance of empirical
evidence, anecdotes and theory.
Reputation
- The Google PageRank TM paper. "The PageRank Citation Algorithm:
Bringing Order to the Web", by Larry Page, Sergey Brin, R. Motwani, T.
Winograd. Available free on
citeseer.
Pure genius.
- "Attack resistant trust metrics", by Raphael Levien. PhD-in-progress.
Looks promising. Available free
online.
-
"Reputation Systems" by Paul Resnick in Communications of the ACM.
A well written intro to reputation systems.
-
"My Reputation Always Had More Fun Than Me: The Failure of eBay's Feedback
Model to Effectively Prevent Online Auction Fraud" by Mary Calkins. An
interesting survey of problems on eBay's feedback system. Available free
online.
-
"(Im)possibility of safe exchange mechanism design" by Tuomas Sandholm.
Some ideas about how you can('t) use reputation to solve some problems.
Available free
online
Connectedness/"Cool"
- "Tipping Point", by Malcolm Gladwell. Interesting book containing
lots of deep arguments, with good examples. He argues that there are
some types of people that are particularly important in the spread of
"epidemics" (fashion, crime, contagious diseases, politics, etc.):
- Connectors: people with lots of weak friends - he suggests 10000
- Mavens: people obsessed with finding new/better things, and
telling everyone about them
- Salesmen: people who can spread emotions/opinions
easily
I'm still not convinced this tells the whole story. It doesn't really
explain the way I've become involved in epidemics, for example. I'm
probably not someone from the above categories, yet I think people like
myself are still very important in spreading epidemics. (Malcolm
also isn't one of the above, yet is also spreading an epidemic!)
He also argues there are three important criteria for an epidemic to spread:
- contagious: infected agents must pass on the epidemic.
- stickiness: an "infected" agent must remain in a state of
being able to spread the epidemic for a long period of time.
- context: the epidemic will often require specific conditions
to spread.
At times, these seem a bit obvious/glib. Perhaps "context" needs to be
defined better. (Can it be?)
- "Six Degrees of Lois Weisberg", by Malcolm Gladwell. Available for free
online.
Check out the whole site - plenty of
interesting articles. Really well written.
- "No Logo", by Naomi Klein. Interesting and mostly convincing, but far
too long. Every little argument she makes is accompanied with an interesting
story, making it long-winded and hard to understand. But the anecdotes speak
for themselves... perhaps they are more important than the arguments
that (fail to) link them. And at least they are interesting stories.
- "Linked: The New Science of Networks", by Albert-László Barabási.
Scale free networks are very interesting, and I kept wanting more details.
Also, in areas I did know some of the details, I found his superficiality
to be a bit misleading. For example, in his discussion about Microsoft (it
being a node that seems to get all the links), he doesn't really explore
if that's because it's so fit, or because the preference for high-degree
nodes is so high.
A question that keeps coming to mind is: how important is fitness once a
node is high-degree? Is there same balance between fitness and degree?
Is there a point where a low-degree node can never make it, despite being
much fitter? I suspect this is already covered in the literature.
(TODO: have a look)
I wished the book had an appendix for some maths. He had space!
- "A review of factors affecting music recommenders' success", by
A. L. Uitdenbogerd and R. G. van Schyndel. Available free
online.
Surveys "music psychology" wrt music taste, and argues that it should
be used more (rather than, say, analysis of groups of people's opinions).
Lots of interesting references.
- "Networks, Netwars and the Fight for the Future", by
David Ronfeldt and John Arquilla. Available free
online. Interesting article about decentralized organizations,
with a focus on activists and terrorists. I'm not convinced by their
argument that you need to fight networks with networks. Wouldn't
a counter-terrorist network be vulnerable to information leaks?
Other
- "Underground", by Suelette Dreyfus. Available free
online. The stories of several
crackers in the late 80s and early 90s. It's written in a way so you
can get a feel for the personalities involved, and the lives they lived,
mainly revolving around addiction, social isolation and their downfall.
Very well written.