Day 7 Β· First checkpoint

Week 1 Checkpoint: CLI Task Tracker

You will be able to
  • Recall Week 1 material from memory: types, loops, functions, collections, files, exceptions, terminal
  • Diagnose your weak spots with the cumulative quiz and schedule their revisits
  • Build a complete CLI task tracker with JSON persistence from a spec
  • Practice blank-page recall: write core patterns without looking, then diff against notes
Today's ~120 minutes
Deck drill: all Week 1 flashcards, misses re-drilled15 min
Blank-page protocol: patterns from memory + diff20 min
Terminal reps under the clock10 min
Project: build the task tracker from the spec55 min
Cumulative quiz + schedule revisits for misses10 min
Journal: checkpoint entry + Week 2 preview10 min

Builds on: Day 2 β€” Control flow Β· Day 3 β€” Functions Β· Day 4 β€” Collections Β· Day 5 β€” Files, JSON, exceptions

The analogy

On a real expedition, every few days you reach a checkpoint: you stop walking, unpack the whole bag, check every item, and repack it properly. Not glamorous β€” but the hikers who skip it are the ones who discover at the river crossing that their rope frayed three days ago. Today is that stop. No new terrain; instead you unpack everything from Week 1 and *handle each piece again*.

Why does this work? Memory is a path through a field: walk it once and the grass springs back by morning. The forgetting curve is steep β€” most of what you met on Monday is fading right now. But each time you *recall* something (not reread it β€” pull it out of your own head), the path gets more trodden, and the next forgetting takes weeks instead of days. That's why today starts with flashcards and a blank-page drill before any notes are opened. Then comes the checkpoint's real test: a project β€” the CLI task tracker β€” that quietly requires every single thing from this week at once. If you can build it, Week 1 is genuinely in the bag.

Why this matters on the job

Retrieval practice is the highest-effect-size study technique known, and review days are where this program cashes it in β€” skipping them is how people reach Day 90 with Day-4 gaps. The tracker itself is a rite of passage: "CRUD app with persistence" is the atom of software; every service you build later (Day 42's API, Day 119's capstone) is this pattern scaled up. And practicing building-from-a-spec matters professionally: FDEs receive requirement lists, not tutorials, and the gap between "followed a walkthrough" and "shipped from a spec" is exactly what hiring managers probe.

Guided practice

guided 1

Deck drill β€” the whole week, out loud

15 min
  1. Run through every flashcard from Days 1–6 (about 30 cards). Answer each aloud BEFORE flipping. No skipping cards that "feel known" β€” feeling known and being retrievable are different things, and the flip is the referee.
  2. Make two piles: instant-and-right vs hesitated-or-wrong. Be honest; hesitation counts as a miss.
  3. Re-drill the miss pile twice, shuffled.
  4. For the three cards you missed hardest, write each answer out by hand once β€” writing recruits another memory channel.
  5. Note your miss count in journal.md; Day 14 will ask you to beat it.
guided 2

Blank-page protocol β€” write the patterns from memory

20 min
  1. Close every file, note, and browser tab. Open one empty recall.py. From memory ONLY, write: (a) a function that safely converts a string to int, returning None on failure (try/except); (b) the load-or-default JSON pattern (open, load, FileNotFoundError -> []); (c) a word-frequency counter with .get; (d) a loop printing index and value of a list without range(len(...)) β€” if you never met enumerate, invent your notation and look it up after; (e) the main-guard skeleton.
  2. Run it. Fix only what the interpreter forces you to fix β€” errors here are the drill working, not failing.
  3. Now open your week's files and diff honestly. Mark every gap with a comment: # FORGOT: strip before int, etc.
  4. The FORGOT lines are your personal Week 1 syllabus. Copy them into journal.md.
  5. Total time cap: 20 minutes. Perfection is not the goal; the retrieval attempt is.

On your own

Terminal reps under the clock

10 min

Ten minutes, terminal only, from memory: (1) create a folder drills/ with a subfolder day7/ in one command; (2) write "checkpoint" into a file in it using echo and redirection; (3) append a second line; (4) count the lines matching "check" in that file; (5) list every .json file under your journey folder; (6) make backup.sh run and verify a new snapshot appeared.

Constraints: no notes for the first pass. Anything you can't produce, look up AFTER finishing the rest, then do the whole sequence again clean.

Hints: this is Days 5–6 material β€” mkdir -p, >>, grep -c, find -name.

Ship before you stop

The CLI task tracker

Build the tracker exactly to the spec in the tech section: five commands, JSON persistence, function-per-operation structure, main loop under a guard, and graceful handling of every listed failure. Work from the spec like it's a client requirement doc β€” resist peeking at tutorials; everything needed was built this week (the journal tool is 60% of it). Test it like a hostile user: add three tasks, quit, relaunch (they must survive), complete one, delete one, then try to break it β€” "done banana", "done 999", an empty add, a hand-corrupted tasks.json. Stretch goal if time remains: an optional due date on add, shown in list. Tomorrow this folder becomes your first git repository, so leave it clean.

Rubric β€” check what you completed (0/6)

Common mistakes & misconceptions

  • Rereading notes instead of recalling. Review means retrieval: cards answered before flipping, patterns written on a blank page. Rereading produces familiarity, which feels like knowledge and isn't.
  • Comparing input() ids to stored int ids without converting β€” "3" != 3. The Week 1 boss trap, now inside your own project.
  • Computing the next id as len(tasks) + 1. After deletions this collides with existing ids. Use max of current ids + 1 (guarding the empty list).
  • Saving only at quit. A crash mid-session then loses the whole session. Save after every mutation β€” cheap insurance, one function call.
  • Letting main() grow into a 60-line blob. The command loop should dispatch to functions; if an operation's logic lives inline in the loop, extract it.
  • Skipping the hostile-user test because "it works when I use it correctly." Users never use things correctly; neither do customers, nor LLM agents calling your tools on Day 111.
Knowledge check

Q1. tasks = load_tasks(); tasks2 = tasks; add_task(tasks2, "x"). Does tasks see the new task?

Q2. Your tracker must not crash when tasks.json is missing on first run. The Pythonic pattern?

Q3. Command parsing: "add buy rope for the crossing".split(" ", 1) gives…

Go deeper β€” curated resources

docsPython Tutorial β€” Data Structures (review the sections you diffed wrong) β†—15 mindocsjson module β€” official docs (dump/load reference) β†—10 minbookAutomate the Boring Stuff β€” Ch. 9 (files, if the tracker persistence fought you) β†—20 min
If you have a third hour
  • The testing effect (retrieval practice) in one paper β€” Roediger & Karpicke 2006 showed testing beats restudying for retention β€” the result this whole program is built on. Search the title if curious; the design of Day 7, 14, 21... is applied cognitive science, not tradition.
Done means
  • Flashcard miss count recorded; miss pile re-drilled to clean
  • recall.py written blind, diffed, FORGOT-list copied to journal
  • Tracker passes all six rubric checks including the hostile test
  • Quiz β‰₯ 2/3 and each miss's revisit day noted in the journal
How this connects

← Back: The tracker is Week 1 in one artifact: Day 2's loop and input, Day 3's functions and guard, Day 4's list-of-dicts, Day 5's JSON safety nets, run from Day 6's terminal.

Forward β†’: Tomorrow this exact folder becomes your first git repository, and Day 9 rebuilds its task dicts as a Task class. Day 21 ships a tested, packaged version of a bigger sibling. The recall protocol you ran today repeats every 7th day for 25 weeks.

Unlocks: D8 Git β€” Your Time Machine Β· D9 Object-Oriented Python I