24 to Become an Android Expert First Address These Three Issues

24 To Become an Android Expert First Address These Three Issues #

This column has been online for over two months, and Module 1, “High-Quality Development,” has also been fully updated. How well do you grasp it? I know that many students have been actively learning and completing the practice exercises provided in the column, and they have been giving me feedback promptly. As the author of this column, I am very pleased.

However, many students have expressed difficulty keeping up with the progress of the column, and they seem to be even more confused and puzzled about “how to become an Android development expert.” “This column is too difficult!” “I don’t use any of this knowledge in my daily work!” “What should I do to better learn from this column?” These are the three most common issues that I have heard from students.

Since today is the Q&A time for Module 1, I will answer these three questions and strive to help you, who are confused, dispel the fog and find the way to becoming an Android development expert.

In the past few years, during the period of business dividends, various frameworks such as Atlas, Tinker, React Native, Weex, and mini-programs have flourished. Our applications have accumulated various frameworks and countless lines of business code. But now, when we need to expand into Southeast Asia or penetrate into third- and fourth-tier cities, we find that we already owe a terrifying “technical debt” when faced with low-end devices and poor network conditions.

To become an expert developer, simply meeting the requirements is far from enough; you also need the ability to systematically solve application performance and architecture problems. And these problems are by nature very complex. Solving complex problems might be difficult for some students, but if you want to become an expert, you must have the ability to solve them. Now let’s discuss whether this column is really “difficult” or not.

Question 1: Is this column too difficult? #

Performance optimization is like a pit, you never know how deep the pit you’ve jumped into is.

In the past few months, I have been filling the pit of “startup optimization” and have gained a deeper understanding of this statement.

  • Business optimization: Application layer. At first, I easily optimized the startup speed by 50% through optimizing the business code. But as “The Great Stagnation” describes, this is just picking the “low-hanging fruit”. After that, I quickly fell into stagnation, like rushing into a dark tunnel, not knowing what else could be done and how to explain many phenomena from the surface: Why is I/O sometimes so slow? How should we measure thread optimizations?

  • Android Framework: System framework layer. In order to break out of this dark tunnel, I researched various modules of Android such as memory management, file system, rendering framework, etc. I learned how to optimize and monitor I/O, threads, jank, and frame rate. I also built various performance monitoring frameworks. Why do I emphasize monitoring? Because for large companies, “creating a pit is easy, but filling it is hard.” When dozens or even hundreds of people collaborate on a project, we do not want to only solve specific problems, but completely solve a class of problems. However, in order to implement a monitoring framework, it is necessary to have a very thorough understanding and research of the Framework.

  • Linux Kernel: Kernel layer. Going deeper, I also need to utilize some Linux mechanisms such as ftrace, Perf, JVMTI, etc. When doing I/O class reordering and file reordering evaluation, I also need to modify kernel parameters and flash ROM.

  • Hardware: Hardware layer. What are the differences between high-end and low-end hardware? What is the difference between eMMC and UFS flash storage? Besides understanding the performance and features of hardware, at this stage, I also hope to ask for performance improvements from mobile phone manufacturers and hardware manufacturers. For example, Qualcomm’s CPU Boost, WeChat’s Hardcoder, OPPO’s open platform, etc.

The process of startup optimization is like climbing a steep knowledge slope. We keep trying to delve deeper into the lower layers, hoping to pick higher fruit. So, going back to your question: Is this column difficult? Yes, because it attempts to break down the entire knowledge architecture from top to bottom.

To be honest, many mobile development engineers today are more like API engineers, lacking knowledge of data structures, algorithms, and architecture. If you want to go deeper into the lower layers, you will feel it is a difficult journey. However, higher-level APIs are easily deprecated, and even if you have all Android APIs memorized, you cannot become a true development expert. Even if you eventually replace Android with Fuchsia, you will still just be a Dart API engineer.

