# Learning Data Structures And Algorithms

Data Structures and Algorithms are like backbone of a well designed and efficient code. For a software developer, Data Structures and Algorithms are the most important assets for programming, but Algorithms are not only limited to software engineering but in any field, Algorithms are a great way to define instructions to achieve some specific task. As a software development student, I've always tried to learn Data Structures and Algorithms, and I know basics and some intermediate level stuff, but I've always wanted to learn more about it and I tried so many times but I lacked consistency. But in this quarantine period, I had all the time and decided to start learning Data Structures And Algorithms.

## What is Data Structures and Algorithms?

**Data Structure** is a way to store and organize the data in order to facilitate access and modification to the data. There many different data structures such as Stacks , Linked List, Queues, Trees, Graphs, Hash Tables, etc.
And there are some programming language specific data structures,too. For example, Python provides Dictionaries, Tuples, etc.

**Algorithms** have many different definitions all around the world. In general terms, am Algorithm is a collection of explicit, precise and unambiguous instructions, implemented in defined sequence to accomplish a certain task. And thus, Algorithms are not limited to software development but it has many other uses, too. There are so many problems that can be solved using specific algorithms such as simple Sorting, Searching and also some complex problems such as Identifying all the genes in a human DNA, Predictions and Recommendation Systems.

## Motivation To Learn

Well as we all know, Data Structures and Algorithms are very important to crack coding interviews but that isn't the only thing where learning Data Structures and Algorithms are useful. Data Structures and Algorithms Knowledge give us the ability to improve our solution to the problem and the ability to write much better and efficient code.

But most importantly, it helps to build problem solving mindset. And programming is almost all about problem solving. We can adapt any programming language syntax but the problem solving skill can't be adapted overnight. Thus, learning Data Structures and Algorithms can be a major learning curve for any computer science student.

## What I Have To Learn?

- Algorithm Design
- Algorithm Analysis
- Algorithm Techniques
- How to improve the time and space complexity
- Advanced Data Structures (Trees, Graphs,etc.)

## My Resources & Plan To Learn Data Structures and Algorithms

There are so many books, courses, blogs and videos to learn Data Structures and Algorithms. And every DSA learner has this question that "Which course/book is the best to learn DSA?" And I am no exception. I had the same question as well, but over the past 3 years, I've learned many programming languages and frameworks using online courses and books. And what I've realized is that You don't have to find the best resources. Just take a book or a course and start learning.

While learning anything, I start with an online course and then refer to some book. So I started a Data Structures and Algorithms Specialization by University Of California, San Diego on coursera. It consists total of 6 courses from Basic Data Structures and Algorithms to Advance Algorithms and Complexity. And in the last course they have a project "Genome Assembly Programming Challenge" . They also have a book to refer during the course which can be of great use if you prefer text based content over videos. I'm almost halfway through the first course of the specialization and What I like the most about this specialization is that all the courses have a lots of programming challenges as assignments to solve and so, you don't just learn theory but also, implement it in code.

Along with this course, I'm using Introduction To Algorithms book (aka CLRS). It's a great book for someone who knows basics of Data Structures and Algorithms but for a total beginner, it can be overwhelming. In my opinion, if you are starting from scratch you should refer to GeeksForGeeks for basic Data Structures and try to implement them in a programming language of your choice.

Also, Mathematics plays very important role in learning Data Structures and Algorithms. I have a pretty good background in Mathematics but still, I have to go through some topics of Algebra and Calculus to refresh the dead cells of my brain.π

### Other Resources :

#### Courses :

#### Books :

- Algortithms By Robert Sedgewick
- Data Structures and Algorithms Made Easy by Narasimha Karumanchi

#### Youtube Channels

## How to be consistent ?

Learning Data Structures and Algorithms can be overwhelming sometimes but consistency is very important. The skills will fade away if you stop learning. I'll tell you what worked for me to be consistent. If you are stuck at some problem for a long time and by long time I mean hours. Then stop trying to solve it at that time because your mind won't be able to think about the solution at that time and eventually you will get frustrated and disappointed. But don't skip the problem, if you are not able to solve it after many attempts and you feel like skipping it, go to google and search for the solution and analyze your mistake and your thinking process and then close that solution and implement it by yourself. But, don't make it a habit. Be patient. Data Structures and Algorithms is a vast ocean and you can't learn it all in a day. Keep learning, keep making mistakes, and keep solving them. π

## What's Next ?

Obviously, one cannot master Data Structures and Algorithms with just one book and a specialization course. It's a huge field and this is just a beginning. After this course, I'll be practicing my Data Structures And Algorithms skills on platforms like Leetcode and Hackerrank. Also, some of my friends have recommended me this book called Crack Coding Interview by Gayle Laakmann McDowell, so I'll solve some problems from that book, too.

Also, if you have any suggestions, then please message me on this email. jamesshah@bytetales.co Or message me on LinkedIn.