laitimes

How does Android development build a complete body of knowledge?

author:Think like a program
Author: Vt

First of all, let's talk about a thing worth thinking about: when the college entrance examination, everyone is the same textbook, the same classroom, the same teacher guidance, time and energy are basically the same, but in the end, others are taking the Tsinghua Peking University or one, and your strength can only take three, why? Of course, the main influence here is IQ, but what about other factors? Can the problem solved by IQ be made up in other ways the day after tomorrow?

Everyone has read a lot of methodological articles, and when they read it, they feel very useful, but after a week or two, it is basically the same. A large part of the reason is that those methods require mental power, or the methodology is relatively empty and lacks the steps to land. The methods described below can be learned without the need for IQ, and are very specific.

First, the key problem points

Why can't you accumulate knowledge?

Some knowledge has been forgotten after reading, forgotten to look at again, the actual encounter of problems or can not be linked to this knowledge, this is actually the accumulation of knowledge out of the problem, without in-depth understanding of nature can not be flexibly used, it is impossible to talk about solving the problem. This is one reason why everyone looks at the same college entrance examination textbook but the results of the college entrance examination are different. The problem lies in understanding, everyone's comprehension ability is different (IQ), and the vast majority of people's understanding of knowledge must be consolidated by continuous practice (doing problems).

The same practice effect is not the same?

The same work encountered 10 problems a year (or 10 sets of mock exam papers), but the results were different, because the method was not good enough in the process of practice. Or you don't review why you did it right and why you did it wrong.

If you encounter a problem, the colleagues around me solve it, and I can't solve it. Then I will think about how he solved this problem, how he saw the logic and thinking of this problem, what knowledge guided him to reason so logically, which knowledge I also know but I did not think of using reasoning in this way (indicating that my lack of understanding of this knowledge led to lack of flexible use); which of these knowledge is not known (lack of knowledge, there is nothing to say about what to go to Google to learn – there are scene cases and purpose blessings, learning to understand faster).

After you basically understand this problem according to the knowledge and logic of your colleagues, you need to think about whether there is anything wrong in his logical deduction of the problem, whether there is a long-winded place, and whether there is a more direct way (better use of knowledge).

I believe that if each problem is practiced in this way, we should no longer complain about flexible use, one example and three examples, and at the same time, the knowledge accumulated in this scenario will not be so easy to forget.

This is the way to learn from the cattle people around him and quickly surpass him. That's why you did 10 sets of mock questions before the college entrance examination, which is not as effective as other people's set.

Knowledge + logic basically equals your ability, knowledge lets you know that thing, logic lets you connect things to problems.

The problems here can be understood as schemes, architectures, designs, etc.

Second, systematic knowledge

Knowledge can be connected and grows on its own like a big tree, but when you don't understand it thoroughly, nature can't make a connection, and you can't grow on your own.

Truly mastering the knowledge points will slowly grow and connect to form a large network.

But what we are most likely to fall into is the depth and systematization of mastery (too much fragmented time at work, lack of time in school), so a knowledge point is encountered every time it takes half an hour to learn and feel mastered, but after 3 months, it is not impressed.

I always feel that I am ignorant and understanding, or that a field is always not the point of learning, and the fundamental reason is that: the macro overall map is not understood enough (lack of system, every time is a blind person touching the elephant); the key knowledge points are not deep enough, the understanding is not thorough, these key points are the skeleton, fulcrum, and grip in this field. Without the gripper, it is naturally impossible to grow, and it is easy to go astray without the macro map.

We sometimes find ourselves learning very quickly in a certain field, but changing fields is always the point, the problem is above, even if it takes more time is in vain. This is why the two-hour textbook is better than the effect of reading two days, and I feel that others are so smart, is the IQ higher than mine.

So when you're new to a field, you have to go to his big picture and gripper.

Good colleagues can always easily hand over this big picture to you, and then give you a few grippers by the way, you are basically getting started, this is the charm of training, this situation is definitely much more efficient than self-study. But most of the current training can't do this.

