Books and Papers

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


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


  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


  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


  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

  2. First "Software Engineering" Nato Conference White Paper

  3. On the Impact of Memory Allocation on High-Performance Query Processing

  4. I/O Is Faster Than the CPU – Let’s Partition Resources and Eliminate (Most) OS Abstractions

  5. The benefits and costs of writing a POSIX kernel in a high-level language

  6. Learn where some of the network sysctl variables fit into the Linux/Kernel network flow

  7. Monitoring and Tuning the Linux Networking Stack: Sending Data

  8. Simple Testing Can Prevent Most Critical Failures: An Analysis of Production Failures in Distributed Data-Intensive Systems


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