Classic Texts of Computer Science
Computer science is the study of computers and how they work, as well as how programming them can change the way they operate. Computer science encompasses programming, algorithms, data recovery and much more. Computers have made great strides in the way people receive news, purchase products, and interact with each other. The following is a list of some of the most important computer science books written in the field:
An Axiomatic Basis for Computer Programming by C. A. R. Hoare – This book is one of the most widely used computer science books of all time. It discusses the many semantics of computer programming language.
Communicating Sequential Processes (CSP) by C. A. R. Hoare – First published in 1985, this book is often used to explain how this language can create patterns of interaction.
Call-By-Name, Call-By-Value, and the Lambda Calculus by Gordon Plotkin – The book explains how calculus plays a role in computer programming language.
Towards a Theory of Type Structure by John C. Reynolds – Theory on structural programming.
Structured Programming With Go To Statements by Donald E. Knuth – The book discusses how to create syntax to avoid programming errors, thus making a program run smoother.
Definitional Interpreters for Higher-Order Programming Languages by John C. Reynolds – This book discusses programming languages based on lambda calculus.
An APL Machine 1970 by Philip S. Abrams – This book was written in 1970 and proposes a design for machine structure that can better evaluate programming languages.
Henry Baker's Archive of Research Papers by Henry Baker – A collection of research papers by Henry Baker, who delved into many different programming languages and forms.
The Anatomy of a Large-Scale Hypertextual Web Search Engine by Sergey Brin and Lawrence Page – Written by the founders of Google, this paper explains the anatomy of a large search engine and how it works.
No Silver Bullet: Essence and Accidents of Software Engineering by Frederic P. Brooks, Jr. – Article published in 1986 referring to the many downfalls of software.
A Mathematical Theory of Communication by Claude Shannon – Two-part paper discussing how mathematical theory plays a role in computer programming.
Communication Theory of Secrecy Systems by Claude Shannon – Article focusing on machine encryption.
Bayesian Networks without Tears by Eugene Charniak – Information on how to decipher and understand Bayesian networks without frustration.
A Universal Algorithm for Sequential Data Compression by Jacob Ziv and Abraham Lempel – Abstract developed by two programmers on data compression and how it can be achieved with compression ratio. Likewise, for more information on raid data recovery.
A Relational Model of Data for Large Shared Data Banks 1970 by Edgar F. Codd – Explains how data is organized and how it works in data banks.
Let's Build a Compiler 1988-1995 by Jack Crenshaw – Step by step instructions on how to build a compiler.
Gauging Similarity via N-Grams: Language-Independent Sorting by Marc Damashek – Explains a technique that makes sorting and categorizing large numbers of documents easier.
Worse Is Better by Richard P. Gabriel – Essay about how starting with minimum language and building up when creating software is much easier and more effective.
Hints on Programming Language Design by C.A.R. Hoare – Many believe this paper to be a classic; explains efficiency and offers helpful tips on programming language.
Why Functional Programming Matters by John Hughes – Paper written in 1984 explaining the importance of functional programming languages and why they are important to software development.
On the Expressive Power of Programming Languages by Matthias Felleisen – Paper explaining how programming languages contain expressive terms and functions.
The Design of APL by Kenneth E. Iverson – Very important book on descriptions of algorithms.
The Early History Of Smalltalk by Alan Kay – Historical perspective on how this programming language began and how it affects computer usage today.
Computer Programming as an Art by Donald E. Knuth – Interesting perspective on how computer programming is more than just a science, but is also an art.
The Next 700 Programming Languages by Peter J. Landin – Written in 1965, this paper paved the way for the next generations to come of computer programmers.
Recursive Functions of Symbolic Expressions and their Computation by Machine (Part I) by John McCarthy – Multiple part book/paper about the LISP system and looking at it in other points of view beyond a programming perspective.
FORTH - A Language for Interactive Computing by Charles H.Moore – Book about a language that uses data stack and a simple set of other functions.
Teach Yourself Programming in Ten Years by Peter Norvig – How to teach yourself how to be a computer programmer within ten years.
Parenthetically Speaking, a Collection of Rssays from the 1990s by Kent M. Pitman – Discusses the LISP family of programming languages.
The Definition and Implementation of a Computer Language Based on Constraints by Guy Lewis Steele Jr. – Technical report based on the constraint paradigm.
Growing a Language by Guy Lewis Steele Jr. – Instructions on growing your own computer programming language, and starting out small.
Epigrams on Programming by Alan J. Perlis – A basic set of rules for computer programmers to follow.
The Complexity of Theorem Proving Procedures by Stephen A. Cook – Research on the complex issues involved with creating programs.
Steps Toward Artificial Intelligence by Marvin Minsky – Revolutionary paper written in 1960 about how to make computers solve difficult problems.
The Original 'Lambda Papers' by Guy Steele and Gerald Sussman – 1977 paper about how certain theories and existing programming concepts can prevent error and confusion in GOTO language.
A Method for Obtaining Digital Signatures and Public-Key Cryptosystems by R.L. Rivest, A. Shamir, and L. Adleman – Encryption method explaining and breaking down digital signatures.
The UNIX Time-Sharing System by Dennis Ritchie and Ken Thompson – Paper written in 1974 about UNIX and its language.