preface

To be a good Android developer, you need a complete set ofThe knowledge systemHere, let us grow together into what we think ~.

Is a skill truly valuable before learning it? Is a technology worth the effort to dig deep enough? Is very important, the key lies in the next few years or even more than ten years, it can really solve some pain points in the process of project research and development, so as to maximize the profits of the enterprise. Moreover, personal technical growth (hard power) is closely related to soft skills (soft power). It can be said that comprehensive and powerful soft power is necessary to maintain long-term technological efficiency and sustainable growth.

In terms of the whole structure of our cognitive thinking, soft skills are much lower than data structures and algorithms and computer foundations. The underlying its staying power, the greater vitality and bring us benefits, and, to some extent, soft skills than the underlying basis of algorithm, computer knowledge to the low number of learning difficulty, therefore, that is why I have been to insist on taking 20% of the time every week to systematically study the content of the soft power.

In the knowledge system of soft skills, the most important thing for us programmers is learning methods. How do we unleash our inner potential to absorb knowledge like a sponge? In this article we will take a closer look at how to become a top learner.

1. How to become a high level learner?

1. Constructivist learning mode

Curiosity for questions and desire for answers are the main driving forces for our learning and exploration.

Knowledge is not simply memorized, but constructed on our own initiative. We must make full use of the existing knowledge and actively explore under the guidance of active goals or core questions. Only in this way can we integrate the new knowledge with the old knowledge and construct a new knowledge system in our mind.

A good long-term question allows us to become “builders” because we are not only learning, we are also “constructing answers”, sifting, judging and integrating new and old knowledge into a body of knowledge as we try to answer the question.

A good long range problem enables us to become explorers, actively exploring the unknown and expanding the boundaries of the unknown unknown, rather than simply settling for ready-made, well-defined knowledge.

Therefore, asking an in-depth exploratory question is a very effective way to learn. Learning under the guidance of the problem will help us to continuously build connections between knowledge, and eventually form a mind map solution to the problem.

Questions are the starting point for deep learning. A good learner, must at the same time is also a good questioner, he will be generated from the process of reading, observing, thinking problems, solution surface, easy to that part of the first, leaving deep, exploratory problem for yourself, and it is in trouble and affliction problems incurred by open the remarkable mental journey.

Through decoding, go deep into the depth of things

We should not only be porters of information, but also go deep into things through decoding.

A high level learner is usually an adaptive expert, who can consciously build a virtuous circle of information decoding and knowledge expansion — constantly acquiring in-depth knowledge from some high-quality learning materials through learning, thinking and practice to expand and modify our existing knowledge system. Some of the most common and efficient decoding methods are as follows:

  • 1) Not only to find the conclusion, but also to find the process: it goes without saying that the process is more important than the conclusion.
  • 2), we should not only summarize, but also expand: at the same time, we should pay attention to retain the core knowledge and key details.
  • 3), not only need to compare similar, more want to compare different: different is knowledge, there is new, just have the new findings, to achieve truly self improvement, the first thing we should choose the most stressed in the difference between things, and not just because they are the most compelling, and because they are also the most illuminating.

And this is probably the way to decode.

Skills – is the end of learning

The only effective learning is that which can finally be applied to reality. The most effective way to learn is to learn by doing, which is the key step in learning for real use.

The two most effective universal learning styles are:

  • 1) Test practice constantly: that is, repeat practice with high frequency.
  • 2) Decentralized practice: Decentralized practice refers to distributed training with a long time interval in a long period, such as the time interval of 1 hour, 1 day, 1 week, 1 month and 3 months.

Acquiring skills also means that we have the ability to change the world, even if it starts small. There are three ways to practice effectively, as follows:

1) Writing exercises

Writing is a typical knowledge construction or reconstruction activity. If an article is to be understood and persuaded, it requires careful thinking, clear expression and detailed evidence, which require us to achieve a relatively high level of knowledge encoding and organization.

Another advantage of writing is that we can get feedback from the outside world. We can extract useful information according to readers’ comments, so as to improve or revise our knowledge system.

2) Play-style exercises

We can implement a virtual game-like exercise using a “thought experiment”, which is to construct a hypothetical situation that does not exist in the real world and then use what we have learned to imagine how things would change in that situation. In such exercises, we can often gain deeper insights than before.

