I'm 16 and have been trying to learn programming since I was 12. I started with Scratch, then moved to Python, Unity, Godot, and CS50, and I'm currently learning C after watching programming videos that use it. I've made a few simple games, but I often switch tools whenever I get stuck.
I'm dealing with two main problems: I don't know what projects to make, and I tend to quit as soon as I encounter a small obstacle. For example, I abandoned Unity because I couldn't figure out how to rotate an object toward the mouse, and game development sometimes becomes difficult when math is involved. I also worry about code organization—for example, I don't want an entire project to end up inside one large main function.
How should I choose a language and project, and how can I develop the persistence to work through problems instead of constantly starting over?
4 Answers
Start with a language that lets you focus on programming fundamentals rather than fighting the tooling. Python with a simple 2D library can be a gentler path than C or a full game engine. Try projects such as Breakout, a text adventure, a calculator, a small simulation, or a program that generates project ideas.
Keep the scope intentionally small and define what ‘finished’ means before you begin. Completing several simple projects will teach you more than repeatedly restarting ambitious ones.
The biggest issue seems to be switching tools whenever something becomes difficult. Pick one language, framework, and small project, then commit to finishing it. You can follow a tutorial to learn the basics, but afterward, try rebuilding something yourself instead of immediately moving to another tool.
Getting stuck is a normal part of programming. Look up the specific problem, read documentation, experiment with small examples, and keep working until you understand the solution. If you quit every time you reach something unfamiliar, changing languages will not solve the underlying problem.
Watching experienced programmers create difficult projects can make it seem like you need an advanced language or complicated idea right away. You don’t. Choose one manageable project and learn whatever is necessary as you go. A small game, command-line utility, text adventure, or recreation of a simple project from a tutorial would all work.
The important practice is not finding the perfect project—it’s writing code, encountering problems, and learning how to solve them. That process is what builds programming ability.
You may be dealing with two habits: constantly chasing a new tool and giving up when the work becomes challenging. Both make it difficult to learn anything in depth. Stay with one environment long enough to complete something, even if the result is messy.
For game development, you don’t need to solve everything from memory. Search for concepts such as converting a mouse position into an angle or separating code into functions and modules. Basic arithmetic, geometry, and trigonometry are enough for many beginner projects, and you can learn the missing parts as they come up.

I also get stuck on how to organize the code. I don’t want everything to stay in one huge main function. How should I approach that?