Projects
- Text Editor
- Things to learn:
- Data structures for storing the text: array, rope , gap buffer , piece table .
- Behavior and implementation of the text cursor.
- Design patterns for undo/redo: memento , command .
- Abstractions to separate the visual and memory aspects of the text.
- Further reading:
- Things to learn:
- Video game
- Compiler
- Things to learn:
- Further reading:
- Mini Operating System
- Things to learn:
- Cross compiling
- Bootloading
- BIOS interrupts
- x86 modes
- Memory management and paging
- Scheduling (e.g., round robin)
- File systems (e.g., FAT)
- Further reading:
- Things to learn:
- Console emulator
- Writing a Chip-8 emulator ( web )
- JavaScript Chip-8 Emulator ( Wayback Machine )
- How to Emulate a Game Boy in Rust ( Wayback Machine )
- PyBoy source code ( GitHub )
- Ray tracer
- Ray Tracing in One Weekend
- Very Gentle Introduction to Computer Graphics Programming
- Computer Graphics from Scratch ( web )
- Ray Tracing from Scratch in Python ( web )
- Optimizing a Simple Ray-Tracer Written in Go ( web )
- Real-Time Ray Tracing in JavaScript ( web )
- Bounding volume hierarchy ( Wikipedia )
- Ray Tracing Gems ( Amazon )
- The Ray Tracer Challenge ( Amazon )
- Real-Time Rendering ( Amazon )
- Key-value store web API
- Web browser
- Stock trading bot
Databases
- blog.bytebytego.com - Understanding database types
- Read replica pattern
Caching
- Caching strategies
- Read Strategy
- Cache Aside
- Read Through
- Write Strategy
- Write around
- write back
- write through
- Read Strategy
- Cache Eviction
- LRU / LFU / FIFO / RR
Infrastructure
- blog.twitter.com - The infrastructure behind twitter scale
- blog.twitter.com - Discovery and consumption of analytics data at twitter
- blog.twitter.com - Twitter experimentation technical overview
- blog.twitter.com - How we scaled reads on the twitter users database
- blog.twitter.com - Stability and scalability for search
- slack.engineering - Reducing slacks memory footprint
- Microservices
- orchestration / choreography
Technology
- What happens when you type a URL into your browser?
- DNS cache / DNS Resolver / DNS Server / TCP/HTTP
- Chrome Browser
- Aws Lambda
- How does HTTPS work?
- What is SSO?
- What does API gateway do?
Computing
- Storage Systems
- Block/File/Object storages
- Collaborative algorithms
- Oerational Transformation / CRDTs
- Algorithms to read about
- Geohash
- Quadtree
- Consistent hashing
- Leaky bucket /token bucket
- Trie
- Rsync
- Raft
- Paxos
- Bloom filter
- Merkle tree
- Hyperloglog
- Count-min sketch
- Hierarchical timing wheels
- Topological sort
- Recursive descent parsing
- Myers string difference
- Bloom filter
- Piece table
- Splay tree
- Segment tree
- Fibonacci heap
- Skip list
- Union find
- What is the difference between Process and Thread?
- Designing a location-based service
- How does 2-factor works?
- www.computerhope.com - File descriptor
- CAP theorem
- What is a Proxy?
- Forward/Reverse Proxy
- RPC vs. gRPC
- deployment strategies
- Big Bang
- Rolling
- Blue-green
- Canary
- Feature Toggle
Books
- General
- The Design of Everyday Things
- Predictably Irrational
- Outliers
- Creativity, Inc
- Coders at Work
- The Mythical Man-Month
- Programming
- Writing an Interpreter in Go
- Learn you a Haskell
- Programming Game AI by Example
- Algorithms - Jeff Erickson
- Algorithmic Thinking: A Problem-Based Introduction
- Introduction to Algorithms
- DevOps
- Accelerate - The science of DevOps
- Continuous Delivery
- Site Reliability Engineering
- Effective DevOps
- The phoenix Project
- DevOps Handbook
