Charles Fonseca describes moving from web development into systems programming to understand how databases work beneath the abstractions of web applications. Building a database, he argues, means confronting different challenges: memory management, concurrency, and reliable storage that persists over time. He shares a practical learning path centered on studying database concepts, writing small projects, and learning alongside people who build systems. Rather than starting with sprawling codebases such as PostgreSQL, MySQL, or ClickHouse, he recommends beginning with manageable examples and increasing their complexity as understanding grows.
His recommendations span foundational study and hands-on exploration. Key topics include LSM trees, B-trees, skip lists, hash maps, and the tradeoffs of disk-based algorithms, where reducing random reads and making effective use of each page can matter more than choosing an algorithm suited to memory. Suggested resources include Andy Pavlo’s database lectures, books such as Database Internals and Designing Data-Intensive Applications, and codebases including SQLite, PostgreSQL extensions, and embedded engines TidesDB and SlateDB. Fonseca also credits Zig’s low-level control and approachable ergonomics with making systems work accessible to him, and points learners to its documentation and communities. His broader message is to combine focused study with experimentation and community participation, rather than passively consuming resources or tackling complex projects too early.
Summary generated by AI from the linked article. hn.today is not affiliated with Hacker News or Y Combinator.