3) Design exercises

Use existing knowledge to design a solution to a particular problem. This is an exercise that we often use in architecture and system design.

As can be seen, the exercise of knowledge forces us to take a deeper look at existing knowledge, to take a more nuanced look at real situations and problems, and to work on creating connections between the two. Instead of sticking to books and rigid memorizing, it allows us to spiritualize our knowledge to better adapt to the changing world.

4. Adjust your posture for effort

People with a growth mind grow faster than the average person. They believe that if they work hard enough, they can get better. With the low level of effort of most people, it is impossible to fight talent. According to current neuroscience research, the human brain has considerable plasticity, so the remolding effect of acquired effort can be amazing.

As we continue to learn and think, there is intense neural activity in our brains, which forces more connections to be made. The more connections we make between neurons, the better our understanding of a problem becomes and the faster we respond to similar problems. Not only that, but it can even be combined with other fields to generate innovative ideas.

Hard work is not a battle of willpower, but a strategy to be learned. Effort itself is a strategic activity, which is reflected in the following three aspects:

  • 1) Allocation of personal resources.
  • 2) Choice of action direction.
  • 3) Control and adjustment of execution schedule.

This strategy needs to be learned and optimized constantly.

Focus on one field to the end

On this Internet, information is exploding, knowledge is overloaded, opinions are loud, and hot spots are fast decaying. On the contrary, the attitude and action of focusing on one thing, striving for perfection and perseverance are the most rare and precious.

I have always believed that it is more important to have outstanding strengths than to have no obvious weaknesses. In this regard, I naturally think of the industry often said “T” type talents, to efficiently grow into “T” type talents, we have to make the first vertical, that is, we should first study deeply in one field before dabling in other fields, so that more can be understood by analogy, to enhance the content of the horizontal is also very good.

And a lot of facts also proved that a shallow taste of the people are likely to get nothing, and focus on the last people will get excess returns. Also, everyone’s energy is limited, and if you’re not focused, you’re likely to be stuck with multiple slow starts forever.

In addition, people can not be perfect, because there are too many aspects that can be improved, under the limited energy and time, we can only try to play their own advantages, to play it incisively and vividly. In this regard, we need to learn from Mr. Qi Baishi’s long-term focus and meticulous spirit to do one thing to the utmost.

6. Spend 20% of your time on a variety of subjects

A good learner will consciously put the knowledge of different fields or even different disciplines together, and then try to analyze and compare the potential relationship between them. Even when the heterogeneous materials are stacked together, just a subconscious push can make the hidden relationship emerge.

At present, there are many medical problems that cannot be solved or made progress for a long time. One of the main reasons is that most medical researchers lack sufficient knowledge breadth due to knowledge barriers shaped by years of professional education.

Therefore, we need to spend 20% of our time on different areas of knowledge. In terms of the allocation of learning time, I usually adopt the principle of 80-20 allocation, that is, I spend 80% of my time on my main work and the remaining 20% on getting in touch with knowledge in various fields or making up for my knowledge deficiency.

Lack of knowledge can seriously hinder our progress. One of the best ways to accurately identify them is to look at which tasks you spend a lot of time on or are constantly repetitive. For example, not mastering keyboard shortcuts can be a knowledge gap.

7. Build a level of ladder difficulty

People need to be stimulated by setbacks, failures or difficult challenges. If things go well all the time, you’ll stay in your comfort zone, and you won’t be able to reach your full potential.

Therefore, we should appropriately increase the necessary difficulty for our own learning, for example, after learning the knowledge for a period of time to do the exercise, and this kind of difficult test just strengthens our storage and construction of the knowledge.

We should learn to build our own “personal challenge ladder”, take English learning as an example, a good “Challenge stage of English learning” is as follows:

Recite words => test TOEFL => test GRE => Listen to English radio stations (VOA, BBC) => Listen to English talk shows with various regional accentsCopy the code

The greater the challenge, the greater the pleasure. Good design of the challenge ladder gives us enough frustration and failure, which will greatly accelerate our growth rate.

We should be an active learner of exploration, constantly designing difficult “non-standard actions” for ourselves, so as to improve and leap forward in the challenge.

