Books and Papers
Books I have, read or want to read, computer science and stuff.
Books
Distributed Systems
Distributed Systems; Andrew S. Tanenbaum
Designing Data-Intensive Applications; Kleppman
Designing Event-Driven Systems; Stopford
Kafka: The Definitive Guide; Neha Narkhede, Gwen Shapira, Todd Palino
Making Sense of Stream Processing; Kleppmann
I Heart Logs; Kreps
Microservices AntiPatterns and Pitfalls, Richards
Software Architecture Patterns, Richards
Operating Systems, Networks & SRE
Modern Operating Systems; Andrew S. Tanenbaum
Computer Networks; Andrew S. Tanenbaum
The Site Reliability Engineering: How Google Runs Production Systems; Murphy, Beyer, Jones, Petoff
The Site Reliability Workbook; Murphy, Beyer, Jones, Petoff
Linux System Programming; Love
Linux Kernel Development; Love
The Linux Programmer's Toolbox; Fusco
Systems Performance: Enterprise and the Cloud; Gregg
UNIX and Linux System Administration Handbook; Evi Nemeth, Garth Snyder, Trent R. Hein, Ben Whaley, Dan Mackin
Databases
Database Internals. A Deep Dive into How Distributed Data Systems Work; Alex Petrov
Database Design for Mere Mortals: A Hands-On Guide to Relational Database Design;
High Performance MySQL: Optimization, Backups, and Replication; Baron Schwartz
Performance Engineering
Every Computer Performance Book: How to Avoid and Solve Performance Problems on The Computers You Work With; Bob Wescott
The Practical Performance Analyst; Neil Gunther
Systems Performance: Enterprise and the Cloud; Gregg
BPF Performance Tools; Gregg
Performance Solutions: A Practical Guide to Creating Responsive, Scalable Software; Connie U. Smith, Lloyd G. Williams
The Art of Capacity Planning: Scaling Web Resources; John Allspaw
Java Performance - The Definitive Guide; Scott Oaks
Optimizing Java: Practical Techniques for Improving JVM Application Performance; Benjamin J Evans , James Gough, Chris Newland
High Performance Browser Networking: What every web developer should know about networking and web performance; Ilya Grigorik
High-Performance Java Persistence; Vlad Mihalcea
Go-Perf Book, Thoughts on Go performance optimization, Damian Gryski
The Garbage Collection Handbook: The Art of Automatic Memory Management;
Programming languages
Core Java, Volume I and II; Horstmann
Thinking in Java; Eckel
OCA/OCP Java SE 7 Programmer I & II Study Guide; Sierra & Bates
Effective Java; Bloch
Java Concurrency in Practice; Goetz
Spring Boot in Action; Walls
Java EE 7 Development with WildFly; Ćmil, Matłoka, Marchioni
Java Performance - The Definitive Guide - Scott Oaks
The C Programming Language; Kernighan, Ritchie
The C++ Programming Language; Stroustrup
Effective Modern C++; Meyers
The Go Programming Language; Donovan and Kernighan
Learning Python: Powerful Object-Oriented Programming; Lutz
Scala for the Impatient; Horstmann
Functional Programming in Scala; Chiusano, Bjarnason
Scala in Depth, Suereth
Javascript: The Good Parts, Crockford
Seven Languages in Seven Weeks, Tate
Design Patterns
Design Patterns; Gang of Four
Head First, Design Patterns; Sierra, Robson, Bates & Freeman
Algorithms & Maths
Algorithms Unlocked, Cormen
Introduction to Algorithms, Cormen
Algorithms, 4th Edition by Robert Sedgewick and Kevin Wayne
A Programmer's Introduction to Mathematics, Kun
Craftsmanship
Clean Code; Martin
Working Effectively with Legacy Code; Martin
The Pragmatic Programmer; Hunt
Test Driven Development: By Example, Hunt
The Software Craftsman: Professionalism, Pragmatism, Pride; Mancuso
Domain Driven-Design
Domain Driven-Design, Evans
Implementing Domain-Driven Design, Vernon
Devops
The Goal 1 & 2, Goldratt
The Phoenix Project, Kim
The DevOPS Handbook, Kim
Papers and articles
What Every Programmer Should Know About Memory https://www.akkadia.org/drepper/cpumemory.pdf
First "Software Engineering" Nato Conference White Paper http://homepages.cs.ncl.ac.uk/brian.randell/NATO/nato1968.PDF
On the Impact of Memory Allocation on High-Performance Query Processing https://arxiv.org/abs/1905.01135
I/O Is Faster Than the CPU – Let’s Partition Resources and Eliminate (Most) OS Abstractions https://penberg.org/parakernel-hotos19.pdf
The benefits and costs of writing a POSIX kernel in a high-level language https://www.usenix.org/system/files/osdi18-cutler.pdf
Learn where some of the network sysctl variables fit into the Linux/Kernel network flow https://github.com/leandromoreira/linux-network-performance-parameters
Distributed consensus revised https://blog.acolyer.org/2019/05/07/distributed-consensus-revised-part-i/
Monitoring and Tuning the Linux Networking Stack: Sending Data https://blog.packagecloud.io/eng/2017/02/06/monitoring-tuning-linux-networking-stack-sending-data/
The Definitive Guide to Linux System Calls https://blog.packagecloud.io/eng/2016/04/05/the-definitive-guide-to-linux-system-calls/
Simple Testing Can Prevent Most Critical Failures: An Analysis of Production Failures in Distributed Data-Intensive Systems https://www.usenix.org/system/files/conference/osdi14/osdi14-paper-yuan.pdf
Various
Data and Reality: A Timeless Perspective on Perceiving and Managing Information in Our Imprecise World; by William Kent , Steve Hoberman
Last updated