preface

Nice to meet you 👋 I’m Flywith24.

When I first entered the university, I had a discussion with my teacher about “art” and “tao” : what should be taught in the university, what students should learn, and how to learn.

If my previous articles are regarded as a compilation of various “techniques”, then the content of this article is a discussion of “Tao”.

In this article, I will review my experience of learning Android and summarize my thoughts on learning methods and routes during this process.

About how Flywith24 got its name

In order not to disturb the reading, interested friends click on the details

I am a Kobe fan and have liked him since the 2007-08 finals. His nickname is “Peter Pan”, so in junior high school, he gave himself a network ID: Fly with 24.

In college, I thought it was too dumb, so I changed it to Flywith24.

The name of my paid Android Detail column pays homage to Kobe Bryant’s Detail basketball show.

At the same time, I also welcome you to join me on wechat, my wechat account is Flywith24

Starting point – summer vacation at the end of freshman year

It was the summer vacation of 2015, and this was the first time I learned about the hottest temperature in Jinan. School was out, but instead of going home for the summer, I chose to stay in school and started my Android learning journey.

Before the holiday, I had a simple understanding of Android and built the Eclipse + ADT development environment with the help of my senior teachers. Then came the official release of Android Studio 1.5, which meant everything was new and had to be learned from scratch.

I still remember the first teaching video I watched, which was about using Fragment to realize TAB switching function on the main interface of wechat. Later I learned that the producer of the video was the famous Hongyang.

Struggling and confused — the road of self-study in school

I studied in this way for a year, but I found that this way of learning can not make knowledge systematic. At that time, The second Edition of The First Line of Code by Guo Lin was published, and I began my systematic study.

At the same time, I wrote my first app, a social + sports app, which built about running. At that time, writing code was to find the feature you wanted on the Internet and copy it into your own project 🤣.

The problem that has been bothering me in school is that I don’t have a systematic grasp of knowledge, which makes me feel a little closed. In my senior year, I chose to go out for internship because I had enough credits.

Independent side — internship

Before the final exam in the second semester of my junior year, I successfully got the offer from the internship company and started my career on July 03, 2017.

I was lucky enough to have a group of experienced colleagues at the internship company, including one who had seven years of ROM development experience at the time. And the leadership of my trust, the new project to me – an instant communication project.

I grew rapidly during this period and completed the company’s projects from zero to one. I learned to cooperate with back-end developers, learned about WebSocket, learned that WebRTC can realize audio and video calls, learned to encapsulate the encryption algorithm written by C and call it through Java JNI, and later I also solved the segmented encryption and upload and download of files. At the same time, I also asked the big guy a lot of ROM related knowledge.

During my internship, I became a developer on my own. Still, I was anxious because I knew I was only in the “know it” phase of development, but I didn’t know why.

At this stage, I learned about Stay’s thoughtful class and began to summarize learning methods and make my own career plan.

The station will soon be closed, but I will never forget the help from Stay, Google’s little brother and others. Even though you don’t know me. 😆

Getting better — The job after graduation

After graduating from university, I was still very anxious, still because my knowledge system was not clear. But I am clear about what I need, I need to master a scientific learning method (TAO), rather than constantly learning how to use new technology (shu).

At that time, I learned that the third phase of HenCoderPlus course of throwing line was very expensive (my monthly salary at that time was not enough 🤣). But I am a person who is willing to invest in myself, because I know that I can never lose money investing in myself. What Kay says most in the class is: Get to the bottom of it. In fact, the content in the course seemed very “basic”, but I vaguely felt that I needed it to build my own knowledge system.

A year after graduation, I learned Kotlin and my knowledge system became clearer and clearer. I was even happier when I transferred to work for my former boss (who I followed to the new company after graduation) doing both App and ROM development. It was at this point that I started learning about Android Jetpack components while learning how to customize ROMs.

But now I am still anxious. Although my knowledge system is a little clearer, I still haven’t summed up my “Tao”.

Observation – Success cannot be duplicated, but excellent people always have the same characteristics

I met KunMinX in Denver in mid-2019, and his writing was so simple that I subscribed to his column, Relearning Android. KunMinX’s articles are the product of “deep thinking,” and I’ve met a lot of like-minded people through this column.

