thecodex.expert · The Codex Family of Knowledge
Learning Path

⚙️ Systems Programming

Operating systems, embedded firmware, game engines, compilers, databases, and anything where performance and control matter more than convenience.

Who this path is for

You want to understand what actually happens when code runs. You care about memory layout, CPU cache behaviour, lock-free algorithms, or why a language compiles to the instructions it does. You're interested in operating systems, embedded devices, game engines, or building the infrastructure other developers use.

1

C — the foundation everything is built on

Why start here: The Linux kernel, CPython, PostgreSQL, Git, SQLite, and most operating system kernels are written in C. Understanding C means understanding how computers actually work: memory addresses, the stack and heap, how functions get called, how strings work under the hood. Every systems programmer knows C.

What C teaches you: Pointers and memory addresses, manual allocation and deallocation (malloc/free), undefined behaviour and why it matters, the relationship between C code and assembly, how the OS and your program communicate.

The honest truth about C: C has no safety net. Buffer overflows, use-after-free, and memory leaks don't crash immediately — they corrupt memory silently. Learn to use AddressSanitizer (-fsanitize=address) and always compile with -Wall -Wextra. The danger is the point: C teaches you what every safer language is protecting you from.

Time estimate: 3–4 months to be productive. You're ready to move on when you can implement a linked list, a hash table, and a basic allocator from scratch.
2

Pick your direction: Rust, C++, or Go

Rust

Memory safety without garbage collection. The borrow checker eliminates use-after-free and data races at compile time. The future of systems programming for new projects. Hard to learn but the errors are protections.

Good for: new systems code, CLIs, WebAssembly, game engines, embedded, security-critical software.

C++

Extends C with classes, templates, RAII, the STL, and zero-overhead abstractions. Modern C++ (C++11 and later) is a very different language from C++98. Massive existing codebase — games, trading, browsers, graphics engines are mostly C++.

Good for: game development, existing C++ codebases, graphics/GPU, finance, high-performance libraries.

Go

Simpler than C++ and Rust, garbage-collected but with very low pauses. Excellent for network services, CLI tools, and cloud infrastructure. Used at Google, Docker, Kubernetes, Cloudflare.

Good for: network services, DevOps tools, Kubernetes operators, anything where simplicity matters more than zero-overhead.

Do I really need C first?

Strictly speaking, no — you can go straight to Rust or C++. But C strips away all abstractions and forces you to think about memory directly. Understanding C makes Rust's ownership model make intuitive sense instead of feeling arbitrary. It makes C++'s RAII feel like an obviously good idea. The investment pays back.