Notes
- I apologize if the question is not formed well, I tried my best.
- "Only" means anything else is discarded.
- A stupid man’s report of what a clever man says can never be accurate, because he unconsciously translates what he hears into something he can understand. (You are the clever man here, so please try to be simple with me)
- Please Answer an atomic question; If your advice contains a lot of difference advice, please list them.
- Please make your answer practical (i.e., in terms of "Do" & "Don't")
Question
Briefly
What is the (Point of reference) or (Milestone) or (factor) that I only should use when I decide "I understand algorithms"?
Example for "Milestone" Indicator
If you watched a video on how to do derive x2; if you finished the video and failed to obtain the derivative, you will ask yourself intuitively "did I really understand the video?". (The end of the video) is the (Milestone) in case of Mathematics.
And this is my question, what is the milestone in case of Algorithms?
Precisely
- Am I required to only learn popular algorithms & their solution patterns?
- Or is it like Mathematics? (I should learn "how to derive an algorithm and its complexities" (even if I will not be able to derive the optimal solution) but at least, I can identify, understand & build an algorithm even if I never encountered it.
All Understanding-Factors that I know
- I can only solve the homework provided by the instructor.
- I can only implement the algorithm in any programming language? or implement & identify also the written algorithm and its complexity? ("write" or "read & write")
- Should I be able to identify an implemented code's algorithm even if I did not study it before? if yes, then how?
Question's Reasons & Explanation
Reasons
Algorithms courses (explicitly MIT 2011 & 2020, Stanford, San Diego, Princeton) teach only "The Algorithms only written in the book", thus, you cannot identify/understand anything beyond what they taught in the course.
Reasons Explanation
This is similar to learning the test instead of the subject, you only can answer questions, already taught to you, and get good grades without actually learning the subject or how to use it in the real world.
Resulting Problem
Unfortunately, I could not decide how to study Algorithms till now because:
- I do not know how to identify if I am actually learning or just deceiving myself, which will be used to choose the course that I will learn from.
- I am certain that you can get the delusion of knowing algorithms very well just because "you got a good grade" or "applied it once before".
Answers
These are the answers that I reached so far, but I cannot verify because I lack the experience:
- Learn by practice, specifically, problem solving.
Reason: because you do not need to learn everything at once, just learn what you need and let the calculation & invention for scientists and researchers. - Understanding-Factor is the ability to identifying the class of problems & their solutions when you encounter a problem. If you failed, search for new theorems that solve that problem. But you always need to know how to calculate the space & time complexity of the theorem. (I still do not know how to calculate the complexity of the algorithm).
Reasons: (same as the above reason) - Only study the test (provided algorithms).
Reasons: Because 90% of the Business problems require only already implemented & tested algorithms; Thus, your only role is to choose "what" & "when" to use an algorithm. The other 10% is left for researchers (via enhancement or even creation). Even if you are in the Algorithms development, you need tools that include a big number of Algorithms Design Techniques & A lot of Applications on it to be able to enhance & test it.
Issue: I found some questions/answers in the community that contradicts that "90% & 10%" which are: What do I need to know about algorithms?, How do I know if my algorithm is right (without coding)?, How to fool the "try some test cases" heuristic: Algorithms that appear correct, but are actually incorrect. - Learn Algorithms & Data Structures and also Design & analysis of Algorithms & Data Structures.
Reason: Because it is not enough to know some Algorithms patterns but to also understand & analyse it (the person gave examples that I will translate in case somebody cares). - Algorithms are not a simple thing that can be covered within a single course. It can be broken down into the following:
a. Algorithm Design (which explains the general algorithm concept).
b. Algorithm Proof.
c. Algorithm Analysis.
d. Algorithm Standard Application.
e. Algorithm Enhancement & Addition.
f. Practical Application of Algorithm.
Each & every point is a course/topic in itself, and there can't be a course that covers all topics at once; Not even the most popular books (CLRS).
Therefore, the 3 questions of understanding an algorithm is composed of three main aspects (design, analysis, application). So as a conclusion, you do not need a single course to cover algorithms but rather multiple courses until you get it.
So to rephrase your question, "Is algorithms branch a (principle & skills type science branch) or (pattern science branch whereby you only apply patterns)?" and the answer is: I think it is both, you apply patterns but also whenever you need to dig deep, you really need to have the principle & skills that enable you to find a pattern.
Another aspect is, how to study algorithms?
a. Solve it on paper in a mathematical form.
b. Draw flowcharts.
c. watch other people's answers (solution and analysis).