On the contrary, the lower-level things are less likely to become obsolete. If we face a system that is not the Linux kernel in the future, such as Fuchsia OS, we can still apply the knowledge we have mastered to the existing operating system because things like memory management, file system, signal mechanism, process scheduling, system calls, interrupt mechanism, drivers, etc. are common. When migrating to a new system, you can have a global perspective to help you get started quickly.

Therefore, I hope that when I look back at this column in 5 years, it will still not be outdated. So, from the depth of knowledge, this column is indeed difficult. Now, let’s look at the breadth of knowledge.

Crashes, memory, jank, I/O, rendering, network… this column covers a wide range of knowledge, and it only provides an outline. You need to spend time supplementing the additional knowledge linked in the articles.

So, regardless of the depth or breadth of knowledge, this column can be considered quite difficult. So, how difficult is it? It can be said that it surpasses the level of most Tencent T3 or Alibaba P7 engineers. If you haven’t reached this level yet, it’s normal to not understand it, because most of the content may also be unintelligible for engineers at BAT on first reading.

Calling this column “difficult” is not to show off, but because becoming a true Android development expert is not as easy as imagined. Only by seeing the gap can we find the motivation to move forward. In 2019, you need to take the first step towards becoming an expert.

Question 2: Will the content of this column not be applicable to my work? #

I have always been focused on business and haven’t had the opportunity to deal with performance issues. For this column, I am more interested in content that can be helpful in my daily work.

As I mentioned before, I chose to write these topics because they are essential for mobile development experts. If I were to tell you how to use MAT or Profiler, or teach you how to design interfaces, perhaps these topics would be helpful in your daily work, but they alone would not make you an Android expert.

This column aims to enhance your personal capabilities and help you grow. It may not align perfectly with your current job, so how do you resolve this issue? I believe there’s no need to wait for someone else to assign tasks to you. In addition to completing your assigned work, you can try to solve application performance and architecture issues, or tackle team efficiency problems in your spare time.

By doing so, your performance at work will exceed your superiors’ expectations, and in the future, your colleagues may come to you for advice on these advanced topics. You will have gained the trust of your colleagues, possibly leading to taking charge of these tasks in the future, establishing yourself as a “development expert” in their eyes.

Of course, if you feel that the current platform limits your future development, this column can serve as a very good stepping stone for you to apply to top-tier companies.

“Self-improvement is the prerequisite to success.” Many of the topics discussed in this column may not be familiar to interviewers from top-tier companies, and many of the issues I address are currently not well-handled even by those companies. In this column, I will do my best to analyze the problems, attempted solutions, and future optimization directions faced by big companies both domestically and internationally, such as Tencent, Alibaba, Bytedance, Facebook, and Google. I hope to broaden your horizons and help you understand what these big companies are doing and what they value, as these are also crucial for interviews.

Although this column covers many different topics, it is impossible for us to master every single one of them. In a previous article, I talked about the T-shaped talent theory at WeChat. WeChat doesn’t ask candidates how to use Android and iOS APIs during interviews; instead, they hope that candidates specialize in a particular field and have exceptional knowledge and skills that can impress interviewers. This means that if you have proven yourself in one field, WeChat will also be willing to give you opportunities in other areas. Here, I recommend you read the article “[谈谈腾讯的技术价值观与技术人才修炼]"(https://mp.weixin.qq.com/s/Vn0eKvY5AU1DEOrxbOxABQ).

In summary, by practicing LeetCode problems in moderation and combining that with the breadth of knowledge from this column, if you delve deeper into one or two particular topics, entering a big company should not be a significant challenge.

Question 3: How should I study this column? #

I can’t apply this column to my work, and I’m usually very busy. How should I study this column?

It would be ideal if we could integrate the study of this column closely with our work. But even in an ideal situation, it still depends on personal drive.

In the year-end summary of Geek Time, I read a sentence that resonated with me: “I bought 32 columns in 2018 and completed the study of the opening words.” So how should you study this column? First, you should abandon your anxiety and fearlessly move forward.

