Computer Science Books
Computer Science Books
Unix Philosophy and Administration
- Linux and the Unix Philosophy by Mike Garcanz
- The Unix Programming Environment by Kernighan and Pike
- Unix Power Tools by Shelley Powers, Jerry Peek, Tim O’Reilly, Mike Loukides
- Linux Server Hacks: 100 Industrial-Strength Tips and Tools by Rob Flickenger
- UNIX and Linux System Administration Handbook by Evi Nemeth, Garth Snyder, Trent R. Hein, Ben Whaley
Discrete Mathematics
- How to Prove It: A Structured Approach by Daniel J. Velleman
- How to Solve It: A New Aspect of Mathematical Method by George Polya, Sam Sloan
- Concrete Mathematics: A Foundation for Computer Science by Graham, Knuth, and Patashnik
Data Structures and Algorithms
- Introduction to Algorithms by Thomas H. Cormen, Charles E. Leiserson, Ronald L. Rivest, Clifford Stein
- Algorithm Design by Jon Kleinberg, Éva Tardos
- The Algorithm Design Manual by Steven S. Skiena
- The Art of Computer Programming (all volumes) by Donald E. Knuth
Theory / Math
- Foundations of Computer Science by Al Aho and Jeff Ullman https://i.stanford.edu/~ullman/focs.html
- An Introduction to Functional Programming Through Lambda Calculus by Greg Michaelson
- Introduction to the Theory of Computation by Michael Sipser
- Computational Complexity by Christos H. Papadimitriou
- Computational Complexity: A Conceptual Perspective by Oded Goldreich
- Introduction to Automata Theory, Languages, and Computation by John E. Hopcroft, Rajeev Motwani, Jeffrey D. Ullman
- Computability: An Introduction to Recursive Function Theory by Nigel Cutland
- Computers and Intractability: A Guide to the Theory of NP-Completeness by M.R. Garey, D.S. Johnson
- Theory of Recursive Functions and Effective Computability by Hartley Rogers
Architecture
- Computer Organization and Design by David A. Patterson, John L. Hennessy
- Computer Architecture: A Quantitative Approach by John L. Hennessy, David A. Patterson
- What every programmer should know about memory by Ulrich Drepper https://lwn.net/Articles/250967/
Operating Systems
- Operating System Concepts by Abraham Silberschatz, Greg Gagne, Peter B. Galvin
- Operating Systems Design and Implementation by Andrew S Tanenbaum, Albert S Woodhull
- Operating Systems: Internals and Design Principles by William Stallings
- Linux Kernel Development by Robert Love
Networking
- Unix Network Programming, Volume 1: The Sockets Networking API by W. Richard Stevens, Bill Fenner, Andrew M. Rudoff
- UNIX Network Programming, Volume 2: Interprocess Communications by W. Richard Stevens
- TCP/IP Illustrated, Volume 1: The Protocols by Kevin R. Fall, W. Richard Stevens
- TCP/IP Illustrated, Volume 2: The Implementation by Gary R. Wright, W. Richard Stevens
- TCP/IP Illustrated, Volume 3: TCP for Transactions, HTTP, NNTP, and the UNIX Domain Protocols by W. Richard Stevens
- Computer Networks by Andrew S. Tanenbaum, David J. Wetherall
Security
- Security Engineering: A Guide to Building Dependable Distributed Systems by Ross Anderson
- The Art of Deception: Controlling the Human Element of Security by Kevin D. Mitnick, William L. Simon
- Ghost in the Wires: My Adventures as the World’s Most Wanted Hacker by Kevin D. Mitnick, Steve Wozniak (Foreword), William L. Simon
- The Web Application Hacker’s Handbook: Finding and Exploiting Security Flaws by Dafydd Stuttard, Marcus Pinto
- Hacking: The Art of Exploitation by Jon Erickson
- Metasploit: The Penetration Tester’s Guide by David Kennedy, Jim O’Gorman, Devon Kearns, Mati Aharoni
- Security 2020: Reduce Security Risks This Decade by Doug Howard, Kevin Prince
Cryptography
- Cryptography Engineering: Design Principles and Practical Applications by Niels Ferguson, Bruce Schneier, Tadayoshi Kohno
- Introduction to Modern Cryptography: Principles and Protocols by Jonathan Katz, Yehuda Lindell
- Elliptic Curves: Number Theory and Cryptography, Second Edition by Lawrence C. Washington
- A Course in Number Theory and Cryptography by Neal Koblitz
- Algebraic Aspects of Cryptography by Neal Koblitz (Author), A.J. Menezes (Contributor), Y.-H. Wu (Contributor), R.J. Zuccherato (Contributor)
- Schneier’s Cryptography Classics Library: Applied Cryptography, Secrets and Lies, and Practical Cryptography by Bruce Schneier
Parallelism
- The Art of Multiprocessor Programming, Revised Reprint by Maurice Herlihy, Nir Shavit
- C++ Concurrency in Action: Practical Multithreading by Anthony Williams
Formal Methods
- Software Foundations by Benjamin C. Pierce, Chris Casinghino, Michael Greenberg, Cătălin Hriţcu, Vilhelm Sjöberg, Brent Yorgey https://www.cis.upenn.edu/~bcpierce/sf/
Graphics and Simulation
- Mathematics for 3D Game Programming and Computer Graphics by Eric Lengyel
Artificial Intelligence and Machine Learning
- Artificial Intelligence: A Modern Approach by Stuart Russell, Peter Norvig
- Machine Learning by Tom M. Mitchell
Databases
Programming Languages
JavaScript
- JavaScript: The Definitive Guide by Flanagan
- JavaScript: The Good Parts by Crockford
Haskell
- Learn You a Haskell for Great Good by Miran Lipovaca https://learnyouahaskell.com/
- Real World Haskell by O’Sullivan, Goerzen and Stewart
Assembly
- Assembly Language Step-by-Step: Programming with Linux by Jeff Duntemann
C / C++
- The C Programming Language by Brian W. Kernighan, Dennis Ritchie
- Exceptional C++: 47 Engineering Puzzles, Programming Problems, and Solutions by Herb Sutter
- More Exceptional C++: 40 New Engineering Puzzles, Programming Problems, and Solutions by Herb Sutter
- Exceptional C++ Style: 40 New Engineering Puzzles, Programming Problems, and Solutions by Herb Sutter
- Effective C++: 55 Specific Ways to Improve Your Programs and Designs by Scott Meyers
- More Effective C++: 35 New Ways to Improve Your Programs and Designs by Scott Meyers
- Effective STL: 50 Specific Ways to Improve Your Use of the Standard Template Library by Scott Meyers
- C++ Templates: The Complete Guide by David Vandevoorde, Nicolai M. Josuttis
- The C++ Standard Library: A Tutorial and Reference by David Vandevoorde
- The C++ Programming Language by Bjarne Stroustrup
Python
- Automate the Boring Stuff with Python by Al Sweigart
- Python Crash Course by Eric Matthes
- Fluent Python by Luciano Ramalho
- Effective Python: 90 Specific Ways to Write Better Python by Brett Slatkin
- Learning Python by Mark Lutz
- Python for Data Analysis by Wes McKinney
- Deep Learning with Python by François Chollet
Rust
- The Rust Programming Language by Steve Klabnik and Carol Nichols
- Rust by Example by various contributors
- Programming Rust: Fast, Safe Systems Development by Jim Blandy and Jason Orendorff
- Rust in Action by Tim McNamara
- Rust Programming By Example by Guillaume Gomez and Antoni Boucher
- Rust Cookbook by Vigneshwer Dhinakaran
Compilers
- Compilers: Principles, Techniques, and Tools by Alfred V. Aho, Monica S. Lam, Ravi Sethi, Jeffrey D. Ullman
Software Engineering
- The Pragmatic Programmer: From Journeyman to Master by Andrew Hunt, David Thomas
- Clean Code: A Handbook of Agile Software Craftsmanship by Robert C. Martin
- Programming Pearls by Jon Bentley
- Mastering Regular Expressions by Jeffrey E.F. Friedl
- Software Testing: A Craftsman’s Approach by Paul C. Jorgensen
- Design Patterns: Elements of Reusable Object-Oriented Software by Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides
- Pattern Hatching: Design Patterns Applied by John Vlissides
- Code Complete 2 by Steve McConnell
Other
- Structure and Interpretation of Computer Programs by Abelson, Sussman and Sussman
- Lisp in Small Pieces by Queinnec
This post is licensed under CC BY 4.0 by the author.