8. How to read more efficiently?

It takes three readings to really grasp the heart of a book.

  • First reading: close reading. The aim is to read the whole book, highlighting and writing notes.
  • Second reading a month later: Scanning, mainly refers to the quick reading of notes and highlights made during the first reading. The purpose is to deepen memory.
  • Half a year later, the third time: recall reading, reading only look at the directory, and then to recall the content, if recall can not get up, and then to scan. So three times down, basically the core content of a book can be well absorbed.

9. Avoid perfectionism

Learning is not a zero or a 100. 80 points is a gain, 60 points is a gain, 20 points is also a gain, have a gain is the most important. But because they focus on their own imperfections, and finally give up, that is a complete 0.

Imperfection is the norm and doesn’t prevent us from learning more and more. However, in the process of self-study, many students require themselves to achieve “perfection” in each step of their own plan before proceeding to the next step. The end result is usually “give up”.

And don’t be “perfectionist”, does not mean that learning can be hasty forward. Everyone has to find their own pace of learning. If you’re frustrated with your progress, ask yourself if you’re perfectionism again.

10. Don’t be overly “path dependent”, learn to target your own goals.

For example, if you want to learn machine learning, learn machine learning directly. In the process of learning, you find that your math is not enough, and then go back to make up for math. For example, when I wrote about Android memory optimization (purgatory level) and Android package volume optimization (craftsmanship), I found that a lot of optimization methods use compile piling + Gradle automation build related techniques. Therefore, I went back to systematically learn the knowledge of compiling stakes and Gradle automatic construction.

11, do not superstition authority of the “good” textbook, do not look down on the “thin” “silly” textbook

Everyone must explore and learn how to find the right materials for their study. The right material for you doesn’t have to be authoritative. There may be some study material you despise that is the key to getting into a certain field.

Starting with a thin textbook and then looking for a “thick” textbook is my best method of learning. Because “thin” textbooks can let you read them at the fastest speed and have a comprehensive understanding of the whole subject, thin textbooks will minimize the difficulty for you to get into this field, and after short-term learning, you will have more interest and sense of achievement. This is often more important because learning is not a 100m sprint, but an extended marathon.

Don’t be superstitious about a single textbook.

In most cases, learning is not a fixed textbook. It is not scientific to find a textbook that “suits you best” and then jump into it.

It is suggested that each technical point needs to select several excellent resources to study, practice, think and summarize. Because different authors interpret the same thing from different angles, it can help you to have a deeper understanding of a concept.

Learn to review

In the first half an hour before going to bed every night, we need to review the learning situation of the day, record what has been completed and what has not been completed, so as to make a cohesive preparation for the next day, so as to ensure that the current learning progress is controllable.

Quantitative change to qualitative change

Just thinking about a problem is often a dead end. Because we haven’t seen enough of them, we haven’t seen enough of them to help us develop more general patterns of problem solving.

We should not try to understand the essence of a problem through a question, which is the same as trying to master a field through a textbook. It is unrealistic.

In fact, most problems need to be “looked back”. The deeper the understanding of a field is, the new perspective will be generated when we look back at the previous problems, and many problems that we had not been able to understand will suddenly become clear. This is the root of “progress”. There are many times when you find yourself “scratching your head” over something, perhaps not because you are “stupid” but because you “haven’t tried hard enough.”

Second, how to analyze the problem?

1. Analyze the importance of the problem

Only by digging out the core and root of the problem can we eliminate the improvement or perfect the process to avoid similar problems.

2, A

The core is to get to the root cause. For example, for online screen adaptation, we can put forward five corresponding improvement schemes:

  • 1) Developers should learn from experience and try to use a more universal writing method.
  • 2) Encapsulate some components to avoid similar adaptation problems.
  • 3), new equipment on the market, to purchase as soon as possible.
  • 4) QA test cases should be reviewed by multiple people to ensure comprehensive coverage of use cases.
  • 5), through some automatic detection means, to detect the adaptation problem.

3. First Principles

When in question, use first principles and read official documentation or source code. Read the essence of source code: Design Patterns and Architecture behind a Great Framework.

In addition, for some problems that are difficult to solve with technology, we can solve them from the point of view of requirements.

Three, learn ten steps