Even Tencent T3 or Alibaba P7 find this column difficult, so if you can’t understand it, don’t be discouraged or anxious. You can take your time and refer to the reference materials. The column has always been there, and you can learn at your own pace. You can even spend the entire year of 2019 “confronting” it, but never give up.

Do you remember the flag you set in the column’s “Guide” section? You can use this column to supplement your knowledge framework. As our basic skills improve, both the front-end and Flutter will have a place, and there is no need to worry whether the Android system will be overturned.

So how should you study this column? My second suggestion is to read more, think more, and practice more. Reading a lot of articles and not thinking about the content and intentions is useless; thinking a lot and not practicing is also useless.

Because practice is so important, I spend a lot of time on samples when writing the column. Think about all the open-source projects out there. Maybe we only call APIs or raise a couple of issues, which doesn’t really count as using them. To truly make good use of open-source projects, you need to study their internal mechanisms and ponder the author’s intentions. Only after careful study can we discover areas for optimization.

When studying the column, I suggest starting with one or two topics for in-depth learning. If you find the content related to crashes challenging, you can skip it for now and come back to it after studying the other topics. You will definitely have a different experience.

Our learning process is also a process of building confidence. There may be moments of anguish in a few stages, but once you overcome them, everything will become clear and bright.

Also, I like to present many articles in the column in terms of evolution, such as the evolution of power consumption, rendering, and Android Runtime. Similarly, the path to becoming an expert should also be a continuous evolution. At the beginning, it may not be the best, but as long as the direction is right, you will eventually reach the “expert” destination.

Lastly, and as I have emphasized repeatedly, studying the column also requires a lot of background knowledge and external materials. You can refer to the recommended books in the article Are You Struggling with Column Study? You Probably Need a Recommended Book List.

Summary #

It is not too late to set a “small goal” together today: try and make an effort according to the directions given in this column, and embark on the path to becoming an expert in Android development.

In the future of mobile development, whether it becomes the realm of “big front end” or Flutter, performance, efficiency, and architecture will always be the core principles. The solid foundation we build in Android development today will also help us better understand and delve into new development patterns or systems in the future. Concepts such as crashes, memory, storage, rendering, I/O, and network…and the underlying principles behind them will remain extremely important. This holds true for other fields as well; a front-end developer cannot only know the syntax of HTML, CSS, and JS, but also needs to understand the principles of compilation, browser implementation, and underlying rendering mechanisms.

Lastly, I want to mention that learning can sometimes be a lonely process. If you can find like-minded friends to study together, it may be even more effective. As advocated by many developers, pair programming is recommended. I suggest you take a look at the story of the “two super engineers who saved Google” 《两位拯救谷歌的超级工程师的故事》. In addition to the example of pair programming, there is a paragraph in the article that had a big impact on me.

Jeff and Sanjay are very familiar with the working principles of computers and can think at the bit level. Jeff once compiled a list called 《Those delay numbers every programmer should know》. Although it’s titled “every programmer should know,” most practitioners are actually unfamiliar with these numbers—for example, a reference to a level one cache usually takes around half a nanosecond, or reading 1MB sequentially from memory takes about 250 microseconds, and so on. However, these numbers are deeply ingrained in the minds of Jeff and Sanjay. With multiple rewrites of Google’s core software, the capacity of the system has been raised to a new level.

Almost 1/6 of 2019 has already passed. How are you doing with the goals you set for this year? What other study plans do you have? Do you have any experiences you would like to share with other students? Leave a comment and share your growth with me and other students.

Feel free to click on “Share with a friend” to share today’s content with your friends and invite them to learn together. Lastly, don’t forget to submit today’s assignment in the comments section. I have also prepared a generous “study booster package” for students who complete the assignment seriously, and I look forward to improving and exchanging ideas with you.