I'm a fourth-year B.Tech student specializing in computer science and AI/ML. I've studied Python, Java, SQL, DBMS, OOP, data structures, web development, and machine learning through classes, lectures, and online courses, but I have very little practical programming ability.
I can often understand existing code and recognize the concepts being used, yet I struggle when given a blank file and a task. I don't know how to break a problem down, choose the right concepts, decide what to write first, or debug and test my solution.
I've repeatedly tried courses, roadmaps, beginner projects, restarting programming fundamentals, and tutorial-based projects. Each attempt begins with motivation, but I eventually become impatient or stuck and abandon it. My main problem isn't a lack of resources; it's not knowing what to prioritize, how deeply to study each topic, what projects to build, or how to measure whether I actually understand something.
Since graduation and placements are approaching, I need a realistic, focused plan rather than another generic list of "learn DSA, development, and projects." If you were starting from this position, what language or stack would you choose, how would you rebuild programming fundamentals, learn DSA, select projects, and divide time between interview preparation and development? What would you deliberately ignore for now, and how would you make sure you finish instead of repeatedly starting over?
3 Answers
Try not to interpret your current skill level as proof that you’re unemployable. Junior candidates are expected to need guidance and improve on the job. You don’t need to master every area before applying. Choose one familiar language, probably Python or Java, and spend most of your time writing small programs without tutorials, fixing your own bugs, and gradually combining them into projects. Keep the scope small enough that you can finish each one.
The biggest change has to be finishing things instead of abandoning them whenever the excitement disappears. Employers won’t pause a task because you feel stuck, so practice working through that discomfort. Pick one very small project, even something basic like a command-line tracker or a simple CRUD application, and complete it without constantly switching courses or technologies. It’s better to finish an imperfect project and learn from the mistakes than to collect half-completed tutorials.
Be specific about the level of difficulty causing the problem. There’s a major difference between forgetting syntax, struggling to write a loop, and being unable to design a larger application from an open-ended requirement. Start by testing yourself with tiny tasks: read input, transform data, use functions, work with files, and write simple tests. Once those feel comfortable, move to small applications. For DSA, solve a few beginner problems consistently and explain your approach, rather than trying to cover every topic at once.

That makes sense. I’ve been treating the feeling of being stuck as a reason to restart, so I’ll focus on completing one small project even if the result is messy.