Is it normal to feel kind of lost after learning OOP and SOLID?
Posted by goodguyseif@reddit | learnprogramming | View on Reddit | 18 comments
I just finished a course that covered OOP and SOLID principles, and while I think I understood most of it while watching (stuff like SRP, OCP, Dependency Inversion, etc.), now that it’s over… I honestly don’t know what to do next.
I’m sitting here like, “Okay… now what?”
I don’t have a clear idea of how to apply these concepts in a real project or when I should be using them. It feels like I’ve been handed a bunch of tools, but no clue what to build.
Is this a normal feeling? Did anyone else go through this after learning OOP and SOLID?
I’d really appreciate any advice:
- How did you go from understanding the theory to actually applying it?
- Any good projects or tutorials you’d recommend for practicing?
- Or even just personal experiences — what helped it all click for you?
Would love to hear your thoughts. Thanks 🙏
iamnull@reddit
Game dev can be helpful for understanding OOP. Having classes that translate directly to things you control in a game can help remove a lot of the conceptual barrier.
Bubbly-Swan6275@reddit
OOP and SOLID are way less important than OS + Networking + DB knowledge tbh.
ScholarNo5983@reddit
Dependency Inversion is another name for dependency injection, and IMHO it really makes OOD rather confusing. Another more accurate name for these constructs is Inversion of Control (IoC) and this idea came about because of TDD, and the need to inject objects to help separate production and testing environments.
IMHO this design patterns actually go against classical OOD, which defines concepts like 'has a' and 'is a' as the types of relationships objects have with one another. Dependency injection means some external body knows all about the internals of an object and injects other objects into that object as needed.
Now the OOD model still works if you think IoC as some kind of God object that has control of the construction of every object in the system. Because IoC is a God these objects literally pop into existence.
Once you understand this, it makes a lot more sense. The IoC takes care of the construction of the object, and everything else is OOD.
DIYnivor@reddit
Pick a project that is interesting or useful to you, and develop it. You'll only really understand what you've learned when you apply it.
PureTruther@reddit
No need to learn SOLID or anything that creates structure.
Just write a code that you can easily understand after 1 year.
ohanhi@reddit
I’m a senior developer with around 15 years of professional experience. I too learned OOP and the MVC pattern (which was touted as the prime example of SOLID) at my university. Well, those patterns never really resonated with me and using Java helped solidify to me that OOP cannot be the simplest way to organize things in a maintainable way.
In my career I’ve seen a lot of patterns, and the one that really clicked for me was pure functional programming. Working with a language that doesn’t have mutable objects, null values, or even a semblance of classes was such a revelation: nearly all the problems the golden rules try to mitigate come from mutability and complex hierarchical state. Pure functions always return the same result, given the same arguments, which makes testing them incredibly easy and fun. And if the language has nothing but pure functions, then all applications built with it are incredibly easy and fun to test.
My point is, it’s okay if some aspects of programming don’t click. Maybe they will later on, when you’ve seen how following it avoided issues or cutting corners lead to issues. Maybe you’ll come across another way of looking at things (like FP for me) that finally makes sense and helps put everything else in a new perspective.
Just build things you want to build, that’s the only way programming is going to start making sense. Try following the rules and try breaking them. Come up with your own solutions and once done, analyze if what you did actually followed a common pattern, just in a roundabout way. If not, was it better than the common pattern? Why did it work, would it scale to a larger codebase or a project with 10 developers?
goodguyseif@reddit (OP)
Thanks for your comment I really appreciate it.
Should try to understand them 100% (idk if that's possible at my current state), and focus on giving these concepts all efforts, or just pass them and they'll come later on?
ohanhi@reddit
I can’t say what works for you. For me, I need to ”feel it” to understand it. If the concepts are unfamiliar enough, that usually means building an app using the new approach. If it’s something adjacent to what I already know, reading about it and seeing practical examples may be enough.
So I guess my suggestion is to let it happen naturally. The seeds of understanding have been sown.
qruxxurq@reddit
I’m betting cart-before-the-horse.
If you’re not seeing how to apply those things, I suspect you’re either not understanding the problem, or not understanding how the computer is best applied to solve the problem.
Repulsive_Constant90@reddit
You are on the right track. This is an easy fix. The problem with most programming concept is they are abstract. Think of it this way. If you see an object, say a car. How do you justify if it’s a good looking car? Well the only way that you could do so is you need to have a reference point of what is “good” and what is “bad”. It’s the same case with these concept. If you never encounter a “problem” in an OOP language code base. You will have no idea how OOP concept will solve those problems.
The easier way to move forward is find a project or build one NOT using an OOP. Once you build to certain level, stop and look at how your code wired together. Does any of the OOP concept that you know can make your code “better”.
PhilNEvo@reddit
I just finished a course in OOP too! though part of our course was a project where we tried to use it. If you haven't done a project, I would strongly encourage you to try and do a project while you keep the OOP concepts in mind.
It is especially helpful if you after it, get someone else to come and try to criticize it from an OOP perspective, because you're never going to catch or keep everything in mind all the time about every aspect of your project. When we had to defend our project, several issues I was blind to popped up!
With that said though, keep in mind OOP is not meant to be infused into every single aspect of your programming, it's just one tool in your toolbox, to help you solve problems :3
Own_Technology_9686@reddit
Did you just watch the courses or really following along making notes on why something is used.
That really helped me. Amd after every section let's say arrays I would try it myself without watching my follow along code or watching the course.
This really helps seeing where you're still stuck.
goodguyseif@reddit (OP)
Honestly I hate taking notes, I rarely have a pen & paper on my disk unless I have exams or something, I learn by just knowing the theory and them applying it as much as possible in projects until I get it, I know this might be not the best way to learn but yeah, that works for me most of the time.
Own_Technology_9686@reddit
Well I was talking about notes in the code. So follow along coding then with every piece of code just a small note on top where it explains.
And if you have no idea where to use it see after a lecture in what real world case it could be used and use that as an small project.
And for your other questions what language are you learning?
goodguyseif@reddit (OP)
yep that makes sense to me.
I am learning Java
Own_Technology_9686@reddit
No experience on projects for java but you can always ask AI like hey i just learned this part from java give me a quick project to deepen my knowledge and it will give some fun projects.
I use it myself all the time and really helped me alot then just the static learning and sometimes weird no real life use cases in courses online.
Hopefully it can help you as well ! Good luck with your learning journey
EsShayuki@reddit
Because you haven't run into problems that these principles would solve, and haven't experienced first-hand the consequences of what could happen if you weren't adhering to them. This is why, in general, doing is far more important than reading.
That's backwards. You understand the theory by applying it. Work on a project, encounter problems, fix the problems.
Any project that you personally care about and are motivated by. And it's far more useful if you work on it yourself instead of just copying it from some book or video.
First, figure out the properties of your problem, and then find a solution that best fits those properties. Try thinking about the future, like "what if I wanted this to work for both 32-bit and 64-bit floats?" or "what if I wanted to change the database I use without having to change any other part of my program" and the solutions guide you to SOLID principles naturally.
I think that it's important to always have a reason for everything you do. Don't follow the SOLID principles because someone told you that it would be good to do. Understand what problems they help you solve or avoid. If you don't understand, then don't use them. Eventually, you might encounter a debugging session that frustrates you, and you might then realize that the use of SOLID would have avoided you the headache. It's hard to internalize these things without experiencing that frustration concretely first.
xLoneWolfIV@reddit
Its normal id Say, i started study 3 months ago and i keep feel lost over time
If you want to do practice with OOP basic take a language(Java or whatever you using) and do some basic project(a bank project, a car rental project, etc) And try to build It
Then After you completed ask to chat gpt to check if you violated some rule or can improve something and study the answers It give to you.
After u feel ok about it move on and study something else.