How to learn programming the right way?
Posted by YesterdayOk921@reddit | learnprogramming | View on Reddit | 28 comments
I feel like I’ve been doing this wrong my whole life.
Every time I try to learn something new, I start by watching videos, reading stuff but after a while it either doesn’t stick or I realize I don’t actually understand it. Then I restart, try a different method, and end up in the same loop again.
There’s so much advice out there:
“just practice”
“just build projects”
“focus on fundamentals”
“don’t overthink it”
"project based learning"
But none of that really tells me how to learn in a way that actually works long-term.
Like:
- How do you know if you truly understand something vs just recognizing it?
- When do you move on vs keep practicing?
- Is it better to struggle through problems or look up solutions early?
- How do you avoid wasting time on ineffective methods?
- When to self build and when to seek approach?
Would really appreciate your approach to learn something from scratch, especially if you’ve struggled with this before.
Early_Guarantee_4307@reddit
If you are hopping from framework to framework as you say and dipping into different tutorials you will definitely end up frustrated and confused. I’m over 50 now, I’ve been programming one way or another for most of my life and that frustration and confusion still happens to me, so don’t feel that is unique to your experience.
It is important to find a source or tutorial you can trust and stick with that - there are many different ways to attack he problem and when you have more experience you’ll see having a clear goal is far more important than using the right framework or doing things the ‘right’ way. There is definitely a right way to do a lot of things, but there is also a lot of different ‘flavours’ of right - as I said, pick one and stick with it.
I see others have mentioned learning fundamentals about systems design and learning design patterns. I think this is vital and anyone that avoids that will never truly grow as a developer. However, it is a HUGE area and you will once again find yourself getting frustrated and confused.
The only way to eat an elephant is one bite at a time, so look at how small systems are architected, what patterns are used. When we talk about architecture we are talking about how to break apart a system into blocks and show how those blocks communicate and what each block does. What the blocks do and how they communicate is also covered by design patterns, because we build systems that use the same approaches over and over and knowing what those building blocks are is super important.
Go and look up the adapter pattern, repository pattern, MVC. Do a deep dive into them and understand what problem they are solving before you try and understand the implementation.
Keep the goal clear and know the problems, learn the tools and patterns you need to solve them and you’ll find yourself growing as a developer faster than you expect. Learning frameworks etc is important too, but after a while you’ll see they are all reusing the same patterns and the individual framework becomes less important than the problem they solve.
Good luck - I know I haven’t given any resources you could use because I don’t actually know which are best anymore, but I see others have made great suggestions.
YesterdayOk921@reddit (OP)
Resources are helpful but I feel this advice is far more helpful than any resources
Reasonable_Ad1226@reddit
I will help you. It’s all about hacking the human mind to learn more, and faster.
ConstructionThis1127@reddit
You probably already know from experience that if your computer program is given an input it isn’t designed to accept, all hell break loose and usually it crashes or locks up. For example, you write it to expect a 10 character string as an input, but you don’t check the input length, and you give it 15 characters instead…. Your memory gets blitzed and God knows what will happen. The same is true of your brain. If you give it a word or symbol it doesn’t actually know correctly, it tends to lock up and reboot itself, fortunately a lot more elegantly than PC’s used to! But for a bit there, it can’t process input correctly while it sorts itself out.
People usually realize that if you are reading and you come across a word you don’t know, you can sometimes figure it out from context or you can Google it (or look it up in a dictionary!) and sort out what the sentence is trying to say. But if you read a word whose meaning you are sure you know, but in fact you don’t know correctly, the sentence won’t make sense and you’ll get the brain-reboot phenomenon. It will seem as if you never read the sentence, you won’t remember what the hell it was saying. If you carry on, you’ll get the effect of realizing that you have no idea what you just read, and you’ll also feel bored and irritated by the whole subject. Then you’ll think you are stupid and simply don’t or can’t understand it. But all that happened as that your brain rebooted itself. Look hard just before you lost track for a word or symbol that you are sure you know, that it can’t be that… that’s probably the one. It has some definition that isn’t what you thought. Sort it out, and things will make sense and suddenly you won’t be a dumb idiot any more.
YesterdayOk921@reddit (OP)
you just helped me realize my current state of mind and what do i need to do, to make it right and better. 🫡🫡
ConstructionThis1127@reddit
Great! Glad to help!
ParadiZe@reddit
"honestly, I think I’ve been stuck in this cycle of “framework chasing” trying every new method or system instead of sticking with one long enough to really improve."
the answer is right there
SunsGettinRealLow@reddit
Yep, just stick with one thing for like 3-6 months to see where it goes
Feeling_Photograph_5@reddit
You just described your own problem.
I'm a professional developer and I've taught web development to hundreds of people, dozens of whom are now working in the industry.
You're doing two things wrong:
You're bounding from tutorial to tutorial instead of following a curriculum.
You're not building projects.
The most straightforward solution is this:
Dedicate one hour per day, six days per week, to learning to code
Your curriculum is the Odin Project. Do not use additional resources. Start at the beginning and don't skip anything.
When you get stuck, which will happen, use the Discord community and ask questions of AI. Do not have AI solve the challenge, as it specific questions like "why isn't my function responding to click events." In your prompt, tell it not to generate any code that isn't directly related to your question.
When it does give you answers, verify them in the official documentation and ask follow up questions until you understand where your mistake was and why the fox worked.
When it's time to build a project (TOP has them as part of the curriculum) build the project. Do not let yourself off the hook here, you must build projects of you will never learn to code regardless of anything else you do.
You can do more than one hour per day if you want but try not to do less. If you miss a day, it's gone. You can't make it up. Just get back on the horse and keep riding as if nothing had happened.
Good luck to you.
YesterdayOk921@reddit (OP)
Thanks! Will it help me understand systems like how to actually think about project building. I know how to code but not able to think critically or take decisions based on my knowledge, I rely on LLMs for tech stack, features to build etc.
Feeling_Photograph_5@reddit
Experience will help you to build. Just do one thing at a time. For example, let's say we're going to build a calculator. You know you need a UI that looks like a calculator.
If that's too much, break it down. What is the basic shape of a calculator? Add that to your page as step one. Then you need a display for your total, right? Make that as step two. Now you need a grid of buttons. Build that. Now your buttons need labels. Add them.
Now, can you get your buttons to do anything? See if you can make them log "clicked" to the console? Once you've done that, what do they really need to do? Probably store a value equal to their label, right? There are many ways to do that, none of them are wrong at this stage, just make one work.
Now, can you make the plus button work? What should it do?
Etc. just keep adding one function at a time until you have a working calculator.
YesterdayOk921@reddit (OP)
Just started with this approach. Thanks.
KC918273645@reddit
Buy a book.
honey1badger00@reddit
Read Charles Bukowski's "So you wanna be a programmer?" , I know you will get it..
YesterdayOk921@reddit (OP)
will give it a try
EntrepreneurHuge5008@reddit
You're overthinking it, my man.
Do 15-30 min of reading/watching a lecture on some fundamental topic, then apply it (practice). Once you've completed a section, build a project (thanks to your frequent practice, you should be good to start without too much of a handrail). The project will solidify your understanding and implementation of the fundamentals you learned.
Move on to the next section, and repeat. The end-of-section project may be a new one from scratch, or just built on top of the previous section's project.
YesterdayOk921@reddit (OP)
The real problem I face is designing systems, logic building and taking the right decisions. How to overcome this.
EntrepreneurHuge5008@reddit
The formula doesn't change, my man. The scope changes.
You said
Which made me think you haven't got to the "systems design" part of it. Are you learning about design patterns and software architecture now? If that's the case, the scope of the "practice" blocks changes from "practicing the implementation on code" to "thinking about the problem as a whole" -> you'll want to start drawing UML diagrams.
The logic-building part of it is a three/four-step:
Feeling_Photograph_5@reddit
The process described above is the single most essential skill in software development.
YesterdayOk921@reddit (OP)
Thanks a lot!
vu47@reddit
My thought exactly.
Gnaxe@reddit
Start by working through a programming textbook. Seriously, this is the most information-dense resource short of a private tutor (although LLMs are getting close if you know how to use them).
You'll pretty much understand Scheme at this point. If you like, you can read a textbook for some other language. Python is the default choice at the moment, but you could pick something else if you have a reason. Then learn the basics of a version control system (default choice is git; try lazygit) and try a few video game project tutorials. Then try a few small ones on your own with just reference docs. Then try bigger ones, or just add features.
jasna88bgd@reddit
Online classes with tutor, so live person u can ask question.
U cant do it alone unless u have talent for it
patternrelay@reddit
That loop is pretty common. What helped me was treating learning like feedback cycles, try, break, fix, repeat. If you can explain it simply or apply it in a small project without guides, it’s sticking. Slower often means it’s actually going deeper.
Few-School-7362@reddit
started in same loop few years back when i was switching from marketing to IT - what helped me was picking one language and actually breaking stuff instead of just following tutorials
when you can fix what you broke without googling, that's when you know you get it
YesterdayOk921@reddit (OP)
But how to actually build and break things. I may sound dumb, but how do you started with it? Can you share your experience?
SilentDanni@reddit
Think of something stupid you wanna build. Open your IDE;. Do some research; Read docs; Start implementing shit. It’ll break horribly and it’ll be a learning experience.
There’s a lot of advice out there to think about a problem you wanna solve and do it. I disagree with that. I think you should allow yourself to build stupid shit too like a tinder for cats let’s say or an app tracking how badly taylor swift is fucking the planet when she uses her jet. Just allow yourself to have stupid ideas and try executing them. I think that’s the best way to learn things.
Altruistic_Archer655@reddit
Start by understanding how IT actually works in real life, not by jumping into random tutorials or “top languages” content. Most beginner content online is either selling courses or made for people who already work in IT, so it can actually confuse and demotivate you. Instead, focus on getting a basic picture of what developers actually do, what roles exist, and how work is organized. Don’t overthink choosing the “perfect” language or roadmap. The main idea is that almost all programming languages are similar in difficulty in practice, so your first choice is not that important. You will switch and adapt anyway over time. What matters more is picking something with real job demand, not something rare or “cool” but useless for getting hired. Before deep studying, understand the environment: you will need a working computer, basic tools, and awareness that most work is routine, not glamorous hacking. Programming is closer to office work than movies meetings, tasks, fixes, and gradual improvements, not genius-level math all day. The key foundation (“base”) is more important than memorizing frameworks. This includes understanding basics like algorithms, data structures, databases (relational and non-relational), networking, operating systems, Git, Linux, and general computer science ideas. You don’t need to master everything at once, but you should build this while learning your main stack. A very important part is using resources like university-style materials, methodical practice, and structured exercises instead of only random videos or hype courses. These often give clearer fundamentals than modern “quick start” content. Neural networks and search tools are part of learning now. You’re expected to use them, but not to blindly generate code instead, use them to explain concepts, solve confusion, and speed up learning. At the same time, practice is what connects everything. Just reading or watching is not enough. Real understanding comes when you repeatedly work through tasks, see what breaks, and fix it. Later, you should also understand how companies work, what jobs exist (smaller companies vs big tech), and that hiring is based more on practical ability, communication, and basic English than on diplomas or formal education. English matters because most knowledge, tools, and solutions exist in it, even if you don’t use it directly at work often. Finally, the process is: learn basics + choose a practical direction + study real materials + practice consistently + use tools like Git/Linux/AI in real situations + prepare for interviews by simulating them and reviewing mistakes.
And most importantly: expect it to take time (months, not days), expect confusion at the start, and expect that you will learn gradually while actually doing the work, not just consuming information.
Good luck! and don't listen to those people who thinks that ai will take our jobs..it's just absurd.