Turning objects into bytes and back — Protobuf from the wire up, plus how it compares to JSON, Avro, MessagePack, and FlatBuffers
What serialization actually is, text vs binary, schema-ful vs schemaless, and the runtime-object-vs-wire-bytes split that everything else builds on.
.proto syntax, messages, field numbers, scalar types, repeated, enum, and compiling with protoc.
Tag = (field << 3) | type, varints, zigzag, length-delimited fields — decoded byte by byte.
Add fields safely, never reuse a number, reserved, and why the field number — not the name — is the contract.
Payload size, speed, readability, tooling, and the cases where plain JSON is still the right answer.
JSON, Protobuf, Avro, MessagePack, FlatBuffers — schema, binary, size, zero-copy, and where each one wins.