The three factors that are most important to the growth of technical people usually include the following three main points:

  • 1) Learning – constantly improve their depth and breadth of ability.
  • 2) Thinking — the ability to solve problems.
  • 3), practice – a lot of practice allows us to truly understand the nature of a technology.

The essence of the 10-step process is learning-practice (thinking out a problem – learning-practice)- mastering – teaching. The process in note () (also known as exploration) usually takes several iterations until the technical point is mastered.

Learning the 10-step process makes full use of our natural curiosity to help us absorb more knowledge, which will continue to motivate us to move towards our goals through practice, not just reading books or listening to instructional videos.

Before starting to use the 10-step learning method, first of all, it needs to be clear that the study plan can best be combined with the work plan, theory combined with practice, fast learning to apply. Therefore, the priority should be to learn the skills that can be used or will be used in the job. After finished their job, we should go as far as possible to consider the various systems in the company and the business module, see what is not reasonable and can be improved, and then to improve the relevant aspects of technology, and to identify and optimize them, we can give priority to the reference in the process of optimization of the technical scheme of other firms.

1. Understand the big picture

Knowing the big picture helps us quickly identify things that are worth spending time on, such as doing some basic research, such as searching the Internet or looking up introductory chapters in books on the subject.

2. Determine the scope

We should focus on the scope of study and focus on the key content. Here you need to make full use of the information you collected in step 1 to find out your own learning scope, or you can use your own learning reasons to decide the scope of learning.

When choosing a focused and focused scope and defining the learning scope, we should fully consider the time factor and measure the cost performance of time as much as possible.

So how do you measure the cost of time?

  • 1) Assess the importance of mastering a skill in the short and long term.
  • 2) We should determine the goal of learning by evaluating the needs and time costs and deciding whether we need to learn or not.
  • 3) Some simple knowledge points that only need to be understood can be completed by fragments of time, but if some knowledge points need to be mastered or even “mastered”, we need to allocate a whole period of time for them.

In addition, there are two points to note in this step:

  • 1) Some knowledge needs to be acquired gradually, unless you already have a very solid foundation, otherwise jumping to the next level will only be thankless.
  • 2) Some knowledge such as source code, obscure concepts, etc., is worth understanding as long as they are important enough.

Define your goals

Good success goals should be concrete and unambiguous. For example, when LEARNING ASM + Gradle, THE goal I defined was to complete a global Bitmap monitoring component using ASM + Gradle.

4. Find resources

At present, the main information sources for my study include the following nine channels:

  • 1. Official documents: First-hand information.
  • 2, source: first-hand information.
  • 3. Github Open Source Projects: Check Github’s hot list regularly (at least once a week) for quality projects in need.
  • Awesome-Android-NoteBook && Computer Science Classics.
  • 5, open source authoritative materials: for example, On Java8 is Java programming ideas (fifth edition).
  • Geek time
  • mooC
  • 8. Baidu Cloud Disk
  • 9. Excellent articles on WanAndroid

In this step, remember to also seek out some good books/introductory articles that we will start with when we first start studying the topic.

5. Create a study plan

We need to make a study plan suitable for ourselves according to our own personal time. This step can be seen as an outline for writing a book, which is usually done by consulting the book’s table of contents.

6. Filter resources

Think carefully before you plan your study. Once you have started your study plan, try to keep changes as few as possible, unless you find problems with the plan later. Therefore, we need to take an extra step to select the resources with the highest quality to cover the learning plan. For some purchasing resources, we can evaluate them by viewing comments.

Begin to learn, dabble

The key to this step is to overdo it. It’s easy to lose control and start digesting all the resources listed in your planned study. However, you will find that if you can resist the temptation, you will achieve more. We should focus on mastering the minimum amount of knowledge we need to move forward.

A good memory is better than a bad pen. In the process of learning, you should at least take notes on what you learn (Evernote and Youdao Cloud Notes), and repeat the review at a certain interval.

Hands-on operation, play and learn

He knows nothing but his hand. The primary object of education is not to know, but to do.

For the study of computer field, the significance of teaching material is far less than the significance of practice. It’s important to really get your hands dirty with programming. This is like learning to swim, must go swimming in the water; Or learning to drive, you have to be on the road. Otherwise, what you say is perfectly reasonable. A person with a primary school education, as long as he has driven a car, swam a swim, can instantly kill you in these two areas.

