Week 1 Checkpoint: CLI Task Tracker
- 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
| Deck drill: all Week 1 flashcards, misses re-drilled | 15 min |
| Blank-page protocol: patterns from memory + diff | 20 min |
| Terminal reps under the clock | 10 min |
| Project: build the task tracker from the spec | 55 min |
| Cumulative quiz + schedule revisits for misses | 10 min |
| Journal: checkpoint entry + Week 2 preview | 10 min |
Builds on: Day 2 β Control flow Β· Day 3 β Functions Β· Day 4 β Collections Β· Day 5 β Files, JSON, exceptions
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.
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
Deck drill β the whole week, out loud
15 min- 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.
- Make two piles: instant-and-right vs hesitated-or-wrong. Be honest; hesitation counts as a miss.
- Re-drill the miss pile twice, shuffled.
- For the three cards you missed hardest, write each answer out by hand once β writing recruits another memory channel.
- Note your miss count in journal.md; Day 14 will ask you to beat it.
Blank-page protocol β write the patterns from memory
20 min- 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.
- Run it. Fix only what the interpreter forces you to fix β errors here are the drill working, not failing.
- Now open your week's files and diff honestly. Mark every gap with a comment: # FORGOT: strip before int, etc.
- The FORGOT lines are your personal Week 1 syllabus. Copy them into journal.md.
- Total time cap: 20 minutes. Perfection is not the goal; the retrieval attempt is.
On your own
Terminal reps under the clock
10 minTen 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.
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.
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.
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
- 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.
- 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
β 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