<a alt="Github All Releases">
<img src="https://img.shields.io/github/downloads/HumamAlhasan/Data-Structures-and-Algorithms-Roadmap/total.svg" /></a>
<a href="https://img.shields.io/github/forks/HumamAlhasan/Data-Structures-and-Algorithms-Roadmap/shields.svg?style=social&label=Fork" alt="GitHub forks">
<img src="https://img.shields.io/github/forks/HumamAlhasan/Data-Structures-and-Algorithms-Roadmap.svg?style=social&label=Fork" /></a>
<a href="https://img.shields.io/github/stars/HumamAlhasan/Data-Structures-and-Algorithms-Roadmap.svg?style=social&label=Stars" alt="GitHub forks">
<img src="https://img.shields.io/github/stars/HumamAlhasan/Data-Structures-and-Algorithms-Roadmap.svg?style=social&label=Stars" /></a>
ok let's face it everyone has an endless fear inside, when it comes to Data structures & Algorithms, these two core aspects which technically they're the first Submarine that it will dive with you into Software engineering world or computer science, and even if we want to fake it, but it just doesn't work without the ability to understand these aspects and use them, which literally means: everyone is able to write code, even complete systems architectures, and code runs anyway,
But the real difference between coders and Engineers is very abstracted, programming is just a small part of being an engineer the hardest of being an engineer, is the architectures itself, so whether it's an App, Platform, or even O-Systems, which is also meant coders do a very small part of the engineering working process, and also when it comes to the new tech learning processes engineers can move between tech stacks and programming languages so easy,
but hi wait a second why! what makes them super powerful people, the real answer which everyone is trying to run away from it is The core Fundamentals of Computer science, the power of knowing what happens behind the scenes, the very compact and controllable space and performance, for example, the right Decisions of choosing the best Data structure to organize and store some specific kind of data, knowing the strengths and weaknesses of each one,
e.g. the deep understanding of the differences between Arrays, Lists, Multimaps, Heap, Stack, Queue, Trees, Graphs and so on and so forth,
the ability of separating problems into multiple parts, and writing the best implementation to solve these problems with the respect of the performance and the space etc.. Actually the whole thing it's much way simpler than you think, but it's supernatural for our brains to have that kind of fear when they do not know anything about it, which we call it Xenophobia or the Fear of the Unknown, so i do know that there is no better time to start, the tech industry expanding horribly, and market needs not just coders but real Engineers
Note by engineers I don't mean the creatures who have CS degrees ๐ค cause most of the CS graduated people they do know these things just as a theoretical views
wish you all the best and I can't wait to see the transformation you'll go through
-
-
Refresh or Build your math knowledge.
-
Algorithms & Data structres theories
-
Choose the programming language you prefer
- C++
- courses
- Java
- courses
- Python
- courses
- Jvascript
- courses
- C++
-
introduction to Data structres
-
introuction
-
Arrays
-
Lists
- Lists Array Lists
- Abstract Data type
- Array Lists
- Vectors
- Singly Linked Lists Theory - Examples : C++ Python Javascript
- Doubly Linked Lists
- Lists Doubly Linked Lists
- Challenges
-
Stacks
-
Queues
-
Hashtables
-
Trees
- Biray search trees
- Biray search trees (insertion)
- Biray search trees (traversal)
- Biray search trees (insertion)
- Biray search trees (Get min max)
- Biray search trees (insertion)
-
Heaps
- Heaps (Insert)
- Heaps (Delete)
- Heaps (Peek)
-
Graphs
-
-
introduction to Algorithms
-
Sorting algoritms
- Bubble sort Theory - Examples : Java C++ Python Javascript
- Selection sort Theory - Examples : Java C++ Python Javascript
- Insertion sort Theory - Examples : Java C++ Python Javascript
- Shell sort Theory - Examples : Java C++ Python Javascript
- Merge sort Theory - Examples : Java C++ Python Javascript
- Quick sort Theory - Examples : Java C++ Python Javascript
- Counting sort Theory - Examples : Java C++ Python Javascript
- Redix sort Theory - Examples : Java C++ Python Javascript
- Insertion sort Theory - Examples : Java C++ Python Javascript
-
Reasearch algoritms
- introduction
- Linear Search Theory - Examples : Java C++ Python Javascript
- Binary Search Theory - Examples : Java C++ Python Javascript
-
-
-
Things speeds up you learning process and makes it more easy and fun
The main purpose of this roadmap is to make you understand almost everything about these two huge main aspects and how to use them in your new coming Apps, or just to crack the company's interview that you're about to apply to, or finally to simply break this fear wall ๐ช๐ฝ
lets for example, imagine this scenario, you've begun to learn a new tech for 3 years and you've already started to make money using it, and suddenly the support for this tech stopped,
and the community started to hate this tech, which means that you can't work with it anymore or even if you want to companies will never trust this tech, which means at the and of the time you will become unemployed and you will repeat the same circle of learning a new tech,
but why? well the simplest answer is that you don't know what's happening behind the scenes, you only write code, but when you deeply understand the way your software works and how to face machine, then you're safe and if you want to learn a new tech surely it will never take more than a month plus it's awesome what's happening in this scientific field don't you want to become a part of this awesome journey.
The beginning of billion miles trip is one step, Algorithms and data structures aren't hard, but like anything else you need to practice and read and practice, and when you get into the journey you will ever forget this hardness,
and you'll focus on details, and by the easy things doesn't stays for long, so every second you spend learning Data structures and Algorithms, remember it's for you as a Person knowledge or as Great target,
and at the end of this learning journey you'll feel a lot of power which is the power of being able to really talk and work with these aspects, and finally if you're afraid of them then you've just broke this fake wall.
alot of (developers) and (coders) says that you don't have to learn math to become a professional programmer and that's almost true in their case instead of learning some math skills repeat your self all the time,
if you want to learn how to code then you don't have to learn much math,
but when it comes to the engineering journeys then math is a very important subject, i'm not telling you that you have to be a math professor or something,
but undertanding the mathematical and the logical oprations that you're doing helps you alot to compress time and to learn quickly,
so if you've PHD Math degree, or you just want to rollback all what you've learned since the 1grade,
then don't worry I've got your back, math is very simple but as i told you like any other thing you need to practice then it will become so easy, and remember that you don't need those tons of math skills, but this is for the developers with zero math skills which they're a lot.
if you really want to learn something through this journey you should have a goal, and also you must know which level you are, just to make things easier,
don't escape any example and use then in order in order, cause it's all related
-
Refreshing your math knowledge or simply build it.
-
Selecting the programming language you want to use there will be examples in these four languages : Java, C++, Python, Javascript for now if you like to add yours fork it and join me spreading this knowledge.
-
understanding the thiories behind each Data structre and algorithm.
-
Using or sharing examples of each data structure and it's algorithm example.
there will be examples almost for all the popular Data strucres
if you don't have passion about the thing you're doing then it's very hard to gain any progress, even if it feels uncontrollable cause we all want it to happen fast,
but every time you feel that you're away from your goal then remember this base constant universal low, for every goal you want to achieve there are some taxes, so you decide if you want to pay them before or after you achieve your happiness euphoria,
it feels sometimes hard an so connected but your passion will make it so exciting all the time, so the result of this pain that you're investing in your self and the gain will be knowledge, dream job, great projects ideas etc.. so focus on your goals, breathe, and do it, now or never.
- after every example you see, try to write the summary of this example usage.
- don't pressure yourself, it's fine we were all the same.
- try to focus and stop everything bothers you.
- Building software is like playing instruments, and if you want to play some instrument you have to know some theories then you have to practice and practice i think it was so clear ๐
- Try to practice it in the morning.
- don't let your learning session goes for more than 2 hours max.