I have about four years of experience as a backend Java developer, mostly working on production applications, but I never spent much time studying data structures and algorithms beyond the basics. I want to develop a solid foundation rather than memorize patterns or copy solutions.
I recently tried following a large DSA problem list, but I often checked the solutions too soon. A few days later, I could no longer remember the underlying intuition or approach. I'm considering starting with Abdul Bari's Data Structures & Algorithms in Java course, then moving on to coding problems and interview preparation.
For anyone who has rebuilt their DSA skills from a weak starting point, is this course a good choice, or is there a better Java-focused alternative? How did you approach learning the fundamentals, and did a particular roadmap or study routine help? I'm not in a hurry and would rather spend several months learning properly than rush through a problem list.
3 Answers
The course can be a good starting point, but you probably don’t need to pay for it. DSA concepts are mostly language-independent, and with several years of Java experience, you should be able to translate pseudocode into working code. His free lectures may be enough. The important part is to stop before looking at a solution, think through the problem, and give yourself time to struggle with it—even taking a walk when you feel tempted to look up the answer can help.
You don’t necessarily need a paid course. Pick a structured set of topics and use free explanations, documentation, and references as needed. Implementing something substantial—such as Huffman coding—can be more valuable than passively watching hours of lectures. If structure and accountability are what you need, though, paying for a course can be reasonable as long as you actively code along and don’t just watch it.
Structure is exactly what I’m looking for. I tend to jump between random resources, so I’ll probably use a course or roadmap to stay organized, then rely more on independent implementations once I understand the basics.
Keep DSA fundamentals and interview-style problem solving separate. Learning DSA means understanding how data structures work, why algorithms work, their complexity, and how to implement them. Coding challenge platforms mainly test whether you can recognize which known technique applies to a problem, so solving lots of those problems doesn’t automatically mean you understand DSA deeply.
A good foundation would include studying each structure and algorithm, writing pseudocode on paper, implementing it yourself in Java, and testing every important operation. Once you’ve built your own versions, reading the Java Collections Framework source code can show you how production-quality implementations are designed. After that, use coding problems to practice applying the concepts rather than as your only form of learning.

That makes sense. I think I need to be more disciplined about treating the course or a study plan as a structure, not as something to rush through.