Things i want to learn or get better at
Long term
- Learn more about networking (maybe implement a few protocols)
- Set theory
- Operating systems
- Distributed systems
- Computer science in general
- Compilers
Near future
- AWS solutions
- Kong api gateway
- Docker
- Kubernetes
- Kafka
- Computer networking
Topics that i may visit/revisit if i have the time
- State machines
- Type theory
Books
- Functional programming in Scala - https://www.manning.com/books/functional-programming-in-scala
- Types and Programming Languages - https://www.amazon.com/Types-Programming-Languages-MIT-Press/dp/0262162091
- Designing data intensive applications - https://www.amazon.com/Designing-Data-Intensive-Applications-Reliable-Maintainable/dp/1449373321
- Domain modeling made functional - https://www.amazon.com.br/Domain-Modeling-Made-Functional-Domain-Driven/dp/1680502549
- Go with the domain - threedots.tech
- Effective software testing, by Maurício Aniche - https://www.effective-software-testing.com/
- LISP 1.5 Programmer's manual - http://www.softwarepreservation.org/projects/LISP/book/LISP%201.5%20Programmers%20Manual.pdf
- Learn Rust With Entirely Too Many Linked Lists - https://rust-unofficial.github.io/too-many-lists/
- Operating Systems: Three Easy Pieces - https://pages.cs.wisc.edu/~remzi/OSTEP/
- System Design Interview – An insider's guide - https://www.amazon.com.br/System-Design-Interview-Insiders-English-ebook/dp/B08B3FWYBX
- System Design Intereview - An insider's guide volume 2 - https://www.amazon.com/System-Design-Interview-Insiders-Guide/dp/1736049119
- The async book - https://rust-lang.github.io/async-book/01_getting_started/01_chapter.html
- The DynamoDB book - Alex DeBrie
- The Rust performance book - https://nnethercote.github.io/perf-book/title-page.html
- Rust for Rustaceans - https://www.amazon.com.br/Rust-Rustaceans-Programming-Experienced-Developers-ebook/dp/B0957SWKBS
- Purely functional data structures - https://www.amazon.com/Purely-Functional-Data-Structures-Okasaki/dp/0521663504
- Compiling to assembly from scratch - https://keleshev.com/compiling-to-assembly-from-scratch/
- Test Driven Development: By Example - https://www.amazon.com/Test-Driven-Development-Kent-Beck/dp/0321146530
- Demystifying Async/Await in Rust - https://ruspiro.github.io/ruspiro-async-book/cover.html
- Kafka: The Definitive Guide v2 - https://www.confluent.io/resources/kafka-the-definitive-guide-v2/
- I Love Logs: Event Data, Stream Processing, and Data Integration - https://www.confluent.io/ebook/i-heart-logs-event-data-stream-processing-and-data-integration/
- The Annotated Turing: A Guided Tour Through Alan Turing's Historic Paper on Computability and the Turing Machine - https://www.amazon.com.br/Annotated-Turing-Through-Historic-Computability/dp/0470229055
- Computer networking: A top-down approach
- Kubernetes in action - https://www.amazon.com/Kubernetes-Action-Marko-Luksa/dp/1617293725
- Advanced Algorithms and Data Structures - https://www.manning.com/books/advanced-algorithms-and-data-structures
- Build an orchestrator in Go - https://www.manning.com/books/build-an-orchestrator-in-go
- TODO: something about Linux internals
- Database internals - https://www.databass.dev/
- Modern X86 Assembly Language Programming: Covers x86 64-bit, AVX, AVX2, and AVX-512 - https://www.amazon.com/Modern-X86-Assembly-Language-Programming/dp/1484240626/ref=sr_1_2?keywords=x86+assembly&qid=1656866153&s=books&sprefix=x86+as%2Cstripbooks%2C215&sr=1-2
- Windows Internals, Part 1: System architecture, processes, threads, memory management, and more - https://www.amazon.com/Windows-Internals-Part-architecture-management/dp/0735684189/ref=sr_1_1?crid=ZRWYAAIBTVK4&keywords=windows+internals&qid=1656865833&s=books&sprefix=windows+internals%2Cstripbooks%2C192&sr=1-1
- Practical Reverse Engineering: x86, x64, ARM, Windows Kernel, Reversing Tools, and Obfuscation - https://www.amazon.com/Practical-Reverse-Engineering-Reversing-Obfuscation/dp/1118787315/ref=pd_sbs_sccl_2_7/141-4908705-3722142?pd_rd_w=6MHsz&content-id=amzn1.sym.3676f086-9496-4fd7-8490-77cf7f43f846&pf_rd_p=3676f086-9496-4fd7-8490-77cf7f43f846&pf_rd_r=02CGG41V671CN9W4AGBT&pd_rd_wg=hLRWX&pd_rd_r=7fbf7d30-d470-4a7b-8db5-1c454a1d006c&pd_rd_i=1118787315&psc=1
Papers
Good repository that contains a lof of papers: https://github.com/papers-we-love/papers-we-love
- Monadic Parser Combinators - https://www.cs.nott.ac.uk/~pszgmh/monparsing.pdf
- Pablo Nogueira - A Short Introduction to Systems F and Fω - https://web.archive.org/web/20210704051919if_/https://babel.ls.fi.upm.es/~pablo/Papers/Notes/f-fw.pdf
- Your server as a function - Marius Eriksen@twitter https://monkey.org/~marius/funsrv.pdf
- Bitcask: A Log-Structured Hash Table for Fast Key/Value Data - https://riak.com/assets/bitcask-intro.pdf
- Network Applications of Bloom Filters: A Survey - https://www.eecs.harvard.edu/~michaelm/postscripts/im2005b.pdf
- SWIM: Scalable Weakly-consistent Infection-style Process Group Membership Protocol (used by Serf which is used by Consul) - https://www.cs.cornell.edu/projects/Quicksilver/public_pdfs/SWIM.pdf
- Dynamic Circular Work-Stealing Deque - https://www.dre.vanderbilt.edu/~schmidt/PDF/work-stealing-dequeue.pdf
- DynamoDB: Amazon's highly available key-value store - https://github.com/papers-we-love/papers-we-love/blob/f28b9c9f6c52a81aa9e60521c794f1c3aeafa9a7/datastores/dynamo-amazons-highly-available-key-value-store.pdf
- Cooperative Task Management without Manual Stack Management - http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.69.7395&rep=rep1&type=pdf
- Actor Model of Computation - https://arxiv.org/vc/arxiv/papers/1008/1008.1459v8.pdf
- Bigtable: A Distributed Storage System for Structured Data - https://static.googleusercontent.com/media/research.google.com/en//archive/bigtable-osdi06.pdf
- Theorems for free! - https://people.mpi-sws.org/~dreyer/tor/papers/wadler.pdf
- Tony Hoare: Communicating Sequential Processes - https://www.cs.cmu.edu/~crary/819-f09/Hoare78.pdf or http://www.cs.ox.ac.uk/files/6164/H76%20-%20Communicating.pdf
- Joe Armstrong - A history of Erlang - https://www.labouseur.com/courses/erlang/history-of-erlang-armstrong.pdf
- Efficient Reconciliation and Flow Control for Anti-Entropy Protocols - https://www.cs.cornell.edu/home/rvr/papers/flowgossip.pdf
- Hashed and Hierarchical Timing Wheels: Efficient Data Structures for Implementing a Timer Facility - http://www.cs.columbia.edu/~nahum/w6998/papers/ton97-timing-wheels.pdf
- Actor Model of Computation: Scalable Robust Information Systems - https://arxiv.org/abs/1008.1459
- Distributed hash tables - https://www.researchgate.net/profile/Klaus-Wehrle/publication/220978596_7_Distributed_Hash_Tables/links/00b7d521d0548d8d32000000/7-Distributed-Hash-Tables.pdf?origin=publication_detail
Other
- Read HTTP RFC's and implement them
- Clojure persistent vector - https://hypirion.com/musings/understanding-persistent-vector-pt-1
- Cornell CS 3110 - https://www.cs.cornell.edu/courses/cs3110/2021sp/textbook/intro/intro.html
- Stack based virtual machines - https://andreabergia.com/stack-based-virtual-machines/
- Introduction to type systems - https://splintah.github.io/series/Introduction%20to%20Type%20Systems.html
- Reconstructing TypeScript - https://jaked.org/blog/index
- Async in depth - https://tokio.rs/tokio/tutorial/async
- Actors with Tokio - https://ryhl.io/blog/actors-with-tokio/
- Writing an OS in Rust: Async await - https://os.phil-opp.com/async-await/
- Patterns of distributed systems - https://martinfowler.com/articles/patterns-of-distributed-systems/
Things to build
- Green threads explained in 200 lines of Rust - https://cfsamson.gitbook.io/green-threads-explained-in-200-lines-of-rust/
- Event loop like libuv using epoll, kqueue or iocp
- Operating System - https://os.phil-opp.com/
- Implement a CHIP-8 emulator
- Implement a RISC-V cpu in some language
- Implement api rate limiting algorithms https://en.wikipedia.org/wiki/Rate_limiting
- Compiled programming language
- Programming language with hindley milner like type system
- Persistent data structures
- JSON Parser
- Ring buffer
- Basic blockchain
- Async executor
- Distributed hierarchical timer wheel based on Hashed and Hierarchical Timing Wheels paper
Videos
- Cheaply writing a fast interpreter - Neil Mitchell - https://www.youtube.com/watch?v=V8dnIw3amLA&list=PLFTr8ChfQg9t9quFJNSoRwVHQhLFfTYnV
- Crust of Rust: Atomics and Memory Ordering - https://www.youtube.com/watch?v=rMGWeSjctlY
- Building a compiler - https://www.youtube.com/playlist?list=PLRAdsfhKI4OWNOSfS7EUu5GRAVmze1t2y
- MIT 6.824: Distributed Systems - https://www.youtube.com/channel/UC_7WrbZTCODu1o_kfUMq88g/videos