At the same time, I got to know a lot of great developers and their articles were very distinctive and of very high quality:

  • South dust
  • Grasp the heart say TM
  • But the plum smell
  • jsonchao
  • Gracker
  • Still fantasia
  • HiDhl
  • .

I especially enjoy reading other people’s articles and observing how these wonderful people think.

I have always held the idea that a person’s success cannot be duplicated, but excellent people have the same characteristics.

  • Stay emphasizes the method of analyzing problems
  • The throwline emphasizes capturing the essence
  • KunMinX emphasizes deep thinking

What are the common traits of these great people? What is the scientific method of learning? What is my own “way”?

Enlightenment – not only to look forward, but also to stop thinking

I’m not a highly gifted person, but I like to summarize. My math teacher in junior middle school gave me the following evaluation: You are not the fastest learner, but you have great summarization ability after mastering knowledge, and you should give full play to this advantage in the future.

I was thinking about my tao until I saw Elon Musk answering the question “How do you learn so fast?” on Reddit. When, everything is clear.

Elon Musk has built four multi-billion dollar companies in four areas (software, energy, transportation, aerospace).

One tip: It’s important to think of knowledge as a semantic tree, make sure you know the basics (i.e. trunks and boughs) before you get into the leaves/details, otherwise the leaves will have nowhere to go.

I get it. Some things are clear:

Why I struggled so much to learn Android in college, and why I was still anxious about the knowledge system after work.

Because I have nowhere to put my leaves/details.

Why do universities mainly provide general technical courses such as data structure, computer network, operating system principle, database and C language, but rarely provide detailed technical courses, such as mobile terminal development, background development and other technical stacks specialized in a certain field?

Why do big companies pay more attention to some seemingly unusable basic knowledge, data structure algorithms, networks, underlying principles?

Because the root is the most important thing, knowledge is like a tree, with roots, slowly grow trunk, thick branches, finally grow leaves and fruit.

This is not a magical theory, even the old Chinese saying: “sharpening the knife does not miss the wood workers” express this meaning.

So I divide learning into two types, universal learning and demand learning. The former tends to “Tao”, while the latter tends to “shu”.

Universal learning is the root, the trunk. Specifically, learn things that have a long half-life, because they are often industry standards. Industry standards must be easy to use, stable and reliable, so they become industry standards. So industry standards must be learnable and mastered (KunMinX: a succinct and powerful cognitive map).

And demand learning, biased to a specific field of knowledge content. Compared to Java’s general learning, Android’s special library is requirements learning. The content that needs to be learned usually has a short knowledge half-life and is updated and changed quickly. But master the correct learning method, grasp the essence, learn to think deeply, the efficiency of learning demand will be very high.

It is not enough just to master this method, but also to be good at summarizing. Don’t learn randomly, don’t learn without thinking. Connect different fields of knowledge to find commonalities, starting with solid roots and thick trunks. As knowledge increases, branches and leaves begin to connect with other trees, and eventually trees become forests. To become an excellent “garden artist” rather than an ordinary “specimen collector”.

If the above description is abstract, here is a simple example:

Learn to use OkHttp and analyze its source code. What kind of learning is this? Okhttp is a Java tool library for making Http requests, which we can think of as requirements learning. What about its general learning (root)? Of course, it is the content related to the computer network. It is difficult to understand its implementation without understanding Http packets, the layers of network transmission, the different levels of protocol and so on.

Is it not related to any other tree? Yes, the core of OkHttp is an interceptor, so how is it implemented? This involves the chain of responsibility model. The chain of responsibility pattern was originally defined as: if the request is processed by one processor, it is not passed on to subsequent processors. It also has a variation: the request is never stopped, and all processors process it once.

Is this mode used elsewhere in Android? View event passing uses the recursive + responsibility chain pattern.

When you are worried about trivial and isolated points such as “return true” and “consumption”, review the definition of chain of responsibility and see if it is clearer. Why does the View event pass have a touchTarget? Why is it structured like a linked list? Because the most common implementation of the chain of responsibility pattern is to use linked lists to store processors. Responsibility chains can also be implemented using arrays. Why a linked list? Such a series of isolated knowledge points, a piece of leaf interweaved together, become a forest.

Practice — Learn in your own way

After summarizing your Tao, what you need to do is to follow your Tao to learn. Here are two examples of my practice:

