In the process of learning programming, I have encountered many detours. Some detours are short, like taking a walk, and you can come out immediately. It is a good thing to gain some experience. Some detours are like a series of difficult turns, even experienced programmers can easily crash. But there are also some detours that are even more terrifying. The first half is straight, but the second half suddenly takes a big turn. You may think you are walking on the right path, but in fact, you are going in the opposite direction without realizing it.
One "invisible detour" that I know of is learning programming with a student's mindset.
- Taking Notes vs Writing Technical Tutorials
In our years of studying, the process of acquiring knowledge usually involves the following steps: studying the tutorial examples given in textbooks, practicing the exercises after class, and repeating this process until passing the exams.
Many people with a student mindset tend to apply this learning method to programming: learning the basic syntax, practicing a few small tutorial examples, and repeating this process until they think they have mastered programming.
In the process of learning programming, the habit of taking notes while reading books has turned into copying code, including variable names, whether to break lines in if statements, and completely copying function names from the examples in the book.
It is undeniable that copying code in the early stages is a good way to get started. Successfully running the code each time greatly enhances confidence in learning programming. However, simply copying code is obviously not a rational behavior and needs to be adjusted to writing technical tutorials.
When you write technical tutorials yourself, you will inevitably review the entire process and even personally perform the operations again. It is easy to discover the omissions in the previous learning process. In order to understand them, you will search for relevant materials and supplement your knowledge.
Furthermore, since the technical tutorials you write are published online, in order to make them understandable and recognized by more people, you will definitely try to explain them as clearly as possible. In the process of explaining clearly, you will have a more comprehensive understanding of the knowledge you have learned.
- Fear of the Unknown vs Acceptance of the Unknown
During our student days, we were always eager to learn and tried our best to understand all the difficult problems. Students are afraid of the unknown, afraid of all uncertain problems. They don't know which scope the problem belongs to, and once they can't find a direction for the problem, they will always be in a state of anxiety.
Due to the limited scope of the content we learn, we can always find clear answers through books, classmates, teachers, and the internet, even if we can't understand them, we know clearly which specific scope the knowledge point belongs to, and it's just that we can't solve the problem ourselves.
But programming is different. Many programming problems have no solutions, and no one knows how to solve them.
In order to learn programming well, we must tolerate a certain degree of unknowns.
The unknown will always exist. This is an objective law of reality that cannot be changed by human will. It is futile to struggle against objective reality.
Furthermore, some unknown things are unsolvable. Investing time and energy into unsolvable things is a waste. Some unknown things are due to insufficient knowledge reserves at the moment, and we need to endure the unknown for a while, grit our teeth and persist in learning the content behind it in order to find the answers.
- Following a Set Plan vs Constantly Reflecting
The content in textbooks progresses step by step. If you haven't mastered the previous content, you won't understand the later content at all.
Due to the existence of unknowns, there are always some problems that will hinder us in the process of learning programming. What we need to do is to record them first, then set them aside, continue to move forward, continue to learn new knowledge, practice new skills, and explore new fields, constantly accumulate and grow. In the future, occasionally go back and review them. Maybe when you learn a new knowledge point, practice a new skill, or explore a new field, you will suddenly have a clear understanding: Oh, so that's how it is.