Finished Stanford Algorithms Course. Here is what to expect from this Masterpiece.
Tags: algorithms, moocs, ossu
Published: 2020-09-10 18:30:13

Yesterday I finished a challenging journey through one of the best MOOC in Computer Science, The Design And Analysis Of Algorithms by Professor Tim Roughgarden from Stanford University. 
In this post I will write a summary of the things I have learned  , an overview of the topics covered by the course , What is special about the course , tips to struggle less through the material and my next steps to solidify what I gained. 

##Course Topics

This version of the course is the same one is taught on-campus in Stanford , the content is not watered down at all. The course is delivered by Edx,in the form of two separate courses, and Coursera in the from of 4 separate courses encapsulated in a specialization called "Algorithms". 
Prof. Tim starts the course by a little bit shocking Integer Multiplication algorithm that hits you as a rock in your forehead to motivate you for the upcoming rigorous content.

The course covers almost all the basic techniques in the design and analysis of algorithms field and how to implement them "Blazingly Fast". the topics include :
- Asymptotic Analysis
- Divide and Conquer paradigms (contains a lot of applications)
- Randomized Algorithms
- Operations on Graphs (This part is so rich and challenging)
- Greedy Algorithms
- MST
- Dynamic Programming 
- Np-complete
- Data Structures ( Heaps , Union Find , Binary Trees , Hash tables, .. ,..).
- and more.

Of course this a huge simplification of the material , just to give you a quick overview of what you will learn. 
 
But it turns out, you can find those topic in any algorithms book , course or youtube tutorial. And this is not exactly what I see interesting about this course.

##What is Special about this Course?

"The thing that I hope you learn from this course is to develop the intuition about how to think algorithmically". The course instructor -or at least what I remembered from his statement-.
   
The most interesting thing I find is that the way professor Tim introducing you to the main problem by trying out each path that may help solving this problem so you can fully understand the critical need of an algorithm to solve this problem efficiently.
Then he takes you in a tour to the algorithm inventor's brain so you can comprehend how the inventor reached that solution and how he introduced it to us on a silver platter.

This way of teaching algorithms is rarely found in an online course even in any on-campus course except Stanford-like Universities (e.g. Harvard and MIT). This way of presenting algorithms helps you developing your analytical and critical thinking skills , it provides you with the tools you need to be an algorithm analyst and designer not just repeating codes that was written to you before.

##Tips (from my personal experience)

- Each word Prof.Tim is saying introduces you to a new concept after it.
- The instructor speaks fast , so listen carefully especially if English is not your mother tongue.
- Implement each algorithm you take after watching the relevant videos, it helps to consolidate the concept and to solve the programming assignments.
- The course doesn't provide you with an actual code , only pseudocodes , step by step. So you can search for the code in your preferred language to diffuse any confusions, if any.
- The mathematical analyses and the proofs of correctness are not essential to commit in your long term memory, but they are really helpful to understand the mathematical logic behind each algorithm to feed your subconscious intuition, So watch them attentively as possible as you can.
- Don't lose hope if you struggled, the material is not easy and don't expect your mind to grasp it in one shot.
- The programming assignments aren't that complicated , they are just a clever way to implement the algorithm correctly. If you coded the algorithm then it won't be difficult in most cases to pass the programming assignments. 
- However , the multiple choice quizzes are really tricky. The quizzes test your understanding of the little details of the algorithm . Try to get them all right and search for the questions you failed at or you didn't fully understand them , you will find a lot people explaining them in a very detailed way.

##What next?
Regarding the algorithms field, I am planning to embark on a training program of problem solving and competitive programming. I think this one of the best ways to practice what you learn from a course like this. The sheet I will work on is this one : https://docs.google.com/spreadsheets/d/1iJZWP2nS_OB3kCTjq8L6TrJJ4o-5lhxDOyTaocSYc-k/edit#gid=1160016643 .
It is a training sheet from a researcher at Huawei from his experience in Programming Competitions and multinational companies interviews , the sheet is periodically maintained and it is organized in a way that covers all the essential algorithms from CodeForces problems and other online judges. Unfortunately, all of the explanation videos are in Arabic. However, if you don't know Arabic, you still can follow the problems sequence.  

Finally, this is my personal experience with this course. I hope that was helpful :) 

credential link : https://coursera.org/share/ad3acc6a3828acf86c963a6d1080c818