I've been experimenting with Python, Dart, HTML, and CSS, but I'm starting to worry that I'm only moving quickly through tutorials without really understanding what I'm doing. My current process is to watch a video, recreate the code once, write some notes in Markdown, and then move on. I keep the notes in Obsidian, but I'm not sure they're detailed or useful enough for long-term learning.
For example, I made notes about Python lists, including indexes, negative indexes, different data types, and methods such as index(). However, I'm not sure whether writing explanations and copying examples is enough to make the concepts stick. What should I change in my study process so that I understand the material and can use it independently?
4 Answers
Build something you genuinely care about, but keep the first version small. A personal project gives you a reason to look up documentation, debug errors, and connect several concepts together. You don’t need to understand every feature before starting; make a basic version, then improve it one step at a time.
It’s normal for programming to feel frustrating. Getting stuck, investigating the problem, and eventually fixing it is part of developing the skill—not evidence that your time was wasted.
Your notes aren’t useless, but notes alone are mostly knowledge collection. Try writing pseudocode before coding, explain the goal in your own words, and then attempt the solution without copying the tutorial. Look at the documentation when you get stuck, and update your notes with the specific thing you misunderstood.
A structured beginner course with substantial exercises can also give you a better progression than jumping between several languages. It would probably be more effective to focus on one language, such as Python, until you can complete a few small projects independently.
Your process is a reasonable starting point, but it’s missing the most important part: applying the idea without being guided. After learning about lists, close the tutorial and create your own exercises. Make a list of names, print it, remove and replace items, insert new ones, and experiment with indexes. Use your notes or the documentation when necessary, but first try to recall how to do it yourself.
Once that feels comfortable, turn the concept into a small challenge. For example, write a program that lets someone enter names until they submit a blank line, then add options to display, add, or remove names from the list. Small projects like this force you to combine concepts and reveal what you actually understand.
Try spending less time passively watching videos and more time solving problems. A structured course with exercises can help, especially one where you have to submit or complete programming assignments rather than just follow along. Videos and notes can introduce a topic, but the exercises are where the learning usually happens.

That makes sense. I’m currently building a small command-line task app in Python and trying to use functions as I go. I’m also working on understanding why and when to use the if __name__ == "__main__": pattern instead of just memorizing it.