I will be joining the Recurse Center for their Winter 1 ‘21 batch (Nov 2021 – Feb 2022). I want to use this time learning about systems programming: storage, compilers, networking. I dream of becoming a systems programmer, hacking on databases or message queues, one day 🧑💻.
RC is a self-directed programme, so everyone is free to work on things that interest them. They recommend working on things that are challenging to do. This aligns with Andrew NG’s advice on taking on projects you are only 70% qualified for.
I don’t think I will be able to work on all of the following, but I am keeping my options open. Keeping an exhaustive list would also help me to switch to something else if I am stuck on or bored.
A simple KV Store
I want to understand how exactly databases store the data on disk. I would like to explore the different ways it is being done in different databases and implement a simple KV store backed by a B Tree. I find the implementation of a B Tree quite daunting, especially the doubly linked list at the leaf nodes. I am hoping this will also give me an opportunity to learn more about zero-copy.
Hack Go Compiler
I would like to study the Go compiler internals, maybe add a new keyword for fun (e.g. Python style for/else).
A multiplayer game
I want to learn more about sockets, firewalls, NATs etc and make two computers talk, without a central server. Topics to explore: P2P protocols, WebRTC.
Few more ideas
- Learn about async programming, multi-threading and write a toy green threads implementation
- Build a toy code search engine, learn about Kythe and Zoekt etc.
Some general aspects I would like to improve upon
- My low-level design (LLD) skills aren’t good, I’d like to get better at it. I want to learn about how to modularise the code properly, make interfaces, abstractions, and learn about OOPs
- I would like to get better at communicating my ideas succinctly
- Writing. Write faster, better and clear
- Give talks and share ideas
I have never pair programmed with anyone, so looking to pair and collaborate as much as possible. I am planning to allocate 30% of my time for collaboration.