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, an 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.