- Logging guide
- How to become a good backend engineer
- Things I wish developers knew about databases
- Kafka demystified
- How to design a good API
- School of SRE
- Google SRE Book
- The Copenhagen Book, implementing auth
- BugFree AI, practice system design and behavioral interviews like LeetCode
- System Design Excalidraws
- Setting up a Mac terminal
- Designing Data Intensive Applications, blog notes
Systems programming
- Finish the K&R C book
- Operating Systems: Three Easy Pieces
- OSDev wiki
- Linux Journey
- Systems programming in C++ (TUM)
- linuxcommand.org
Step 1: Master C
Resource: K&R, The C Programming Language
- Learn C fundamentals: pointers, arrays, structs, memory, function pointers, file I/O
- Code all exercises to build muscle memory
Step 2: Learn Linux basics & the command line
Resource: Linux Journey
- Learn the Linux filesystem, shell, processes, permissions, piping, and basic tools
- Practice with the command line regularly
Step 3: Understand OS internals & concepts
Resource: Operating Systems: Three Easy Pieces
- Learn concepts:
- CPU scheduling
- Memory (paging, segmentation)
- Processes & threads
- Concurrency
- File systems
- Implement small projects in C to simulate these concepts
Step 4: Apply C in practical systems programming
Resource: C++ Praktikum (TUM)
- Focus on low-level systems topics: file I/O, memory allocators, concurrency
- Implementation exercises:
- Build allocators
- Work with memory-mapped files
- Build multi-threaded tools
Step 5: Dive into bare-metal OS development
Resource: OSDev Wiki
- Learn bootloaders, x86 architecture, and kernel development
- Build a toy OS from scratch (bootable in QEMU or VirtualBox)