04 — Daily Practice¶
Sprints ship rungs. Daily practice keeps the language alive in your fingers. These are two different things and both matter.
Sprint work is problem-solving — designing, debugging, benchmarking. Daily practice is muscle memory — the small, boring, repeated act of touching C++ syntax so that on the day you need to write template <typename T, std::enable_if_t<std::is_arithmetic_v<T>, int> = 0> in an study, your fingers know it before your brain does.
The 30-minute daily unit¶
Three components, in order, every day for the first 60 days. Total: ~30 minutes.
1. cppreference page (10 min)¶
Open cppreference.com. Pick ONE page — not a topic, a single page. Read it slowly. Not skim. Read the parameter table. Read the Notes section. Read the Example.
How to pick:
Week 1–2: pick from
std::container pages (vector,array,string_view,unordered_map,optional,variant).Week 3–4: pick from algorithms (
std::sort,std::partition,std::transform,std::accumulate,std::ranges::*).Week 5–8: pick from concurrency (
std::mutex,std::atomic,std::thread,std::jthread,std::stop_token).Week 9+: adapt to current phase content.
2. Code snippet (15 min)¶
Open a scratch file: ~/cpp-scratch/YYYY-MM-DD.cpp. Write a new, self-contained 20–40 line program that exercises the concept from the cppreference page. Compile with -Wall -Wextra -Werror -std=c++20. Run. If it warns, fix the warning — not by suppressing.
Do NOT copy the cppreference example. Write your own. If the page was std::partition, write a program that partitions a vector of employees by whether their salary exceeds a threshold. Something you had to think about, not transcribe.
3. Anki-style card (5 min)¶
Open your Anki deck (or a plain-text flashcards.md if Anki is friction). Add one card. Format:
Q: When does std::vector<T>::push_back invalidate iterators?
A: When size() would exceed capacity() (causing a realloc).
All existing iterators/references/pointers are invalidated.
If no realloc, only the past-the-end iterator is invalidated.
Review old cards for 3 minutes at the end. Aim for a rolling deck of 200–400 cards by M6, 500–800 by M13.
The Zoho weekday cadence — pick ONE slot¶
Do not try to do all three. Pick the one that survives contact with your actual life. Change slot if it stops working — do not skip the day.
Slot A: 6:30 AM – 7:00 AM (morning)¶
Best for: most engineers. Uninterrupted. Brain fresh. Zoho hasn’t paged you yet. Requires: sleeping by 11 PM. If you cannot, this slot is not for you. Setup the night before: open the scratch file, the cppreference page you’ll read, and the Anki app. Zero decision fatigue at 6:30.
Slot B: 1:00 PM – 1:30 PM (lunch)¶
Best for: if you have a private-ish desk or a quiet meeting room at Zoho office. Requires: discipline about phone (Slack notifications OFF during this slot). Risk: work meeting slippage, colleagues stopping by. Have a fallback slot.
Slot C: 9:30 PM – 10:00 PM (evening)¶
Best for: night owls. Also the natural time for someone finishing dinner at 9. Requires: you are not fried from work. If you are, sprint work will suffer more than daily. Risk: “just five more minutes” bleeds to midnight, wrecks tomorrow. Set an alarm at 10:00, phone in another room by 10:15.
The 60-day rule¶
No days off in the first 60 days. From 2026-07-06 to 2026-09-04. Every single day, even Sunday, even Diwali, even a wedding day — the 30-minute unit happens. Ten minutes if it must, but not zero.
Why: habit formation research puts habit automaticity at ~66 days on average. You want the muscle wired before the M2–M3 valley hits. If daily practice is still willpower-dependent at M3, it will die.
After 60 days: 5 days a week is fine. Take Sundays off. Take Fridays off if you like. Keep the streak-mentality on the 5, not the 7 — sustainability first.
Streak psychology — the Seinfeld calendar¶
Buy a physical calendar (12-month, one page per month, wall-mountable). Every day you do the 30-minute unit, put a big red X on that day. Do it right there on the wall, not on an app.
Within 2 weeks you have a chain of Xs. Within a month you have a beautiful red line. Don’t break the chain is the game.
Why physical: apps are one Cursor-tab-away from being ignored. A giant wall calendar in your line of sight from your desk is not.
Broken streak — recovery protocol¶
Streaks will break. The question is not “how do I never break the streak” — the question is “how do I not let one bad day become one bad month.”
Do NOT restart from zero. That is punishment, not process. Instead:
Same day the streak breaks — do one thing. Read one cppreference page for 5 minutes. Do not write code. Just read. That is your recovery act. Streak did not “fully break” — you had a light day.
Next day — two tiny sessions instead of one full one. Morning: 10 min cppreference. Evening: 10 min scratch code (5 lines is fine). Do not try for full 30 min — you’ll fail again.
Day 3 — resume normal cadence. Full 30-min unit.
Do NOT log the miss on the calendar as a failure. Log it with a small mark (dot instead of X) that says “recovery day, half unit done.” Different from missing entirely.
The calendar has three states: X (full), . (half / recovery), blank (missed). Aim for zero blanks in the first 60 days. Some dots are fine.
What NOT to do daily¶
LeetCode. That is sprint work (P2). If you feel the urge, redirect to Anki review.
Reading books. Books are for the Saturday morning block. Daily is doing, not reading.
YouTube tutorials. Cherno, TheCherno, mCoding are great but they are consumption. Daily is production. One CppCon talk per week on Sunday counts — daily does not.
Refactoring old code. That is procrastination in a lab coat.
The M6 rebalancing¶
At end of M6, daily practice evolves. You’ve spent 6 months on syntax/semantics. Shift to:
cppreference → reading a real codebase snippet (5–10 min from LLVM, folly, absl, or Eigen).
Scratch snippet → mini-benchmark (write a 30-line micro-benchmark using
03_benchmark_hygiene.mdrules).Anki card → kept the same (Anki is forever).
By M9 the daily unit is closer to “1 real-codebase snippet + 1 micro-experiment + Anki” than to “cppreference + scratch + Anki.” Evolve the habit; don’t kill it.
Sanity check — the Friday self-question¶
Every Friday morning, ask yourself: “Would 22-year-old me be embarrassed by what I wrote this week in the scratch folder?”
If yes, you’re not learning fast enough — raise the cppreference difficulty. If no, you’re not challenging yourself — raise the cppreference difficulty. Only answer: “22-year-old me would have needed to Google half of what I typed this week” — that’s the calibration you want.