This article originated from personal public account: TechFlow, original is not easy, for attention


Today is the weekend, I rarely have leisure, spare some time to share with you some experience and feelings, I hope to bring some help to some students in confusion.

Why refuse to crash course

This is my first small talk article, I write is naturally what I want to write, I think I want to say you should get through the title. In fact, the first part of this sentence is not what I said, it comes from a famous English article: “Teach Yourself Programming in Ten Years”, that is, Teach Yourself Programming in Ten Years. The article was written by Peter Norvig, the technical director of Google. You can read this article in English, but it is not difficult to understand.

Before reading this article, I thought that only China was full of 21 days mastery of XXX books. Later I found out that the US is the same. There is even a book called How to Learn Java in 7 Days.


Before I graduated, I read and bought some of these books. It was ok at the time. It was a bit overblown, but there was something in it. After a period of time, I found that although many of these books had different names and authors, their contents were almost the same, or sometimes when I searched a certain keyword online, the Chinese contents were almost the same. I’ve tried some of them, but to be blunt, many of them are copy and paste, or key points that are clearly not original or thought through by the publisher. After I started writing TechFlow, I received several book offers from publishers, and combined with my previous experiences, I realized something.

In the field of computer science, domestic excellent original content is really too few. I think the practitioners of this press should feel very deeply.

Knowing this, I turned down these publishers’ requests for the simple reason that I didn’t think I was strong enough and didn’t want to add to this already chaotic market. As for my study, I began to give up the domestic materials and choose the books published by some top foreign publishing houses, such as China Machine Press and OREILLy. If I can’t understand English, I will look for The Chinese version. Compared with the Chinese version, I feel that the quality and speed of learning have improved a lot. After a while, it’s hard not to dislike many of the best-selling technical books on the market. It is not that all books are bad, but that there are too few good ones and the cost of selection is too high.

Besides the book, there are all sorts of so-called to be able to become the course on market, often share the person who can have a very good title, deserve to go up again half body is illuminated, the ray of great god is shining, as if to say you pay to be able to become stronger. Not only that, but also in the advertising of various training classes, as long as you come to my class, you can go to BAT, with a monthly salary of more than 20,000, from then on to the peak of life.


I also joked in moments before, in order to share the resources of an unscrupulous public account, I added a resource sharer’s wechat. I did not expect this person to share with me a pile of seemingly bluffing, but there is no actual material, to promote a training class. I looked at the poster, and it said that the speaker was a senior expert of Alibaba, who was guaranteed to find a job of more than 25K. Moreover, the training course was extremely popular, with more than hundreds of people signing up, and the deadline was coming soon.

Of course, people who have been in Ali would not believe that the way of learning here is not sophisticated. A casual check on the Internet shows that alibaba’s senior experts earn millions of yuan a year, while teaching one student only takes 3,000 yuan. So how many students does he need to earn his salary? Even if we do get a few hundred students, how can we guarantee the quality of teaching and still have one-to-one instruction?

In addition to illustrating how unreliable these contents are, these examples also want to illustrate that the market and people are too impetuous nowadays, always want to fast, shortcut. I now feel that productivity may be higher or lower, but there are no shortcuts. The response of China and other countries during the pandemic is a case in point.

Warren Buffett once said his approach to managing money is simple, but most people can’t do it because they can’t stand the idea of getting rich slowly over decades. People can’t seem to stand the idea of getting rich slowly, either. However, there is no quick great man in the world, even if the engineer is not so great, but a qualified and excellent engineer also needs a long time to cultivate. We should keep that in mind and stay away from things that make people restless or advocate restless.

If you really want to master programming or any other skill and excel in a field, be prepared to put in a few years of hard work. I personally think this is the basis of everything, because no matter what kind of learning method we adopt, what kind of learning materials we use, what kind of learning resources we have, continuous efforts for several years are essential.

How should we study

Choose the right content

So how do we learn about technology? Some people like to use videos, some people like to read books. But I personally prefer reading books for no other reason, because it’s efficient. Theoretically, humans can read much faster than they can speak, which, combined with language problems, would make reading a book much more efficient than watching a video.

Take a simple example, for example, the total length of a certain open class is 20 hours, and we can watch it for 45 minutes a day, so it takes about a month to finish it. This is just the time to watch the video, which does not include the practice, thinking and summary. If we consider the forgetting and incomprehension, the profit of these 20 hours is very limited. Of course, nothing is absolute, and there are some high-quality video content and lectures that can be made with a few simple sentences. However, in order to achieve this, on the one hand, the lecturers need to be excellent, and on the other hand, the students themselves need to have a certain amount of accumulation. Personally, I think it would be better to read a book first and then watch Daniel’s video to find the answer with questions.