Real improvement in learning occurs in the process of practice. For example, Debug is an efficient practice. It is not only a way to find and solve code errors, but also an important means of learning.

Therefore, we should learn through exploration and practice, and the problems we encounter in practice will lead us in the direction of what is really important. When you go back and look for answers to your questions, not only will the questions get solved, but you’ll remember much more than you learned, because what you learned is what’s important to you.

In addition, in practice, in some key movements deliberately practice, will also get twice the result with half the effort. Because constant practice and thinking can change the structure of the brain, the brain is like a muscle, the greater the challenge, the greater the impact, the more efficient the learning, and also the breakthrough.

Fully grasp and apply what you have learned

It is not necessary to go through all the resources we have collected, but rather to focus on solving the problems we found in the hands-on process. Try to relate what you are learning to your ultimate goal. Every module you master should move you toward your ultimate goal in some way.

In this step, we can combine the two learning methods of test practice and scattered practice to achieve the best learning results. At the same time, we’d better set up a series of challenge steps for ourselves. For example, for students studying audio and video, we can set up the following challenge steps for themselves:

Use Android audio and video API to achieve a player => use FFmpeg and OpenGL to achieve a player => custom FFmpeg source code, master OpenGL/Vulkan high order usage to achieve more powerful playerCopy the code

Learning a certain technology actually eventually will form a tree, we can use the mind map = > XMind | | curtain is described. For technical points related to a process, you can use ProcessOn to draw a flowchart.

Music is a teacher, integration through

If you teach others what you have learned, you will not only remember it, but you will understand it better.

The point is that we need to take the time to extract what we have learned from our brains and organize it in a way that others can understand. As you go through this process, you’ll find that a lot of things you thought you knew, you didn’t. This step is critical to retaining information and understanding knowledge beyond the surface.

In the process of teaching, some contents are essential, such as:

  • What is?
  • Why is that? What problem it solves.
  • The advantages and disadvantages.
  • Compare the differences/similarities of similar technologies.
  • How to use it?
  • How to solve the problem? The internal implementation principle.
  • Focus on core knowledge and key details when summarizing, and try to simulate knowledge in different fields or disciplines.
  • Important process, conclusion.

Sharing is a good way of teaching, and its time cost is relatively low. At present, there are three common ways of sharing:

  • 1) Blog posts/columns
  • 2) MoOCs technical video
  • 3) Technology sharing within the department/community

The real point of technology sharing is that there is always a part of knowledge that we don’t really understand well enough to explain to others, and the process of teaching forces you to confront that part. When we teach others, we force ourselves to confront the difficulties of the subject, to explore deeply, to move from superficial knowledge to complete understanding. Learning knowledge is temporary, understanding is permanent.

When we try to teach others, we force ourselves to reorganize the data in our brains. The best way to think about it is to explain something and record it on paper, or in a Word file or slide show, so that you can take these disjointed pieces of information and reorganize them in an effective way. If we would teach, we must teach ourselves.

The best way to teach others is to be humble and confident — to look at problems from a humble perspective and to speak with authority.

Finally, don’t forget to review in intervals. For an article, expand its knowledge tree first, and then try to describe the core content and key details of each knowledge node.

We should learn to build wheels, write frameworks or components, and suggest simple to complex challenge ladders.

4. Important questions answering area

1, how to learn a technical point from the easy to the deep?

It is recommended that you select a field that interests you most and focus on this field for a while. Take Flutter as an example. You can collect all the professional documents, excellent books, video tutorials, and articles related to Flutter and outline the knowledge involved. Make a list of the information you need for each of the points covered (for example, layout class components for today or these days). Learn and practice the basic usage of Flutter. Then you can look further into the internal principles involved in Flutter (such as the implementation principle of the common layout of Flutter) and summarize the corresponding study notes (for future review). In this way, learning is more effective, and at the beginning, you can adjust the length of the plan according to your own state. It is suggested that the plan be relaxed at the beginning to ensure that it can be completed every day. Once the habit is established and fully adapted, you can increase the amount of learning. This is just like the principle of fitness, people who just start to exercise are generally in poor physical fitness, so it is necessary to start from the most basic movements, and so on to lay a good foundation, improve the physique, to do some strength training properly, increase muscle.

