I'm a beginner who wants to learn programming deeply rather than just follow tutorials or memorize syntax. I want to become comfortable writing code independently, solving problems, understanding how programs work, and eventually preparing for software-development roles. I'm unsure which language to start with and which books, courses, or practice methods are genuinely useful. For those who became capable programmers, what helped most? If you could start over from zero, what would you do differently?
5 Answers
Try not to treat “learn programming” as a finish line. That goal is too vague, and every new topic can make the field seem larger. Decide what you want to build first, then learn the concepts required for that project. If you’re making a game, you may become motivated to learn vectors or collision detection; if you’re deploying an app, you’ll naturally encounter testing, releases, and hosting. Those practical parts are important too, because professional development involves more than writing code.
Pick a small project you genuinely want to exist and build it without following a tutorial step by step. A file-renaming tool, number guesser, simple game, or personal automation script is enough. You’ll run into the exact gaps you need to fill, and getting stuck, reading documentation, breaking things, and fixing them teaches more than passively watching lessons. Python is an easy first choice, but the language matters much less than sticking with one and actually making things.
Don't be afraid of mistakes. Choose projects that are slightly beyond your current ability, even if you choose the wrong idea or make the scope too large. Finish what you can, figure out what went wrong, then adjust and try again. Also practice the basics deliberately—conditions, loops, functions, inputs, and outputs—until they feel natural. Once the mechanics become familiar, you can spend more attention on problem-solving.
If I started again, I’d stop spending so much time searching for the perfect language or course. I’d choose one reasonable resource, work through the exercises, and regularly branch off to make something slightly different without the instructions open. When errors lead to confusing rabbit holes, reduce the problem to a tiny example, read the error carefully, check the official documentation, and ask one focused question at a time. You don’t need to understand every advanced term immediately; keep a note of unfamiliar concepts and return to them when they become relevant.
A structured course can give you useful direction. An introductory computer-science course such as CS50x covers programming, memory, data structures, and problem-solving through assignments and a final project. Starting with C can make some of the underlying mechanics more visible, while Python is generally gentler for a first language. Either way, use the course as a foundation and then build your own small programs instead of collecting courses.

That helps. My biggest problem is that one error often leads to several unfamiliar terms, so I end up spending the whole day researching instead of making progress. Breaking the issue into a tiny example and keeping track of the deeper topics should make that less overwhelming.