Building Modern C++ Systems From Scratch
This repo captures a 30-day, hands-on preparation plan for becoming a quant developer. It bridges algorithmic problem solving (ICPC-style) with production systems engineering: low-level C++ performance, concurrency, networked systems, and a final mini trading system. The goal is to produce public, well-documented proof-of-work that recruiters and teams can evaluate quickly.
- Signal: demonstrates practical systems & quant skills beyond algorithmic puzzles.
- Audience: ICPC competitors, systems engineers, quant devs, recruiters.
- Value: public proof-of-work, daily notes, benchmarked improvements, and a clean story for LinkedIn/GitHub.
- Each day has a folder with three files:
task.md,reading.md, andpractice.cpp(or language-appropriate code). Follow the day'stask.md, readreading.md, implement or studypractice.cpp, run tests/benchmarks, and write a shortlessons.mdentry. - Clone the repo, build the small examples with CMake, run unit tests and microbenchmarks in
benchmarks/.
Quick start (macOS / Linux)
git clone <repo-url>
cd 30-days-quant-dev
mkdir build && cd build
cmake ..
make -j
./bin/struct_sizesREADME.md— this file (story, usage, plan)CONTRIBUTING.md— how to contributeCMakeLists.txt— top-level buildsrc/— example source code and helpersweek1-modern-cpp/throughweek4-trading-systems/— day-by-day stubsresources/— recommended readings and linksbenchmarks/— harnesses and scriptsnotes/— collected lessons and writeupsfinal-outcome/— integrated mini trading system and report
Week 1 — Modern C++ Foundations (Days 1–7)
- Day 01: Memory layout —
task.md,reading.md,practice.cpp - Day 02: RAII — implement
FileWrapper - Day 03: Move semantics — small
Stringclass - Day 04: Smart pointers — simplified
unique_ptr - Day 05: Templates —
Vector<T> - Day 06: Lambdas — event dispatcher
- Day 07: Mini project — small STL-like library
Week 2 — Concurrency (Days 8–14)
- Day 08:
std::threadbasics - Day 09: Mutexes &
lock_guard - Day 10: Condition variables
- Day 11:
BlockingQueue<T> - Day 12:
ThreadPool - Day 13: Atomics & CAS
- Day 14: Mini project — scheduler + benchmark
Week 3 — Networking & Systems (Days 15–21)
- Day 15: TCP sockets — echo server
- Day 16: Serialization & endianness
- Day 17: Event loops (
poll/epoll) - Day 18: Fake exchange publisher
- Day 19: Feed handler
- Day 20: Profiling & cache analysis
- Day 21: Mini project — feed simulator
Week 4 — Trading Systems (Days 22–30)
- Day 22: Market microstructure
- Day 23:
OrderBook(add/cancel/modify) - Day 24: Matching engine (price-time)
- Day 25: Risk checks
- Day 26: Exchange connector
- Day 27: Strategy framework
- Day 28: Simple strategy (market making)
- Day 29: Benchmarking
- Day 30: Final project — integrate components and write report
Each day folder contains:
task.md— the problem and deliverables for the dayreading.md— curated reading list and notespractice.cpp— starter or reference code (compile-ready)lessons.md— short template for recording benchmarks and tradeoffs
Please read CONTRIBUTING.md before submitting work. Keep PRs small and focused (one day or one component at a time). Include tests and benchmarks for performance-related changes.
This project uses the MIT license (or choose another OSI-approved license).
- If this layout looks good, I'll create the folders and day stubs plus a working Day 01 example and a small CMake build. Open to adjustments on language (C++17 vs C++20) and benchmark tooling.