Retrieve
Answer from memory before opening docs. Failed recall marks what to study.
This is not a reading list. It is a retrieval-first, build-heavy learning system for Rust, binary parsing, packet formats, streaming reorder, market-data semantics, and performance discipline.
Build a command-line parser that reads PCAP, extracts UDP quote payloads, parses market-data messages, optionally reorders within a 3-second window, and prints deterministic output.
Each topic follows the same cognitive loop: recall first, read narrowly, build, break, measure, then explain.
Answer from memory before opening docs. Failed recall marks what to study.
Read only the slice needed for the next lab. No broad quant detours.
Implement from bytes, errors, and tests. Prefer checked slicing over clever casts.
Feed short packets, bad lengths, endian mistakes, and reordering edge cases.
After correctness, measure allocations and hot loops. Optimize measured paths.
Write one paragraph explaining the invariant, tradeoff, and failure mode.
The path is ordered by dependency, but practice stays interleaved: every phase includes correctness, malformed inputs, and explanation.
Ownership is not syntax trivia; it is how packet bytes stay borrowed, bounded, and cheap.
Explain why returning a borrowed field from a parser needs an input lifetime.
Cloning into String to escape borrow errors.
A market-data exercise is still a Unix tool: args, files, stdout, stderr, exit codes.
Describe when BufReader helps and when reading one packet at a time still matters.
Panicking on bad input instead of returning an actionable parse error.
Headers are contracts. Every length, endian field, and offset must be checked before use.
From memory: list fields needed to find the UDP payload inside IPv4.
Assuming fixed IPv4 header length and ignoring IHL.
Parsing bytes is not enough; the output must preserve timestamp, symbol, side, price, size, and order.
Explain which fields are transport metadata and which fields are market data.
Formatting early and losing numeric structure before tests can inspect it.
The 3-second buffer is a streaming algorithm, not a sort. Memory and latency are bounded.
State the heap invariant and the condition that makes an item safe to emit.
Collecting the whole input before sorting.
Performance work starts after correctness and names the metric it moved.
Name the exact benchmark, baseline, change, and result.
Replacing readable code with clever code before profiling.
Use symptoms, not vibes. Pick the route matching the thing that fails first.
Start with Lab 1 and explain lifetimes before reading packet docs.
Do Lab 2 and Lab 3 with one-byte truncation tests at every boundary.
Skip broad algorithms. Learn heap invariant, then implement Lab 5.
Delay optimization until Lab 6: benchmark, profile, change one hot path.