This article was first published on our official account “Big Data Apprentice”. If you are interested, please follow Dashujuxuetu.

As a programmer, I have been thinking and practicing active learning on and off since I started working, but the results have not been satisfactory until recently, when I feel my state has improved, occasionally. Therefore, in this article, I sorted out my feelings on the active learning of programmers and the methods of active learning that may be useful. Welcome to communicate with me, which is of great significance to me.

Solemnly declare: The contents of this article are not guaranteed to be correct.

Abstract:

  • World view
    • Why take the initiative to learn?
    • The difficulty of active learning
    • The theory of “paoding people chop down cows”
  • methodology
    • The official number writes the article
    • Solve other people’s problems

World view

Why take the initiative to learn?

I’m a pragmatist (though I didn’t know I had an “ism” until I wrote this), and I believe that people are greedy, selfish and hypocritical, and that “don’t try to get something for nothing” is what you really want.

Why take the initiative to learn? Choose a programmer this industry, technology is our meal guy, want to eat well, and always have a meal, you have to have enough technology, how can get enough technology? Learning can give you plenty of skills, but why active learning? How can I make sure I learn more than anyone else? B: No, but I want to improve, so I seek active learning.

When I say active learning, I mean learning something outside of work that I have been exposed to at work but don’t have time to learn deeply, or that I am interested in but don’t have the opportunity to learn at work, or anything that can improve my skills. For example, I echo a Hello World in the shell, but I am not familiar with sed and AWk, so I always want to systematically learn the usage of these two things, so that the next time I need to process strings in the shell, I do not need to pull my hair. For example, I know how to type Docker builds and Kubectl get Pods, but I don’t know how they work, so I’ve always wanted to know more about the hot container technology. I’m also interested in various open source projects, how they work, how they contribute code, and if I have a chance to get involved, and I’ve done a bit of that. Simply put, active learning is taking the time to improve or expand your technology stack.

The difficulty of active learning

Learning is difficult, active learning is even more difficult, coding active learning is especially difficult.

I think the difficulty of active learning for programmers comes from two aspects:

  1. Lack of time, energy and attention
  2. Inappropriate learning methods

The first point need not say more, work overtime, free time is less, finally have time to rest, then to chew books, documents, code, is really a great challenge. However, adequate time commitment is the necessary condition for getting anything done, which is different from person to person. I will not dwell on how to deal with this problem, but I mainly want to share the second point.

Second, the importance of learning methods is needless to say, but I feel that after leaving school, I learned many things not in the wrong way, but almost no way at all. I tried to learn a lot of things, such as MIT distributed system courses, such as Hadoop source code, what was the result? It took me a lot of time, but I learned almost nothing, felt stupid, and didn’t want to learn anymore. So how did I learn? I read papers and documents carefully, took notes, looked at code line by line, and used various tools, but I gave up in the end. Why?

I can’t think of a more appropriate expression for this.

When I say I want to learn, what I really mean is: ** I want to do as little as possible in as little time as possible to achieve the best possible results, and if I can’t, I’m done. ** This idea is rounded up to the above “get something for nothing”.

But there is no way, I am such a bad person, greedy lazy is a part of me. In order to adapt to my prey, let it don’t affect my work, after took some time to think and try for the programmer learning methods, I summarized a theory, called “cut my cow” (name) today, there is no any new things, should predecessors are summed up, but I am also my own language to convey, laugh.

“Paoding cuts cattle” theory

I think there are two keys to continuous deep active learning for programmers, one to do and one not to do:

  1. Give yourself feedback as soon as possible
  2. Don’t study methodically

These two points, I think the first point of feedback and learning method is consistent with the school, classroom questioning, homework, quizzes, unit test, midterm and final exam, the role of these things is to provide feedback and let you know their each learn how, what learn missed, what understanding does not reach the designated position, which is not skilled, Then according to the feedback to re-learn, correct, practice, so as to improve, otherwise there is no compass in the sea boating, has not seen the shore to choose to jump into the sea is completely understandable. To take an oddly inappropriate example, why did I like Python more than Java when I first learned to program? Is there a strict distinction between Python, in interactive mode, which immediately returns a result on my input, and Java, which has to be compiled to run it? No, but the downside is that I prefer things that have immediate feedback.

