Top-10 books and papers in computing
Top-10 books in Computer Science
These are the 10 most important books that aspiring computer scientists should have on their desk. The list is, of course, highly subjective.
The C Programming Language, by Brian Kernighan and Dennis Ritchie.
Structure and Interpretation of Computer Programs, by Harold Abelson and Gerald Jay Sussman.
Compilers: Principles, Techniques, and Tools, by Alfred V. Aho, Monica S. Lam, Ravi Sethi, and Jeffrey D. Ullman.
The Art of Computer Programming, Volume 1, by Donald E. Knuth.
An Introduction to Database Systems, by C. J. Date.
The Mythical Man-Month: Essays on Software Engineering, by Frederick P. Brooks Jr.
Computer Organization and Design: The Hardware/Software Interface, by John L. Hennessy and David A. Patterson.
Modern Operating Systems, by Andrew S. Tanenbaum and Herbert Bos.
Data Structures + Algorithms = Programs, by Niklaus Wirth (the Pascal edition).
Computer Graphics: Principles and Practice, by John F. Hughes, Andries van Dam, Morgan McGuire, David F. Sklar, James D. Foley, Steven K. Feiner, and Kurt Akeley.
Top-10 papers in Computer Science
This is also a very subjective list whose primary focus is the history and evolution of computing. The list also reflects my own interests in computing which lie more on the applied side of things. No field, of course, can be summarized in just ten papers. These are only a beginning – and many of the papers below were the beginning of a new discipline within computing.
A logical calculus of the ideas immanent in nervous activity, by Warren S McCulloch and Walter Pitts (1943)
A Mathematical Theory of Communication, by Claude Shannon (1948)
A Relational Model of Data for Large Shared Data Banks, by E F Codd (1970)
A Protocol for Packet Network Intercommunication, by Vint Cerf and Robert Kahn (1974)
The Evolution of the UNIX Time-sharing System, by Dennis Ritchie and Ken Thompson (1974)
The Entity-Relationship Model–Toward a Unified View of Data, by Peter Chen (1976)
The Dynamics of Software Development, by Edsger W. Dijkstra (1977)
Can Programming Be Liberated from the von Neumann Style? A Functional Style and Its Algebra of Programs, by John Backus (1977)
Reflections on Trusting Trust, by Ken Thompson (1984)
MapReduce: Simplified Data Processing on Large Clusters, by Jeffrey Dean and Sanjay Ghemawat (2004)
There are two notable absences from the list above. Turing’s 1937 paper “On Computable Numbers, with an Application to the Entscheidungsproblem” and an English translation of Gödel’s 1931 paper “Über formal unentscheidbare Sätze der Principia Mathematica und verwandter Systeme I”. The foundations of computer science rest on these papers. They are difficult to read with only an undergraduate background in computer science, especially Gödel’s incompleteness theorems. That’s the only reason they’ve been omitted from the list above.
As it takes a while for a paper to become seminal, the list of papers above does not extend beyond the early 00s. Nevertheless, there are significant publications in CS that appeared in the past few years. These can be found on arXiv, the open-access archive for most things STEM.
Honorable Mentions
Papers
Time, Clocks, and the Ordering of Events in a Distributed System, by Leslie Lamport (1978)
Communicating Sequential Processess, by C. A. R. Hoare (1978)
End-to-End Arguments in System Design, by J.H. Saltzer, D.P. Reed and D.D. Clark (1981)
The Byzantine Generals Problem, by Leslie Lamport, Robert Shostak, and Marshall Peas (1982)
Books
Introduction to the Theory of Computation, by Michael Sipser.