Where does good logic come from?

Practice, review.

Three, I have a friend...

There is a former colleague who came over 5Q, responsible for technology (all the problems that cannot be solved are looking for him), this classmate debuted from ChinaRen, followed Wang Xing to start a business 5Q, 5Q in the school by chicken legs to lay a large market, and finally was acquired by Chen Yizhou's school (it is said that after being acquired, a lot of 5Q technology has gone, and finally Wang Xing stayed on the intranet to get all the money on the contract).

This classmate makes me the most admired ability to solve problems, a lot of problems in fact, he is not necessarily good at it, but he is capable of solving an unfamiliar problem through Help, Google constantly verifying and trying, which is my most envious ability, and has been trying to this aspect in the later career.

The application is slow to connect to the database when it first starts, but it is not a slow query.

  1. The student's solution is to analyze the network packet through tcpdump, look at the timestamp of the network packet and the content of the network packet, and then find out where it is stuck.
  2. If it is a professional DBA, you may see what the specific connection is doing through the show processlist, such as seeing that these connection states are automatic, and then through Google or the understanding of this state, MySQL needs to reverse the IP and domain name when creating the connection, and it is time-consuming to jump through the configuration parameter skip-name-resolve.
  3. If you are an old driver of MySQL, you know that the connection is slow and has the most to do with skip-name-resolve.

In my eyes, all three ways solve the problem, the last one is the fastest but pure accumulation and experience, and it may not work to change the problem; the first way is the most awesome and general, and only requires the least knowledge to solve the problem.

I started learning from Linux commands like sudo and ls with him. Of course, I will not easily disturb him to ask him, every time I encounter a problem I try to let him operate on my computer, after solving it, I will review it myself, call up all his operation records through the history, see what he searched for on google on my computer, and then learn and analyze his every action one by one, to think about why he searched for this keyword, after reviewing and not understanding, I will discuss with him face to face why he is doing this, and what is the knowledge and logic that guides him to do so.

Fourth, better grasp the knowledge

When you look at things, it is easy to take notes, or it is easy to forget when you look at it, we need to review repeatedly to deepen our impression and understanding, the basis of review is the note (it is impossible to read it again in its entirety), and the notes sort out the main points inside and your blind spots.

After a period of time, the relevant notes are organized into a systematic blog post, which both deepens understanding and systematizes the relevant knowledge. In the future, when you see the cases and knowledge points related to this blog, you will continue to update the blog (improve your knowledge points).

Fifth, scene-based learning

The deep understanding of knowledge mentioned earlier is a bit empty, how can we achieve deep understanding?

Take an example of learning TCP's three-way handshake

Engineers with a little more experience feel that TCP has read many times and many articles in the three handshakes, but the articles are well written and seem to be understood at the time, but they always forget or understand after a few months, and after a while they are vaguely asked by people, or why the two cannot be answered, and they all feel that their answers are guessing or uncertain.

Why is that? And learning other knowledge is much smoother, I think the main thing here is that we lack of somatosensory TCP, such as few engineers have seen the code of the TCP handshake, and can not imagine how the real TCP handshake works in the computer (calling can give you some similar body feeling, but the details are not covered enough).

If at this time you use wireshark to grab the bag while learning to see what the three handshakes are doing, it is much more than the abstract description, you can see the specific handshake back and forth, and see what content is brought in one after another, what these contents are used for, why to bring, at this time you will feel much more understanding when you look at the theories explained by others, and it will be difficult to forget later.

But here many people do not have strong execution ability, want to grab the package, but feel that to download and install Wireshark, to learn Wireshark gave up. Of course, it is most comfortable to just look at it and not to do it, but this most comfortable gives you the illusion of learning, and there is no result.

Isn't this very similar to a puzzle that requires you to do a lot of things, such as downloading the source code (can't climb the wall, give up); such as compiling (and having to learn those compilation parameters, give up); such as building the environment (too trivial, give up). You see that in the middle of these nine nine eighty-one difficulties you give up a difficulty and can not take the true scriptures. That's why the same learning, the same problems, he can learn, he can solve, you can't.

