I've been trying to learn programming for about four years, but I still haven't released a polished project. Whenever I start building something, I either switch to another language or decide that the project structure is wrong and delete everything so I can start over. I want to finally complete something, but I don't know what kind of project to choose or which language to commit to. How can I stop language-hopping and avoid constantly restarting?
4 Answers
The bigger issue may be restarting, not choosing the wrong language. Every sizeable codebase eventually has awkward structure or parts you would design differently. Try treating those parts as refactoring opportunities instead of deleting the whole project. Make a backup or create a separate branch, keep the working version, and improve one section at a time. A finished imperfect project teaches you much more than a perfect project that never gets completed.
Pick one stack based on the kind of thing you want to build, then commit to it for a while. For example, choose web, desktop, mobile, games, or something else, and stick with the tools for several small projects. The language matters much less than learning how to plan, debug, organize, and finish. You can always explore other languages later, but switching every time you hit friction prevents you from developing those deeper skills.
It also helps to separate experimentation from production. Use short exercises to try new languages and libraries, but choose one familiar setup for the project you intend to complete. You don't need to know every feature of a language before starting; learn what you need as problems come up. Programming skills transfer between languages, so changing later won't erase your progress.
Start with a project small enough to finish in a week or two, even if it seems unimpressive. A command-line tool, simple game, basic file organizer, or tiny website is enough. Define a minimal version before writing code, and consider it finished once that version works. You can add features afterward, but don't redesign the entire foundation whenever you learn something new.

The language change usually happens because I dislike how I structured the project. For example, I started a file manager in Odin but became frustrated with handling errors, so I deleted everything. When I switch languages, I feel like I need to relearn all their features before I can solve the same problem properly.