# Notes

1. I apologize if the question is not formed well, I tried my best.
2. "Only" means anything else is discarded.
3. 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)

# 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

1. Am I required to only learn popular algorithms & their solution patterns?
2. 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

1. I can only solve the homework provided by the instructor.
2. I can only implement the algorithm in any programming language? or implement & identify also the written algorithm and its complexity? ("write" or "read & write")
3. 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:

1. 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.
2. 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".

These are the answers that I reached so far, but I cannot verify because I lack the experience:

1. 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.
2. 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)
3. 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.
4. 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).
5. 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.
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).
• There is no central authority that is requiring you to do anything nor is there a definition of "someone understanding algorithms". Instead, why not just decide yourself? Learn and apply whatever you find interesting. If you want to measure your knowledge by doing exercises or taking tests, that's also fine. Finally, let me also suggest reading about the imposter syndrome.
– Juho
Mar 2 at 20:51
• @Juho I know about impostor syndrome, to be fair, i still did not get deep into algo; I want to work as a SE and I should fit for it (hence, there is some authority that is requiring me to have some standard knowledge). Finally, I cannot decide by myself because to answer my own question i need to have certain knowledge, that if i already had it, I wouldn't have asked the question :) Mar 2 at 21:07
• So suppose you decide that you "know algorithms". Does that mean you can't make mistakes, are not allowed to forget details or must declare you can't study more? I wouldn't worry so much. In my experience, software engineers don't care or need algorithmic skills much, things like software design, domain understanding etc are more important.
– Juho
Mar 3 at 5:51
• I have been doing practical algorithmics for about forty years now. I only scratched the surface. Mar 3 at 8:51
• And sorry to say, gossip less and practice more. Mar 3 at 8:52