I've been learning programming and have noticed a frustrating pattern: I can understand code when I'm following an example, and I can usually explain code someone else wrote, but when I open a blank project and try to build something myself, I have no idea where to begin or how to structure it. I'm starting to wonder whether more tutorials are actually what I need, or whether I should spend more time working through the confusion on my own before searching for solutions. For those who learned programming independently, what helped you make the transition from copying examples to creating your own projects? When you were stuck for an hour or two, how did you decide whether to keep experimenting or look for help?
5 Answers
Start with plain-language pseudocode. Write down what the program should receive, what it should produce, and the steps between those two points. Then use the language documentation or targeted searches to translate each step into code. Tutorials can make you comfortable recognizing code without teaching you how to create the plan yourself.
When you’re completely stuck, step away from the editor and work through the problem on paper. Write down sample inputs, expected results, and a few manual steps a person could follow to get from one to the other. Once the process makes sense on paper, implementing it usually feels much less mysterious.
Choose a project that is small enough to finish a rough, broken version in one sitting. Open the blank project, build until you reach a concrete obstacle, and then get help with that one part. This works much better than starting with a huge idea where the scope and the technical problems are unclear.
It’s useful to sit with a problem and try different approaches, but searching for help is not cheating. Experienced programmers look things up constantly. The important part is to investigate a specific obstacle after you’ve identified what you’re trying to accomplish, rather than blindly copying an entire solution.
Blank-project paralysis often comes from trying to design the entire architecture before writing anything. Define the input and expected output, then make the smallest possible version in one file—even if it’s hardcoded and ugly. Once you have data moving through the program, the structure and abstractions become much easier to see.

That makes sense. I think I’ve been choosing projects that are too large and then getting overwhelmed before I’ve even written the first working piece.