Books and Papers

Books I have, read or want to read, computer science and stuff.

Books

Distributed Systems

  1. Distributed Systems; Andrew S. Tanenbaum

  2. Designing Data-Intensive Applications; Kleppman

  3. Designing Event-Driven Systems; Stopford

  4. Kafka: The Definitive Guide; Neha Narkhede, Gwen Shapira, Todd Palino

  5. Making Sense of Stream Processing; Kleppmann

  6. I Heart Logs; Kreps

  7. Microservices AntiPatterns and Pitfalls, Richards

  8. Software Architecture Patterns, Richards

Operating Systems, Networks & SRE

  1. Modern Operating Systems; Andrew S. Tanenbaum

  2. Computer Networks; Andrew S. Tanenbaum

  3. The Site Reliability Engineering: How Google Runs Production Systems; Murphy, Beyer, Jones, Petoff

  4. The Site Reliability Workbook; Murphy, Beyer, Jones, Petoff

  5. Linux System Programming; Love

  6. Linux Kernel Development; Love

  7. The Linux Programmer's Toolbox; Fusco

  8. Systems Performance: Enterprise and the Cloud; Gregg

  9. UNIX and Linux System Administration Handbook; Evi Nemeth, Garth Snyder, Trent R. Hein, Ben Whaley, Dan Mackin

Databases

  1. Database Internals. A Deep Dive into How Distributed Data Systems Work; Alex Petrov

  2. Database Design for Mere Mortals: A Hands-On Guide to Relational Database Design;

    Michael J. Hernandez

  3. High Performance MySQL: Optimization, Backups, and Replication; Baron Schwartz

Performance Engineering

  1. Every Computer Performance Book: How to Avoid and Solve Performance Problems 
on The Computers You Work With; Bob Wescott

  2. The Practical Performance Analyst; Neil Gunther

  3. Systems Performance: Enterprise and the Cloud; Gregg

  4. BPF Performance Tools; Gregg

  5. Performance Solutions: A Practical Guide to Creating Responsive, Scalable Software; Connie U. Smith, Lloyd G. Williams

  6. The Art of Capacity Planning: Scaling Web Resources; John Allspaw

  7. Java Performance - The Definitive Guide; Scott Oaks

  8. Optimizing Java: Practical Techniques for Improving JVM Application Performance; Benjamin J Evans , James Gough, Chris Newland

  9. High Performance Browser Networking: What every web developer should know about networking and web performance; Ilya Grigorik

  10. High-Performance Java Persistence; Vlad Mihalcea

  11. Go-Perf Book, Thoughts on Go performance optimization, Damian Gryski

  12. The Garbage Collection Handbook: The Art of Automatic Memory Management;

    Richard Jones, Antony Hosking, Eliot Moss

Programming languages

  1. Core Java, Volume I and II; Horstmann

  2. Thinking in Java; Eckel

  3. OCA/OCP Java SE 7 Programmer I & II Study Guide; Sierra & Bates

  4. Effective Java; Bloch

  5. Java Concurrency in Practice; Goetz

  6. Spring Boot in Action; Walls

  7. Java EE 7 Development with WildFly; Ćmil, Matłoka, Marchioni

  8. Java Performance - The Definitive Guide - Scott Oaks

  9. The C Programming Language; Kernighan, Ritchie

  10. The C++ Programming Language; Stroustrup

  11. Effective Modern C++; Meyers

  12. The Go Programming Language; Donovan and Kernighan

  13. Learning Python: Powerful Object-Oriented Programming; Lutz

  14. Scala for the Impatient; Horstmann

  15. Functional Programming in Scala; Chiusano, Bjarnason

  16. Scala in Depth, Suereth

  17. Javascript: The Good Parts, Crockford

  18. Seven Languages in Seven Weeks, Tate

Design Patterns

  1. Design Patterns; Gang of Four

  2. Head First, Design Patterns; Sierra, Robson, Bates & Freeman

Algorithms & Maths

  1. Algorithms Unlocked, Cormen

  2. Introduction to Algorithms, Cormen

  3. Algorithms, 4th Edition by Robert Sedgewick and Kevin Wayne

  4. A Programmer's Introduction to Mathematics, Kun

Craftsmanship

  1. Clean Code; Martin

  2. Working Effectively with Legacy Code; Martin

  3. The Pragmatic Programmer; Hunt

  4. Test Driven Development: By Example, Hunt

  5. The Software Craftsman: Professionalism, Pragmatism, Pride; Mancuso

Domain Driven-Design

  1. Domain Driven-Design, Evans

  2. Implementing Domain-Driven Design, Vernon

Devops

  1. The Goal 1 & 2, Goldratt

  2. The Phoenix Project, Kim

  3. The DevOPS Handbook, Kim

Papers and articles

  1. What Every Programmer Should Know About Memory https://www.akkadia.org/drepper/cpumemory.pdf

  2. First "Software Engineering" Nato Conference White Paper http://homepages.cs.ncl.ac.uk/brian.randell/NATO/nato1968.PDF

  3. On the Impact of Memory Allocation on High-Performance Query Processing https://arxiv.org/abs/1905.01135

  4. I/O Is Faster Than the CPU – Let’s Partition Resources and Eliminate (Most) OS Abstractions https://penberg.org/parakernel-hotos19.pdf

  5. The benefits and costs of writing a POSIX kernel in a high-level language https://www.usenix.org/system/files/osdi18-cutler.pdf

  6. Learn where some of the network sysctl variables fit into the Linux/Kernel network flow https://github.com/leandromoreira/linux-network-performance-parameters

  7. Monitoring and Tuning the Linux Networking Stack: Sending Data https://blog.packagecloud.io/eng/2017/02/06/monitoring-tuning-linux-networking-stack-sending-data/

  8. 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

  1. Data and Reality: A Timeless Perspective on Perceiving and Managing Information in Our Imprecise World; by William Kent , Steve Hoberman