2. How to string together the bits and pieces of Android knowledge well?

This may indicate that we do not pay attention to systematic learning and thinking when learning, but learn a little bit of east and west, then the knowledge will naturally scattered all over our minds. In order to solve this problem, we need to first need to list the knowledge we have learned so far, and then we can try to find the connection between these knowledge points and make it into a mind map. There may be a lot of connections that we didn’t include in our mind, but that doesn’t matter. We can iterate around this 1.0 Version of Android mind Map, and eventually, it will improve and play an unimaginable power

3. How to learn technical videos more efficiently?

Suggest open when learning video 2 times the speed, unfamiliar with/partial difficult knowledge, after each looked a little technical points, just practice again, then put the results of practice/first draft of your blog, write notes to a simple knowledge, familiar with/is generally see section/two or three points after practice, write notes/first draft of your blog.

4. How to select a third-party library?

  • 1) Determine if the library is required.
  • 2) Whether this library can improve the development efficiency and reduce the maintenance cost of code.
  • 3) What is the learning cost of this library? For example, the learning cost of RXJava is relatively high.
  • 4) The quality of this library depends not only on star, but also on the handling of issue.

5. How to practice algorithms?

  • 1), each algorithm problem is first to achieve their own, clear their thinking to achieve again. (More than 5 minutes without thinking of next step)

  • 2), then look at the answer, remember the idea of the answer, write it.

  • 3) The next day, write again according to the idea of the answer.

  • 4) Wait until the interview time to systematically handwritten all the questions by category.

How to read the source code?

1) Preparation

  • Java design patterns (template method, singleton, Observer, factory method, proxy, Policy, decorator).
  • Java advanced related (generics, reflection, IO).
  • 3. Understand the overall architecture design and main functions of the software in official documents.
  • 4. Master the library.
  • 5, build the system, the source code run.

2) Start reading

  • 1, according to your understanding of the system, design several major test cases, define the input, output. (the Debug

Debug multiple times

  • 2. Discard the details in the first chapter and grasp the main process. In the second and third chapters, look at the details of each part.
  • 3. Use UML to draw the class diagram of the system as you read. The main test cases are understood, enrich the test cases, consider some branches.
  • 4. This step will take a very, very long time, but when you are done, you will have made a qualitative leap in your understanding of the system.

3) Process summary

  • 1. Preparation.

  • 2. Search the web for excellent articles that analyze the open source project.

  • 3. Ask your own questions about open source projects and read the source code with them.

  • 4. Add notes and notes in the process of reading source code.

  • 5. Summarize the reading/write articles, absorb and recreate

7. With the frequent emergence of new technologies, should we take effective targeted measures?

The emergence of a new technology, we should first understand it, to see whether it has a greater help to their own technology growth, if there is a priority to add to the learning schedule, rather than immediately to learn or deny it.

Five, the summary

For most of us, the key may not be how we learn, but how we stick to it without suffering. And to solve this problem, the biggest weapon is interest. Real interest in a field can only be developed if you really go deep into it. If the understanding of a matter is not deep, not thorough, always a little, it will not experience the beauty of the matter, nature will not produce lasting interest. This makes it easy to slip into a cycle where not knowing enough leads to not being interested enough, and not being interested enough leads to not knowing more about it.

If I can do something for a long time, it must bring me a sense of fullness and satisfaction that outweighs all my efforts, it must haunt me day and night, it must arouse the most intense interest in my heart. That is to say, I am empowered by passion, not by will. However, it’s hard to be enthusiastic all the time, so we need to have some self-control to support the transition during the period when enthusiasm is dim. Therefore, how to develop strong self-control is also a problem we need to explore further.

Reference links:


  • 1. A Survival Guide Beyond Soft Skill Code

  • 2. How to Become a Great Person

  • 3. Silicon Valley’s Path from Technology to Management

  • If there are any efficient learning secrets, they are all here

Thank you for reading this article and I hope you can share it with your friends or technical group, it means a lot to me.

I hope we can be friends inGithub,The Denver nuggetsTo share knowledge.