I haven’t seen many video tutorials, and IT’s hard for me to recommend anything better than regular Coursera and MIT opencoursecourses. I can say more about books. In fact, as mentioned above, I prefer foreign classic textbooks and publishing houses. Foreign press like a series of a series of ground, such as machinery industry press published books are black cover of the big book. For another example, the covers of books published by OREILLY Press are often animals with distinctive features, which can be identified at a glance through the covers.

This is from OREILLY Publishing:


This is from the China Machine Press:


The series of books from these well-known publishers are often of high quality, and basically professional related books can be found. There are also some good publishing houses in China, so you can consider more when choosing books.

Learning routines

The title of this video is learning routines, not learning methods, because I think everyone should have their own methods, and I just share a few of the routines that I’ve summarized here.

Start with the basics and work your way up

The first formula I came up with was to start with the basics and work your way up.

Nowadays, knowledge in various fields is correlated and highly correlated, that is to say, the knowledge involved is often relatively scattered. But the purpose of our learning is always clear. Like I want to be an algorithm engineer, or I want to learn machine learning. So what happens if we go straight to our goal, like I went all out to learn machine learning?

I have done this before, and there are two biggest feelings. The first one is that I often encounter puzzling problems, and the second one is that I often have extremely difficult background knowledge that I do not know. For example, when I was learning SVM, I came across Lagrange duality and KTT conditions, and I directly covered them. And even though I spent a lot of time trying to figure out what it was, how it all worked out, I still felt like I didn’t understand it, because IT was something I remembered, not something I understood. The reason I can’t understand it is because I don’t have lower-level knowledge to back it up.

In the same way, if a student who has not learned data structure goes directly to learn decision tree, random forest will definitely be confused. Because we’re missing so much data structure knowledge, we can certainly fill in gaps as we go along, but if we’re missing a little bit, we can do that, but if we’re missing a lot, we can’t. It’s like the iceberg theory. Even if we nibble through the icebergs that float above the water, there’s a lot more that we can’t see below.

Therefore, the first routine is to be sure to step by step, first to lay a good foundation to learn the content after. For example, I read the book on linear algebra again when I was writing a special topic on linear algebra, and the writing of articles has deepened my impression. Now I can read the formulas and derivations on various papers with great ease. In fact, a lot of people are not unaware of this point, just because the map is fast in the mind, always want to quickly get it done, cost the least cost. But in fact, there is no minimum price, not afraid to pay the price is really the minimum price.

On the contrary, if you have a solid foundation, the later learning speed will be faster and faster, because your understanding ability will improve, the efficiency of learning will also improve. This is also the reason why Daniel is getting better and better, and the people behind him feel worse and worse as they try harder. Because Daniel’s knowledge system is so perfect, their ability and speed of understanding new knowledge are far better than others. This is also why students who do well in their first and second years of college tend to do well in their third year of college, not only because they have developed good habits, but also because they study more efficiently.

Be hands-on and start simple

The second approach is to be hands-on and start simple.

Compared to other knowledge, programming ability is a big concept, involving both a lot of knowledge and a lot of practical skills. So becoming a good programmer is not an easy thing. No matter what field of study, if you only focus on theory, you will inevitably get a shallow feeling on paper, and finally fall into the actual work or ability, which must be reflected in practical ability. Therefore, practical ability is very important, can not expect to say that the theory of learning results before starting to practice.

Always feel very difficult at the beginning, want to resist or escape. This is perfectly normal, and there are a few points to make about this, starting with simplicity. Some people want to build up a knowledge base before they start, but that’s not really helpful. Even if the theory is well learned, there are still many problems in practice. So we can learn fast practice fast, learn a little practice to prove a little. The smaller the goal, the easier it is, and the less resistance we have in our hearts.

So don’t think I’m too easy to write a Hello World or a for loop. There’s no shame in doing something simple, and it’s not a waste of time. This is also a good foundation for further progress.

Do things you need to tiptoe to reach

The third trick is to do the things you need to be on your toes to get the fastest improvement.

I have heard this routine many times. The first time I heard it was shared by the upperclass who directly guided me to start my ACM journey, and the second time I saw the self-statement of Brother Wheel in the official account. My senior may have a lower reputation than Brother Wheel, but he is also a world-class player who once fought for a silver medal in ACM (three members in a team) and won the championship in world-class offline programming competition. It is obviously not a coincidence that the two giants have the same views, so this truth is obviously very precious.

If learning is compared to getting cans one by one, it is always easy for us to stand on the ground and take the cans on the table, but the cans on the table are very small, so we do not get much profit. The tins on the cupboard are much bigger, but they are higher and harder to reach. If you want to pick up a tall tin, you can do it by jumping up. But it is very likely to be unstable, resulting in the can fell, or not much profit. Best of all, we reach for cans that we can’t reach, but can barely touch on tiptoe.

