Replace passive repetition with recall
Watching a solution can make unfamiliar code feel familiar without making it retrievable. After a short lesson, close the example and rebuild a smaller version. Write down what you remember, what fails and what you need to look up. Use the gaps to choose the next practice session.
Reduce the size of the problem
A complete application asks you to manage syntax, data, tools and design simultaneously. Start with one function and a concrete input/output example. Build a working version, test an edge case and then connect it to the next function. Smaller steps make errors explainable.
Debug one assumption at a time
Read the exact error and locate the first relevant line in your code. Inspect input values and types before rewriting the program. State an expected value, measure the actual value and change one cause. Keep a short record of bugs and their explanations so recurring mistakes become visible.
Use a repeatable weekly practice loop
Choose one small deliverable, such as a file-based expense tracker. Spend sessions implementing, testing and explaining it rather than collecting unrelated tutorials. At the end of the week, rebuild a key feature without the guide. Adjust the next week's scope based on what you can demonstrate.
Measure understanding through evidence
Explain why a loop terminates, what happens for an empty file and how invalid input is handled. Share a minimal reproducible example when seeking help. Progress is the ability to solve and explain increasingly unfamiliar tasks; it is not the number of videos completed.
Practice lab: explain a small program
Build a command-line list of expenses with add and total operations. Keep the first version in memory before adding file storage. Test an empty list, a decimal amount and invalid input. Explain where validation belongs and what happens when the file cannot be read. If you get stuck, reduce the task to the smallest failing example and ask for help with the expected result, actual result and code needed to reproduce it.
Check your progress
Keep your working files, test cases and notes together. Explain one design decision, demonstrate a failure case and list what you would improve next. These concrete outputs make it easier to identify the next skill to practice.