
I had always wondered how the top-down approach to learning worked. Unlike the learning method I used during my school years, where I learned from the basics and applied them to solve problems, top-down learning involved defining a problem from a state of ignorance, learning the higher-level concepts needed to solve it, and selectively choosing and quickly learning information about the essential lower-level concepts needed to understand those higher-level concepts. The problems I encountered while trying this myself were as follows.
🎯 Problems
[Problem 1] How can you find what you need when you know nothing?

So how can I find what I need when I know nothing? How can I selectively determine whether information is necessary or unnecessary when I am in a state of ignorance? For example, I had always wondered how one could realize the need to understand polymorphism when one had no concept of object-oriented programming, did not know what polymorphism was, and was in a situation where object-oriented programming had to be used.
[Problem 2] If applying a new concept is important after learning it, how do you learn when there is no code example?

Second, while learning object-oriented programming by following school classes, I realized that it was difficult to apply it directly by merely looking at good code in the methods presented by the school. To address this, schools assign students projects to train them to apply what they have learned. The problem was that additional learning beyond the assignments given by the school was necessary to solve exam questions and become good at development. This inevitably led to the problem that it is difficult to apply newly learned concepts and code when there is no example code or assignment for a given concept.
😲 The answer to this

Jeff, the mentor who introduced me to top-down learning and a master of the top-down learning method, answered these questions when I raised them.
His answer to the first question, How do you know what you need when you are in a state of ignorance, and how do you know when you need it?, was to define the problem and define questions about what I did not know. Then, through Googling, I would find keywords and clues related to the concepts needed to solve the problem and selectively choose the relevant information.
For example, to realize when polymorphism should be applied, the first step when working on a project is to define the problem involved in implementing a particular feature. The second step is to Google keywords related to the problem, browse and selectively choose among various resources, and find keywords that provide clues for solving the problem. If those keywords point to polymorphism, then learn polymorphism; to understand polymorphism, learn inheritance; to understand inheritance, learn classes; to understand classes, learn object-oriented programming… In this way, learn the necessary lower-level concepts.
His answer to the second question was "Just learn what you need." When learning a concept, you are learning it because you need it, so there is no choice but to apply it. And if a concept is not necessary to solve the problem at hand, you do not need to learn it right away. Schools artificially create situations where concepts are needed through ‘assignments,’ so it is difficult to self-learn by doing only what is required in school classes. When Jeff learned object-oriented programming, he was developing Android applications, which put him in the ideal situation for applying development concepts directly.
If you want to make the concepts learned in school classes your own and genuinely improve your development skills,
- Instead of studying one time just to solve exam questions well and raise your grades, voluntarily create and work through a project that can make use of the concepts introduced in your school classes, or
- Start the project you want to build from a blank slate, define what the problem is as in the answer to the first question -> find a solution (dig through keywords and clues via Googling) -> apply top-down learning and figure it out, then fill in any gaps in your knowledge by learning the fundamental concepts at school.
Based on my experience, the second approach seems better.
Conclusion

The method Jeff described was a flexible learning approach that mixed top-down-based bottom-up learning, because while searching for the concepts needed for top-down learning, you may eventually reach a situation where you can learn bottom-up as well.
For knowledge where foundations, such as mathematics, are important and where order matters, it seems necessary to build up knowledge to some extent through bottom-up learning, and then apply either top-down or bottom-up learning through projects depending on the situation.
top-down learning can save more time when you already know certain prerequisite knowledge. The fact that such things emerge does not mean that the time I spent struggling before was completely useless. There is no need to be intimidated; you just have to do it. Worrying and being afraid about how to know these things is a waste of your brain’s resources. By asking the people around you and struggling through things yourself, you gain know-how and develop expertise.