Open Access Publications
"How to Write a Great Research Paper" by Simon Peyton Jones. Essential watching for writing research papers.
"Politics and the English Language" by George Orwell. A critique of propaganda, it also illustrates the difference between clear, simple, honest language vs abstruse, over-wrought, abstract language. The latter style makes it hard to understand the writer's true meaning, either intentionally (propaganda) or not (poor writing).
"Error Codes for Paper Introductions" by Chris Parnin.
"Writing Beyond the Academy" by Larry McEnerney.
"Papers" (Slide 10) by Robert Grimm. (1) What is the problem and why does it matter? (2) What is the solution and how is it new/different? (3) What are the contributions and limitations?
"Research papers and review considerations" by David Wetherall.
"Writing (and Reading) Papers by Armando Fox.
"How to Read a Technical Paper", by Jason Eisner.
"How to read a research paper" by Michael Mitzenmacher.
"Efficient Reading of Papers in Science and Technology" by Henning Schulzrinne.
"How to Give a Great Research Talk" (2016) (2014) by Simon Peyton Jones. Excellent advice on what makes a great talk, delivering the key insight, limiting complexity, focusing on the audience, developing motivation, flow, etc.
"Even a Geek Can Speak: Low-Tech Presentation Skills for High-Tech People" by Joey Asher. Great book, found via Matt Might's academic presentation tips
"(An Opinionated Talk) On Preparing Good Talks" by Ranjit Jhala.
"How to Write a Conference Talk" by Michael Hicks.
How to Have a Bad Career by David Patterson.
"So long, and thanks for the Ph.D.!" by Ronald T. Azuma. Very useful guide to all aspects of pursuing a PhD.
Systems Benchmarking Crimes by Gernot Heiser.
"Technology and Courage", Ivan Sutherland
"Mapping out a Research Agenda", Barbara Ryder
"Three Virtues of a Great Programmer": Laziness, Impatience, and Hubris
Time Management and Organization
"Time Management" by Randy Pausch.
"6 Blog Tips for Busy Academics" by Matt Might.
"Writing a progress/status report" by Michael Ernst.
- Solving the eight-queens problem using logic (from a coursera course on automated reasoning).
- Guide to the Z3 Python API by ericpony.
- Courgette: A compression algorithm for object files that makes Chromium's updates smaller. During my internship at Google I contributed to Courgette, adding support for ELF binaries and the ARM instruction set, and documented its internals.
- GraphicML: An intermediate language for data charting. I developed this while working at Educational Testing Service.
- timesheet: A painless command-line time tracker I created during graduate school to see in detail what I was spending (and not spending) time on.
- podcasts: Scripts to download podcasts from the command-line or via a cronjob.