In other words, when we study, we should pick the points that are just beyond our ability, but not too difficult, so that we can break out of our comfort zone and improve our efficiency the most.

Dig deep and think

The last trick is to dig deep and think.

This is a formula I’ve developed myself and haven’t seen on anyone else’s blog yet. A lot of times we learn very general things, for example, if we learn logistic regression, we know logistic regression, loss function, gradient descent, and more, we just derive the formula and then we’re done. This is what is written in the book or Daniel’s blog, but have you ever wondered why the loss function of logistic regression cannot use mean square error but must use cross entropy?

If you think about this question and try to find the answer, you will see that it is because the mean square error applied to the sigmoid function has a very small gradient near 0 or 1 that the iteration is very slow. So why isn’t cross entropy slow? You’re going to continue to think about the principle of cross entropy, to derive the formula for cross entropy, to actually compute the values. Through contrast, intuitively feel the gap between the two.

Another example is that you read that naive Bayes is less prone to overfitting, so it’s widely used in scenarios where positive examples are sparse. Don’t look carefully at the past glance on the past, but if you think deeply, you will find many, many problems. Why aren’t Bayesian models easy to overfit? What kind of model is not easy to overfit, and what kind is easy to overfit? Why not use scenarios where positive examples are sparse and easy to overfit? What is the typical positive example sparse scenario?

You see, it’s a simple sentence, and there’s lots and lots of detail there. When you study, think about these details and you will find that your grasp of principles and your ability to learn will improve. More importantly, you will weave a complete knowledge architecture that will have a very positive impact on your own mindset.

Meditation and reason

Last but not least, meditation and reason.

In fact, I have shared this point in my answer on Zhihu. Personally, I think the quality that not only engineers but also everyone who works hard needs most is meditation or reason. Let me give an example to explain it in detail.

I think there should be no engineer who has not encountered bugs or difficult problems. In the past, I was always irritable when I met problems, but I found that the more irritable I was, the more I could not solve them. Often consult others, or calm down to see, in fact, is a very simple small problem, but their irritability magnified it. And then I got a tip from a guru who shared that we can always try to look at ourselves from the perspective of a third party, the perspective of God. I tried it a few times, and I really got a lot of feelings, especially when I had problems.

I find that I get annoyed for two reasons. One is because a problem seems counterintuitive, and the other is because it persists. The former seems to me to be instinctive, human beings hate anything counterintuitive, while the second has more to do with my personality. Essentially, we see a problem or bug as something that shouldn’t happen. But in fact, the nature of the world is that it doesn’t work perfectly. Black swans will always appear, and bugs in programs and unexpected things in systems are inevitable, which no matter how smart or intelligent people are, they can’t solve, just like systematic errors in physics.

No matter how you feel or feel, it’s there.

When we look at it from an objective point of view, it’s normal that we write a program and it breaks, but it’s unexpected that it works as expected. So the first thing we need to do is change our mindset and be ready to meet and solve problems, rather than expecting problems to not appear. This is the way to overcome the instinct, but also for the character, is meditation. In fact, I have always had a quick temper. I have been used to doing things in a hurry since I was a child. Whatever I do, I always want to get results in the first time, so the debugging is especially painful. If a bug goes on for a day without finding the cause, it’s like killing me. I can’t eat, I can’t sleep.

Until one day I suddenly realized, why am I in such a hurry to do things? Why should I find the bug as quickly as possible, and what does it change? Why do I always expect the seed I plant to reap immediately? It wasn’t an emergency. No one had a knife to my neck. It was just that I was in a hurry.

Huineng monk said not fluttering flags, not wind, benevolence heart.

Whether it’s studying or debugging, we get irritated because we subconsciously think these annoying things shouldn’t be happening in the first place. In our imagination, we should learn a skill in seven days, our code is bug-free, and we can easily get to the top of our lives. Obviously, these thoughts are illusions. We all know that the real world is tough, that starting from scratch can be hard, and that growth and progress inevitably come with pains. At the beginning of writing code is very difficult, always see clearly write out. Continuous efforts are painful, the road to success is difficult, all the difficulties and setbacks encountered are normal, progress is slow and not intuitive, all the things that make us fidgety and uneasy, are reality.

Our impatience and resistance may be the underlying logic of our unwillingness to accept the harsh reality, with some remaining unrealistic fantasies.

Since black swans and written bugs are inevitable, why should we worry? Problems on the analysis of the problem to solve the problem, learning time step by step, gathering sand can always tower, collection of axles is bound to make a coat, we and we look forward to their own, is the difference in a few years of effort, from the present, then will arrive, since the journey has been determined, why worry?

The best time to plant a tree was ten years ago, followed by now. Since today we plant the seed, there will be a green day. Besides, we’ll still be young in ten years, don’t you think?


Original is not easy, seek a attention