Let's look at another example of a problem solving

The problem of double 11 optimization of the membership system is an outsider to me, and I don't understand the deployment architecture and business logic here. But in the key place of the problem (the member thinks that he is okay – the stress test is normal; the Taobao API thinks that he is no problem, and the AliMonitor monitoring shows normal), the result is that the member's classmates say that we have no problem, and the Taobao API must have a problem, and then they don't think about the links that may be wrong on their side. The idea has been thrown out of the package, then even if you go to review the process and link, it will not be so careful, and naturally you will not find the problem.

But my experience tells me to have evidence to throw the bag, or to throw the bag gracefully with the evidence, which forces me to find more detailed evidence (the evidence must be strong, and it cannot be photographed back). If I say so, this problem is here in the Taobao API, you see the reason is... I did these experiments and saw these things. Then the Taobao API side wants to prove that my reason is wrong and will be more active in looking for some data.

In fact, I found the problem of members in the process of doing these experiments to find evidence, which is a result of the combination of attitude, execution, knowledge, and logical ability. One of my least favorite things is that my program is fine, because my logic is like this, and it can't be wrong.

Of course, you don't write the wrong logic that you know, and the reason why the program has errors is in your logic, something unexpected. There are many times when a bunch of people are pulling around in the conference call, I generally mute the phone, go directly to the human flesh one by one through the logic of the other party, generally speaking, the conference call has not ended before I give out the other party's logic outside of the thing.

Sixth, systematic learning methods

Systematic learning method is to want to master the framework, then engage in several framework monographs and the corresponding source code all the way down, the general course design is still relatively easy to master, most of the time is this learning method, but the problem with the learning method is that after learning at the time it seems to understand, but it is easy to forget, one by one systematic forget, and lack of application ability (understanding is not deep). This is because the average person's understanding of knowledge is not so easy to truly understand (master or apply).

The nail-style learning method is to punch several piles in a large piece of knowledge, repeatedly practice the pile to continuously consolidate and stabilize, so that at this knowledge point, the popular language and Xiao Bai can be explained clearly, and then the middle of these piles is like a spark to grasp the whole piece of knowledge. The disadvantage of this learning method is that it is difficult to find this point of knowledge point, and then the knowledge is too scattered without good integration.

The nail learning method looks slow, but because it is more thorough and firmly mastered, it is actually faster in the end.

We often say that a person is very smart, that is, the systematic reading of the book is understood, is really understood, but can also be used flexibly, but most ordinary people are not like this, after reading the book seems to understand, the actual few weeks after basically forget, the real practice needs to be used when it is still not good.

7. Empty slogans

Many teachers and articles will teach everyone: learn from each other, use them flexibly, learn and use them, and practice more. But only these slogans can not land, the basic steps of landing is mentioned earlier, but it is always ignored.

Some people can master a skill just by looking at theory, and they can also give an example, which is the efficiency of knowledge, and there are very few such people.

Most ordinary people are looking at some knowledge and then combining practice to strengthen the theory, and it is necessary to go through repetition to better grasp a knowledge, which is engineering efficiency, pay attention to skills and tools to achieve the goal.

It is certainly the most intellectually efficient, but there are very few people with this skill (born with high IQ). Since childhood, the kind of bully type that we don't learn much around is basically this kind, and this kind of bully can also grasp a new knowledge very quickly, which is very angry. Most of the rest can only spell time + method + summary, etc. to master some knowledge.

It is a great pity that I am an engineering efficiency type, and I can only envy those knowledge-efficient scholars. But this matter can not be independently viewed that some people are engineering efficiency in some directions, and some directions are knowledge efficiency type (there is a knowledge efficiency type that you master too much and it is easier to touch the bypass, which is considered a gray knowledge efficiency type).

Hard to tap their own ability in terms of knowledge efficiency, of course, there is no obvious boundary between the two, the accumulation of knowledge more logic training in the eyes of others your IQ is high.

