How I learnt DSA and landed an internship
My approach to learning data structure and algorithms
Welcome, dear readers, to my new blog. This blog is something different from my previous ones. Unlike my other blogs where I share my experiences or try to educate you about various topics I come across, today I will be sharing my journey of learning DSA and securing an internship. If you have been following my blogs, you must know that I am still a newbie in this tech field, with just one year of experience, and getting an actual internship in such a short time is a big achievement for me. So, without further ado, let's begin this blog where I will be sharing the resources, tips, and tricks that I followed and how I practiced to achieve this milestone.
But before delving into that, it's important to understand why DSA is important. After all, it's not just about cracking interviews and landing a job; there must be a bigger reason for gaining knowledge in data structures and algorithms.
Why DSA?
DSA forms the backbone of problem-solving in software development, offering a systematic approach to analyzing, designing, and implementing efficient algorithms. But why is it necessary to implement efficient algorithms? Can't we simply use any algorithm to get the job done? The truth is, efficient algorithms and optimized data structures play a vital role in developing software applications capable of handling large datasets and performing tasks swiftly. A profound understanding of DSA empowers you to select the most suitable data structures and algorithms for various scenarios, resulting in more efficient and scalable software solutions.
Now, that we have known why data is important let's jump on to the blog.
My approach to learning
Like many of you, I too had initial concerns and worries when it came to learning DSA. However, as I progressed, I made some mistakes, and learned from them, and with time and consistency, I became capable of self-learning this subject.
How I started
DSA was included in my college syllabus during my second semester, and I felt determined to understand it no matter what. However, I found it incredibly challenging, especially since my programming concepts were not strong enough to grasp DSA easily. In my quest to learn, I searched for various online courses and attempted to read books, but none of them proved helpful. The courses were too lengthy and overwhelming, and the language used in the books was difficult for me to comprehend.
Fortunately, I stumbled upon a course called "DSA Java" on the "For My Scholars" channel, and it turned out to be a game-changer for me. The educator's teaching style was exceptional, and I genuinely loved the course. I now highly recommend it to my juniors and anyone who asks for my advice. What stood out about this course was that it didn't assume prior knowledge. Unlike most popular courses that seemed to expect a basic understanding, this course started from the ground up. Whether you are a beginner aiming to kickstart your journey or an intermediate learner looking to revise, I highly recommend checking out this course.
Remember, you can learn from anywhere, but I am sharing what specifically worked for me. This course was a breath of fresh air, providing clear explanations and guidance that helped me overcome the initial hurdles in learning DSA.
After the basics
Once my basics were clear, I realized the importance of practicing questions to solidify my understanding. Many people recommended websites like HackerRank and LeetCode for practice. However, when I started attempting problems on these platforms, I encountered difficulties. While I could solve some easy and school-level questions, I struggled as the difficulty level increased. It made me feel like I didn't know enough. That's when I realized that along with understanding data structures, having knowledge of a programming language is equally crucial.
People often suggest that having a basic understanding of a language like C++ or Java is sufficient, but I don't endorse that view. I strongly recommend having more than just a basic understanding. It is essential to be familiar with concepts like OOPs, threading, and exception handling if you truly want to progress. Personally, I chose Java as my language of choice for various reasons, which I have discussed in this blog.
At this point, one resource became incredibly helpful, and I want to give it a shout-out. That resource is the "Head First Java" book. I highly recommend this book to anyone interested in learning Java. It presents everything in a simplified manner, making it one of the best books ever written on Java. You could find the soft copy of this book online for free. I got the hard copy from the library of my college.
With my understanding of Java in place, all I needed was ample practice with problem-solving.
How I practiced problems
Now that I knew the basics and had a programming language under my belt, it still wasn't sufficient for me to practice problems effectively. While I had solved some questions during my learning phase, I struggled with getting into the flow and having a clear understanding of how to approach problems. My main concern was figuring out how to think after encountering a problem.
During this time, I came across a YouTube playlist on DSA in Java by Kunal Kushwaha. The content overwhelmed me in the best way possible. It felt like a stroke of luck that I found the best resource for learning my chosen language. I watched the videos of his course, which covered topics from the basics but focused more on the DSA aspect rather than the core concepts of the language. Although the course was not yet complete, I found immense value in referring to his videos whenever I got stuck on a particular topic.
Now, it's important to note that simply watching YouTube videos or reading books won't suffice. You need to actively start practicing problems on your own. Visit online coding platforms like GeeksforGeeks (GFG) and LeetCode and start solving questions. In my case, I found GFG practice and LeetCode to be sufficient. It's crucial to avoid having a mindset that you will only solve medium or hard-level problems. Start with basic problems first, as this will help build confidence in programming. Once you have a solid foundation, you can gradually increase the difficulty level.
How to get the most out of a course
Many of us struggle with retaining information from courses, and I have faced the same issue. Initially, I didn't know how to take effective notes or get the most out of the learning process. I made several mistakes along the way, but now I have developed a better approach.
Here's my approach: First, decide which course you want to follow and select the specific video you will be watching. Keep a notebook handy to take notes alongside. However, it's important to avoid the mistake of trying to write down every single detail. Instead, focus on jotting down the important concepts and things you need to remember. When it comes to coding, don't write down the entire code; instead, focus on understanding and noting down the logic behind the problem. Pay attention to the approach the instructor is following and make notes accordingly.
After that, try coding the problem on your own. If you get stuck, refer back to the video and try again. Rather than writing down the entire code, you can make use of comments within your code to explain the different parts and steps. This method was recommended by a YouTube channel named Dorian Develops, and it has been incredibly helpful for me.
Additionally, you can enhance your learning experience by using some helpful Chrome extensions for LeetCode. Some of the extensions that I use are:
LeetHub: This extension automatically integrates and pushes your LeetCode submissions to GitHub.
GfG to LeetCode: It allows you to solve the same question on both GeeksforGeeks and LeetCode platforms, helping you gain a deeper understanding.
LeetCode Timer: This extension helps you track your time while solving a question, allowing you to analyze and improve your efficiency.
Mistakes I made
During my journey, I made some mistakes while learning DSA that I want to highlight to prevent you from making the same errors. Here are the mistakes I made:
Following too many things at once: I tried to learn everything simultaneously, which resulted in a lack of focus and understanding. It was a waste of time and effort.
Comparing myself with others: Constantly comparing myself to others only led to feelings of inadequacy and hindered my progress. Instead, I realized the importance of focusing on my own growth and measuring my progress from where I started.
Competing instead of collaborating: I had a tendency to always want to be better than others, whether it was my classmates or friends. However, I learned that true growth comes from collaboration and helping each other. By working together, we can achieve more than by competing against one another.
Lack of consistency: I would often get motivated, solve some problems, and then fall into a period of inactivity. Consistency is key in learning DSA. It's important to stay in motion and practice regularly, even if it's just solving one easy question each day. Keeping the momentum going is crucial.
By avoiding these mistakes and maintaining a consistent practice routine, you can be better prepared for opportunities that may come your way. Remember, practicing every day and staying committed to your growth will yield significant results.
How I Got an Internship
Although my main objective for writing this blog was to help you understand how to practice DSA and its importance, I will share my personal story as well, as mentioned in the heading. Perhaps you can find some motivation in it.
It all began last year when my second semester started in April 2021 after the COVID-19 lockdown. While my peers were engaged in various activities, I felt a sense of being left out, which prompted me to start learning DSA. However, I wasn't able to fully focus during the semester due to the limited time available for learning. Between attending college, going to the gym, participating in multiple club activities, and squeezing in DSA practice whenever possible, my attention was divided. By the end of the semester, I managed to complete a Java DSA beginners course.
Fortunately, I had a two-month holiday after the semester ended. During this time, I dedicated myself to working hard. I borrowed a Java book from the library and immersed myself in learning its concepts. I made the most of my holiday, and by the end of it, I had acquired a solid understanding of many Java concepts and had started watching Kunal's course.
When my college reopened in October, during my third semester, I focused on practicing questions on various coding platforms, as mentioned earlier. It was during this time that Samsung visited our campus for placements. They conducted an online exam that included DSA questions. I solved the questions, progressed to the second round, and faced more DSA-related questions. Eventually, my name appeared on the final list of selected candidates.
While sharing my journey, I hope to convey that with determination, consistent practice, and utilizing available resources, you can make progress in your DSA skills and seize opportunities that come your way.
Remember, learning DSA is a journey, and it requires dedication and consistent effort. Embrace the challenges, seek help when needed, and never stop learning. By building a strong foundation in DSA, you can unlock exciting opportunities in the software industry and pave the way for a successful career. Start your DSA journey today and embark on a path of growth and achievement! Happy coding ❤️