In school, we refer to a textbook and follow the teacher to learn page by page. If we think the page is difficult, we will learn one more lesson. Why do I think we can’t learn in this way now? Because the environment changed, although I want to improve their own technology, but did not intend to also do not have time to get all the details of a technology all understand, remember the “pragmatism” is mentioned above, I don’t need a “full”, I just “good enough”, and step-by-step learning problem is stretched too long, learning content is much and miscellaneous, it is difficult to distinguish between primary and secondary, Eventually, you get bogged down in the details, your passion dies, and you give up (reading HDFS code feels like it). Therefore, I think programmers should also pay attention to “lightweight” learning, do not rely on too much context, to learn, learn to use.

, of course, I did not deny the importance of basic knowledge, on the contrary, I think before further study it is necessary to grasp the basic knowledge, as a chef must first learn to cut vegetables and and can gradually learn more deep cooking, this article discusses the method of premise is already have all the necessary basic knowledge, basic knowledge is no shortcut.

Why is it called “paoding cuts cattle”? Because if there is an objective standard of technical level, the highest level can be compared to paoding ding niu, and the process of technical progress is the process of constantly getting familiar with the muscles and bones of cattle, of course, this familiar process can be first compared with the anatomical diagram of cattle for observation and study, and then start to practice killing cattle after mastering all. But the above methods are suggested not to spend too much time on the anatomy, directly with the sword, how can immediately feel the knife cut the meat, cut off the bone, and of course also can immediately feel the “ox blood spray head” what’s the meaning of (feedback), and, if think the anatomy of the whole cow hard, can to parts, to cut a month bracket, Cut a month of bovine bottom again, cut a part can be familiar with each site (light), a few months, the main parts of the cow was cut through, perhaps never cut, but it doesn’t matter, I have been able to put the anatomy of a cow is very good, although not reached the point of skilled and magical craftsmanship, but “good enough”.

When sorting out the article, I found that this theory called “blind men and elephant” can also be used.

methodology

It sounds like a lot of logic (thank you for the applause), but how does it work in practice? It’s still hard, and in order to make it a smooth and fun read, I’ve added a lot of things to the paragraphs above that sound sensible at first but can’t resist thinking about (although the general content is OK). It’s still hard, so I’m going to share two approaches THAT I’m trying, one for feedback and one for lightweight.

The official number writes the article

Share the knowledge and skills learned or problems encountered and solutions in the way of public account (blog) articles. This method can mainly provide me with feedback. When I write an article, others praise “well written! Would you like to write another article? I will, because I am so shallow (and I heard that many people read the article, wechat also gives you money).

Benefits: Feedback, by stimulating input through output, provides reverse drive (coined word), reducing the likelihood of falling by the wayside.

Question: On the one hand, this method takes a lot of time, because it requires both technical and readability, and I am a little frustrated. On the other hand, how to organize the content of the article and how to match the content of the article with the learning content is also a learning subject, and I am still exploring.

Solve other people’s problems

Note that I didn’t say “help other people solve their problems,” because I’m not doing it to help other people, I’m doing it for myself.

Process to solve the problem of others is a great opportunity to learn, because each out of a software or system failure points corresponding to its overall structure of a module (or the configuration, mechanism, etc.), the troubleshooting process is the process of learning about the module, meet and solve the fault, the more understanding of this software and systems and understand the more deep, However, I can only deal with so many problems on my own, so when someone else has a problem, it’s a great learning opportunity (even if you have the same problem in the future, and you have a solution prepared in advance, you will be amazed at yourself).

Benefits: The solution of problems or faults generally requires only partial, small amount of knowledge, each problem solved will have corresponding improvement, multiple small progress will add up to a great improvement.

Problems: This is a passive learning opportunity, quality problems can be encountered. Sometimes I wonder, can gather who agree with this point of view, everyone to leave their problems come out, others can under the condition of the interested, have the time and the problem of people together to solve this problem, solve, to the cause of the problem, the related principle of sorting out to share, this is a learning for everyone, Of course the problem solver will understand better. Gee, it sounds a little like StackOverflow, ignore it.

Do you have any good study methods? Welcome to exchange and discuss, make fun of suggestions, collect and share.

Study like the seedlings of spring, see its increase, there is a director
Drop out of school such as a whetstone, see its loss, loss
Pay attention to [big data apprentice], with technical dry goods to help you have a strong point