Eight, two kinds of knowledge

One is general knowledge (not universal to everyone, but universal to any company in a professional field); the other is specific knowledge bound to business companies.

General knowledge without any doubts to be very hungry to pounce on them and master them (benefit for life, is there any doubt about this?). )。 For specific knowledge, it depends on the depth of your business needs to master, and it is certainly necessary to master some, and the specific knowledge mastery is generally better in the company.

A specific knowledge system has some core knowledge points (gripper, Essential Knowledge), that is, mastering knowledge points that can quickly help you expand and extend to other related knowledge.

There are also some knowledge and tools that can help you penetrate, visualize, and understand other knowledge points once mastered, such as framework in the Android knowledge system; mathematics in science and engineering; learning methods and behaviors in the knowledge system. We need to discover more of this knowledge, how? )。

At last

Here also to share a complete set of knowledge system, including the following 12 major plate knowledge points, and is still using time to continuously update and improve, I believe you can provide some ideas and guidance.

Because the specific content is very large, this side takes some screenshots to show.

If you need the full version, you can help me like and comment on it, and directly send me a private message [Notes] to collect it for free

01. Android must have the underlying technology: Java serialization, annotation, generics and reflection, compile-time technology, virtual machine, dynamic proxy, Java IO, concurrency, advanced data structures and algorithms, etc

How does Android development build a complete body of knowledge?
How does Android development build a complete body of knowledge?

02.Framework: Binder, Handler, Zygote, Init, System Startup Process, AMS, PMS, WMS, etc

How does Android development build a complete body of knowledge?
How does Android development build a complete body of knowledge?

03. Android common components: Activty, Fragment, Service and other content

How does Android development build a complete body of knowledge?
How does Android development build a complete body of knowledge?

04. Advanced UI: UI drawing principles, property animations, plug-in skinning, event distribution mechanism principles, RecycleView, high-order Bezier curves and other content

How does Android development build a complete body of knowledge?
How does Android development build a complete body of knowledge?

05.Jetpack: LiveData, DataBinding, Lifecycle, ViewModel, Room, Navigation, WorkManager kernel, Pagging principles, etc

How does Android development build a complete body of knowledge?
How does Android development build a complete body of knowledge?

06. Performance optimization: installation package optimization, UI rendering optimization, memory optimization, startup optimization, stutter optimization, crash optimization, network optimization, power consumption optimization, storage optimization, multi-thread concurrency optimization and other content

How does Android development build a complete body of knowledge?
How does Android development build a complete body of knowledge?

If you need to, you can help me like and comment on it, and directly send me a private message [notes] to collect it for free

07. Audio and video: C/C++, H.265/H.265, MediaCodec, audio and video editing, audio and video live broadcast, OpenGL and audio and video decoding, OpenGL special effects, FFmpeg universal player, Webrtc audio and video calls and other content

How does Android development build a complete body of knowledge?
How does Android development build a complete body of knowledge?

08. Principles of open source frameworks: Okhttp, Retrofit, RxJava, Glide, Hilt, Dagger2, EventBus, plugins, components, etc

How does Android development build a complete body of knowledge?
How does Android development build a complete body of knowledge?

09.Gradle: Groovy syntax, Gradle Android plugin configuration, Gradle practice, etc

How does Android development build a complete body of knowledge?
How does Android development build a complete body of knowledge?

10.kotlin: Kotlin syntax, extended use, advanced use, practice, etc

How does Android development build a complete body of knowledge?
How does Android development build a complete body of knowledge?

11. Flutter: Dart syntax, UI, advanced use, optimization, practice, etc

How does Android development build a complete body of knowledge?
How does Android development build a complete body of knowledge?

12. Hongmeng: Ability components, distributed tasks, event bus, Hongmeng threads, UI custom controls and other content

How does Android development build a complete body of knowledge?
How does Android development build a complete body of knowledge?

Android road is long, encourage!