Practice 1: Learning from root to Leaf

When learning the Android life cycle, you need to understand the process mode and process priority in Android. Android is based on the Linux kernel, so I first learned the knowledge related to the Linux process:

There are many courses, such as the networking section and the virtualization container section, which are not very relevant to my technology stack right now. So I’m just going to focus on process management, memory management.

After sorting out the content related to Linux process, I began to understand the concept of process related with Android and output this article:

After that, it was easy to understand the description of process patterns in the official documentation, and I published an article on Android process allocation and priority: Android Detail: Process allocation and priority This article can be viewed directly at nuggets.

Practice 2: Cross-domain learning

Introducing Gradle dependencies is a hassle, so I wanted to use uTools to quickly find and copy gradle dependencies.

The usage is as follows:

Third party plug-ins for uTools need to be developed using JS, and I have never learned JS, so this is a “needs learning” and a cross-domain learning.

Then I did a few things:

  • Simple learning of JS syntax
  • See the uTools plug-in development documentation to learn how to develop plug-ins
  • View the source code of other uTools plug-ins and analyze the routine of writing plug-ins
  • Find the ali mirror address of jCenter and other warehouses

There was a problem with the dependency packages of The Google repository, which had no Http API available and could only be queried through the site.

I had no choice but to view the source file through F12, and found that every item in it was XML, so I copied and wrote the JS code to parse XML.

Gradle relies on lookups too much? This plugin may help you.

The plugin, which took a day and a half from idea to completion, was created at home during this year’s pandemic. Grasp the correct learning method, grasp the essence, the efficiency of learning demand will be very high.

What I want to show by these two examples is that everyone must learn different things because of their different stages and goals. What is important is to master the scientific method, grasp the essence, think deeply and be good at summing up.

Small results this year

The Denver nuggets

Since the beginning of this year I have been Posting on the Nuggets in several series:

  • Back Jetpack collection
  • Jetpack Update series
  • Strange technology and crafty series
  • Theme&Style series
  • The series

Since the first post at the beginning of the year, it has already received over 100,000 views (why it has just over 1,000 likes 🤣).

Small column

In August, I opened the Android Detail column in the small column, and now I have published 6 articles, which have accumulated more than 100 readers. Most of you here are coming from android over again, so thank you again to KunMinX for helping me.

Click here for a list of articles

Github

Github’s ⭐ hit 300, though it still looks poor 🤣

The public,

Inspired by bingxin, I opened my own public account. Update very Buddha system, in the future will consider releasing more thinking class content to the public account.

Knowledge of the planet

In addition to systematic knowledge, there are some more important fragmented knowledge, so I created a free knowledge planet dedicated to sharing high-quality fragmented knowledge.

Self-built blog

Changed the theme of self-built blog, the appearance level is higher.

conclusion

2020 was an unforgettable year. Too many things happened in this year. The epidemic swept the world, basketball lost Kobe Bryant, and football fans lost Maradona. Of course, there are some things to be happy about this year, such as:

Thanks to all the people who helped me on my way to grow 🌹, they are

College teachers: Ms. Si, Ms. Liu, Ms. Hou…

During the university period, I was introduced to the teacher elder sister: Teacher gong, teacher Gao, teacher Fan

Those who have never met: Guo Lin, Hongyang, Stay, throwline, KunMinX, Nan Chen

Lovely colleagues who have been helping me: Xin Ge, Lao Hu, Tao…

And thanks to all of you, especially the Android Detail paying readers, most of you subscribe to KunMinX based on your trust.

Also thanks to those who are my age but super excellent people, Ao Bing, three crooked, Xiao Lin

Although we are not in the same technology stack and do not know each other, I have observed the characteristics of excellent people from you. It’s your presence that keeps me from feeling smug about a little progress.

Finally, thanks to my girlfriend, I’ve been holed up at home and blogging almost every weekend this year, using the feeble excuse “it’s not safe to run outside” every time. Thank you for your support.

I am Flywith24, an ordinary person from an ordinary family who graduated from an ordinary school. I’m not a big shot, but I believe I’m on my way to becoming one. I hope my story can help those who are still confused, I wish every serious technical people have fire in their hearts, light in their eyes, and better and better!

Denver annual essay | 2020 technical way with me The campaign is under way…