Computer Science and Programming Books
The C Programming Language (1978; 1988)
- Introduction to C co-written by one of the language designers.
 - Written by Brian Kernighan and Dennis Ritchie.
 - First published in 1978. The 2nd edition covers ANSI C and was published in 1988.
 
Structure and Interpretation of Computer Programs (1984; 1996)
- Introduces many fundamental computer programming concepts, such as recursion, abstraction and modularity.
 - Written by authors Harold Abelson, Gerald Jay Sussman and Julie Sussman.
 - 1st edition published in 1984, 2nd editon published in 1996.
 - Available for free at https://mitpress.mit.edu/sicp under the Creative Commons CC BY-SA 4.0 license.
 
Compilers: Principles, Techniques, and Tools (1986; 2006)
- Textbook about the design and implementation of a compiler (which a program for generating software from its source-code).
 - Written by authors Alfred V. Aho, Monica S. Lam, Ravi Sethi and Jeffrey D. Ullman.
 - 1st edition published in 1986, 2nd edition published in 2006.
 
Operating Systems: Design and Implementation (1987; 2006)
- Describes the implementation of MINIX, a usable UNIX-like operating system designed for learning-purposes.
 - Written by Andrew S. Tanenbaum and Albert S. Woodhull. First published in 1987, 3rd edition in 2006.
 
Introduction to Algorithms (1990; 2022)
- Written by Thomas H. Cormen, Charles E. Leiserson, Ronald L. Rivest, Clifford Stein.
 - First edition published in 1990. Fourth edition published in 2022.
 
Modern Operating Systems (1992; 2014)
- Implementation-agnostic book about many patterns when implementing an operating system (OS).
 - Written by Andrew S. Tanenbaum. First published in 1992, 4th edition published in 2014.
 
Code: The Hidden Language of Computer Hardware and Software (1999; 2022)
- Non-technical introduction to concepts related to programming and computer systems.
 - Written by Charles Petzold. First published in 1999. Second edition published in 2022.
 
The Pragmatic Programmer (1999; 2019)
- Introduces principles and practical considerations when designing and writing computer programs.
 - Written by Andrew Hunt and David Thomas. First published in 1999, 2nd edition published in 2019.
 
How to Design Programs (2001; 2018)
- Teaches a systematic approach for designing computer programs.
 - Written by Matthias Felleisen, Robert Bruce Findler, Matthew Flatt and Shriram Krishnamurthi.
 - First edition published in 2001, second edition published in 2018.
 - 1st edition available online for free at https://htdp.org.
 
Essentials of Programming Languages (2008)
- Introduces fundamental programming language constructs in a systematic and incremental manner.
 - Written by Daniel P. Friedman, Mitchell Wand, Christopher T. Haynes. Published in 2008.
 
The Linux Programming Interface (2010)
- Book which documents and explains many of the APIs of the Linux kernel and the GNU C Library.
 - Written by Michael Kerrisk and published in 2010.
 
Other Books
- “A Mathematical Theory of Communication” by Claude E. Shannon (1948). https://en.wikipedia.org/wiki/A_Mathematical_Theory_of_Communication.
 - “The Art of Computer Programming” by Donald Knuth (1968-current). https://en.wikipedia.org/wiki/The_Art_of_Computer_Programming.
 - “Algorithms + Data Structures = Programs” by Niklaus Wirth (1976). https://en.wikipedia.org/wiki/Algorithms_%2B_Data_Structures_%3D_Programs.
 - “The Elements of Programming Style” by Brian W. Kernighan and P. J. Plauger (1978). https://en.wikipedia.org/wiki/The_Elements_of_Programming_Style.
 - “The Unix Programming Environment” by Brian W. Kernighan and Rob Pike (1984). https://en.wikipedia.org/wiki/The_Unix_Programming_Environment.
 - “Design Patterns” by Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides (1994). https://en.wikipedia.org/wiki/Design_Patterns.
 - “The Practice of Programming” by Brian W. Kernighan and Rob Pike (1999). https://en.wikipedia.org/wiki/The_Practice_of_Programming.
 - “The Art of Unix Programming” by Eric S. Raymond (2003). https://en.wikipedia.org/wiki/The_Art_of_Unix_Programming.
 - “Concrete Mathemathics” by Ronald Graham, Donald Knuth and Oren Patashnik (1994). https://en.wikipedia.org/wiki/Concrete_Mathematics.
 - “A Mathematical Theory of Communication” by Claude E. Shannon (1948). https://en.wikipedia.org/wiki/A_Mathematical_Theory_of_Communication.
 
Sources
- Wikipedia's “Computer science books” category page. https://en.wikipedia.org/wiki/Category:Computer_science_books.
 - Wikipedia's “Computer programming books” category page. https://en.wikipedia.org/wiki/Category:Computer_programming_books.
 - Wikipedia's “Software engineering books” category page. https://en.wikipedia.org/wiki/Category:Software_engineering_books.