Reading for graduate students
These recommendations are sorted from general to specific: from
resources for any kind of graduate student to resources for graduate
students in my own field, static analysis.
My criteria for inclusion are readability, self-containment, brevity
and coverage.
If you're a grad student at Utah,
feel free to come by my office and borrow any of them for a day or
two.
(I've provided links for the books and papers I could find online;
for the rest, I've provided
amazon.com
links to the most recent edition.)
Jump to:
- Resources for any graduate student.
- Resources for near-terminal graduate students.
- Resources for science, engineering or mathematics.
- Resources for programming languages.
- Resources for static analysis.
For grad students in any field
Resources for writing
No graduate student can avoid writing. A lot of academic writing is horrible, and it tends to be horrible in multiple ways: presentation, ordering, clarity, style, and sometimes even grammar and punctuation. I've written my fair share of unreadable papers, but writing better is something I've begun to take seriously. Making your writing better makes peer reviewers inclined to invest time in your work.
The Chicago Manual of Style is an indispensable reference tome when it comes to knowing how to do it right for modern English.
Right after the Chicago Manual of Style, Strunk and White's classic
The Elements of Style
gives excellent coverage of all of the common (and some uncommon) issues that arise when constructing good prose.
I didn't find A Manual for Writers of Research Papers, Theses and Dissertations until after my defense, but it is relevant to any kind of academic or technical writing.
It answered long-held questions I had about issues like the use of
the passive voice and the use of first-person pronouns in academic writing.
Resources for presenting (yourself)
Graduate students can't avoid giving presentations. Once again, most academics give awful presentations.
When it comes to giving presentations that touch technical topics, Even a Geek Can Speak will make every presentation you give better at the cost of just one afternoon's reading.
Simon Peyton Jones, in addition to being a brilliant scientist, is also a gifted public speaker. Simon's advice on how to give a good research talk (co-offered by John Hughes and John Launchbury) should be required reading for all graduate students. Simon offers advice on the other non-technical research skills as well.
Robert Cialdini's Influence is a modern classic in the art of persuasion, with lots of evidence and amusing anecdotes from psychology to back it up.
I read this book over my wife's shoulder while she was reading it for her M.B.A.
It's a fun read, and among other things, it will make you reconsider how you're conveying your message to your audience. Small tweaks can make a big difference.
Though not a text, I highly recommend a good presentation remote.
It's aggravating to have to give a talk no more than arm's length from your laptop.
It just reinforces bad presentation body language.
From extensive field testing, my recommendation on remotes is the Kensington.
Ultimately, if you want to get good at public speaking, you have to practice. In my experience, it gets easier every time you do it. So, sign up for classes or seminars which will force you to give a presentation. And, don't just give the bare minimum: use the resources above and commit to giving the best presentation that you can. Your public reputation as a scientist is determined to a large degree by the quality of your talks.
For near-terminal grad students
The academic job hunt is a brutal process. Your first year as an assistant professor is busy. Being prepared helps. Fortunately, there are some books.
Tomorrow's Professor should be in every grad student's hands at least three years before they graduate.
It explains the graduate-student-to-junior-faculty metamorphosis with a lot of examples and details.
Most importantly, it covers construction of the standard materials
required to perform an academic job search (cover letter, curriculum vitæ, research statement and teaching statement).
As a Ph.D. student, it feels at times like getting your
Ph.D. will be the pinnacle of your existence; the closer you get
finishing your Ph.D., the more a Ph.D. seems akin to acquiring
mutant powers.
In fact, after you get your Ph.D., nothing changes. And yet, everything changes.
A PhD Is Not Enough: A Guide To Survival In Science is well-titled.
It explains why getting your Ph.D. is only the start of
your career. It contains lots of cautionary examples of how
not to begin your career as a scientist.
For graduate students in the sciences
If you're a graduate student in science, math or engineering, you will be writing technical papers with a lot of formal machinery. The lingua franca of the academic publishing community is LaTeX. LaTeX makes it possible for the motivated scientist to typeset technical documents so beautifully that I would call them art.
When you're starting out with LaTeX, Leslie Lamport's
LaTeX book
covers all the basics, and it makes a good reference for all of the common things you'd like to do in LaTeX.
LaTeX, as it turns out, is a deep rabbit hole. (In fact, it's Turing-complete.) When you're ready for your black belt in TeX-fu, Donald Knuth's
TeXbook
is how you get there.
Donald Knuth once taught a class on mathematical writing, the result of which has been distilled in book form [pdf].
The first section of the book is a concise listing of the major dos and don'ts.For graduate students in programming languages
It's surprisingly difficult to find a good book to get started in programming languages. Part of the problem is that the field has become so vast that no text can cover the entire field. The other part of the problem is that very few texts and papers are written for the introductory reader.
Benjamin Pierce's Types and Programming Languages really stands out.
The Nielsons' book
Semantics with Applications [ps] [pdf] [course notes]
is almost a perfect introduction to formal semantics.
(From looking at the table of contents on amazon, the newer
edition looks much better than the edition I have.)
It gives a detailed account of the three major semantic paradigms:
denotational, axiomatic and operational.
A section on applying semantics to static analysis provides a nice
gateway to the field.
The principal strength of this book is its coverage of semantics for
imperative languages due to its use and extension of the same
While-based language throughout.
Shriram Krishnamurthi's Programming Languages: Application and Interpretation is also a solid introduction to the field, and it's free! This book works well for introducing new students to programming languages in part because it uses Scheme and S-Expression notation, which prevents syntax from distracting away from the core issue of semantics. Perhaps more importantly, S-Expression notation means it's very easy to fire up an interpreter and just try things out.
Mitch Wand and
Dan Friedman's Essentials of Programming Languages is also a good introduction to programming languages and a great reference for formal semantics.
Like Shriram's, this book also uses Scheme, so it inherits the same advantages.
Berendregt's classic The Lambda Calculus is an encyclopedia of the type-free λ-calculus.
There's a lot in here on long-forgotten aspects of the
λ-calculus, including its role in logic and foundations and its
relationship to topology.
It's almost hard to believe the λ-calculus was so well studied
before it was foundational to the theory of modern
programming languages.
If writing high-performance, correct compilers for functional languages is a goal of yours, Greg Morrisett's Ph.D. thesis is a good read. Greg has done and continues to do a lot of great work, so I would actually recommend any of his papers to more advanced graduate students in programming languages. Greg tends to develop powerful machinery as a byproduct of reaching his underlying goal; I've found that machinery can often be adapted to other research problems.
Much research in programming languages gets implemented in (and for)
Standard ML,
OCaml and
Haskell.
One of the major challenges (and eventual joys) of using these
languages for those more accustomed to imperative languages is
learning to use functional data structures effectively.
Chris Okasaki's
Purely Functional Data Structures
provides a full treatment of the frequently used data structures in
their purely functional form.
For graduate students in static analysis
Patrick and Rhadia Cousots' original paper on abstract interpretation, which set an entire paradigm in motion, is a good read even after becoming acquainted with the field. Patrick and Rhadia have shown themselves to be great minds of our time in static analyis, which means that their writing is excellent, but it is often unapproachable to casual readers given its level of sophistication. Their original paper is different: because they're starting a field, they cannot and do not assume any background knowledge.
My start in programming languages came from reading the first three chapters of my advisor's dissertation. Olin Shivers is a gifted writer, and it's always a pleasure to read his work. His dissertation covers k-CFA, an analytic platform from which a number of Ph.D.'s can be launched. In his dissertation, you get to see concepts like domain theory, denotational semantics and abstract interpretation in use. It's probably one of the last major works of that era to use denotational semantics. This dissertation is best read after or during an intro-level programming languages course which covers formal semantics, but it is still a remarkably self-contained piece of work.
There are not a lot of books written on static analysis. The Nielsons/Hankin book
Principles of Program Analysis
is fairly comprehensive.
















