Android Architects' R&D Technology Advancement Road: Those technologies and soft skills that need to be mastered at different stages

Preface

Mobile R&D is hot, and more and more people are starting to learn android development. However, many people feel that it is easy to get started and it is difficult to grow. They are rather confused about the future. They don't know how to improve their skills and what needs to be added to the next stage. The market is also mostly talking about knowledge graphs, lacking a system and a sense of growth rhythm, hereby compile an advanced road for android R&D, I hope it can be helpful to everyone.

In this article, we only talk about technology, not soft skills.

Here I divide the siege lion into four stages: elementary, intermediate, advanced, and senior, and make requirements for R&D and design capabilities, tool use, system principles, and architecture.

primary

My definition of the primary R&D siege lion is to master basic android knowledge and be able to complete a function independently. Most people at this level can quickly reach it by reading some information books and then going through project exercises.

The required skills are:

1. Grasp the knowledge of the four major components of android, and have an in-depth understanding of the related life cycle; you must also master the Application, Fragment, and Intent.
2. Grasp the attributes and usage of android basic layout and controls. Common layouts include LinearLayout\RelativeLayout\ConstraintLayout, etc., and controls include TextView\ImageView\RecyclerView\ScrollView, etc.
3. Have a basic understanding of Android's resource access and use, and understand Android's adaptation principles for different countries, languages, screens, and APIs.
4. Master the use of android system services and tools, and have a basic understanding of network access and database operations.
5. Familiar with R&D tools, such as IDE, simulator, network agent, log, etc.

intermediate

It takes some effort to reach the intermediate level, and you need to know more. You can model the open source library to build wheels for practice. Intermediate engineers must be proficient in function development. The required skills are:

1. Familiar with SOLID basic design principles and master 23 design modes.
2. Have a deep understanding of the development language features of java/kotlin, such as reflection, dynamic proxy, apt, etc.
3. Have a basic understanding of the android architecture, and an in-depth understanding of the apk structure and packaging principles.
4. Have a basic understanding of the features of each version of android, such as MD design, permission management, doze mode, etc.
5. Familiar with various R&D debugging tools, such as git, gradle, mat, layout inspector, etc.
6. Grasp the principle of Handler\AsyncTask, and be familiar with multi-threaded development.
7. Have a preliminary understanding of the principle of drawing pages and be able to realize a complex custom control.
8. Be able to master the use of open source libraries, such as image libraries (Glide\Fresco), network libraries (Volley\okhttp\Retrofit), tools (Dagger\RxJava\EventBus), etc.
9. Familiar with common methods of image optimization and avoid writing code with memory leaks.

advanced

If you reach the intermediate level, congratulations, you can handle most situations. But if you want to go further, you need to have a deep understanding of the operating principles of the android system, so that you can become an architect on the android side.

1. Master Java advanced features, such as JUC, thread pool, NIO\BIO, etc.; master the knowledge of jvm virtual machine, such as memory model, GC principle, class loading mechanism, thread model, etc.
2. Have an in-depth understanding of the android operating environment, understand the android sandbox mechanism, grasp the principles of AIDL and Binder communication, and understand the principles of app and activity startup.
3. Grasp the principle of hot repair and the advantages and disadvantages of major manufacturers' solutions.
4. Have a deep understanding of android event distribution, focusing on the touch event mechanism.
5. In-depth understanding of android drawing principles, understanding of VSYNC and surface mechanisms and window principles.
6. In-depth understanding of android animation principles, including tween animation and attribute animation.
7. Have a basic understanding of android security mechanism and understand android security principles.
8. Deeply understand the idea of ​​design paradigm on the end, such as mvc\mvp\mvvm\clean-arch, etc.
9. Understand the evolution of architecture, have a good idea of ​​layering and splitting, master modularization, plug-in, dynamic deployment, etc.
10. Be sensitive to new technologies, understand the dynamic features of the next-generation architecture, etc.

At this point, you are already well-versed in the development of the android terminal, able to face all kinds of situations, and reach the realm of unchanging color before the landslide. If you want to move on, you need to break through the technology stack and consider issues from a higher architectural level.

Senior

At the senior level, the technology stack is no longer an obstacle. Able to look at problems from a higher level, understand the design of the entire system, and exist as a system architect.

1. Understand the ideas of microservices and SOA, and have a certain understanding of back-end development.
2. Understand the front-end R&D tools and ideas, and know R&D frameworks such as vue react.
3. In-depth understanding of cross-terminal technologies, such as phonegap, weex/RN flutter, small program quick application, etc.

to sum up:

I hope you can compare the above knowledge map to verify each other's deficiencies and make up for omissions, and keep moving forward on the road of technology. Any questions and suggestions are welcome to discuss together.

Android architect road

In the above, we discussed the hard technical indicators of becoming a system architect. But becoming a qualified architect requires not only proficiency in technology, but also more soft power to discuss things inside and outside the code.

Before talking about soft power, let's discuss the responsibilities of architects. Personally understand that the architects in the team not only write code, design and optimize the architecture, but also need to report technical planning to the boss, preach to the team, create a technical atmosphere, improve the overall technical level of the team, build the technical influence of the team, and be responsible for recruiting more people People join the team and so on.

Therefore, a qualified architect needs at least the following three capabilities:

Observation

To be a good architect, one must have meticulous observation skills and be good at discovering problems in code, points that can be optimized, and future opportunities. Most development students are often busy developing various requirements, and don't pay much attention to the technical architecture. The code architecture often slowly corrupts in the iteration of requirements.

In many cases, we are like frogs in warm water, and we don't feel the problems. So the role of architect is needed to look at the architecture from an independent perspective and find problems in the code. Which requirements are optimized, which base libraries can be upgraded, where performance problems exist, and which areas restrict R&D efficiency. The independent perspective of the architect does not mean that you do not need to understand the business. On the contrary, the architect is the R&D that needs to be close to the business, and understand the ins and outs of the business and future development plans, and formulate an architecture that meets business development.

It is also necessary to remain sensitive to technology, understand the development of frontier technologies in the community, capture opportunities from them, and implement them in research and development to maintain the advanced nature of the team’s technology.

Abstract summary ability

Not all problems need to be solved, not all problems need to be solved now.

Some people often jokingly claim that the architect is a PPT engineer, and PPT must be an indispensable ability for the architect. What is behind it is the architect's painstaking thinking. If an engineer only sees one problem after another and focuses only on one point, then it will never be possible to grow into an architect.

A true architect can observe and analyze problems from the overall system level, abstract and summarize, and output a ppt . Look at the problem from a higher and farther level, then break down the problem layer by layer, and deal with the problem in a rhythmic manner. Report the value of the technical team to the top, synchronize the future development to the bottom, publicize the technical achievements externally, and create a sense of technical accomplishment internally.

Communication skills

The impression that our programmers give to the outside world is often introverted and reticent. In fact, programmers are the most boring group I have ever seen:) Why do programmers leave this impression on others?

Probably because programmers are best at dealing with machines, and machines are the most logical. Logic will inevitably return specific outputs for specific inputs, giving people a deterministic experience. When dealing with people, you need to consider various factors, such as occasions, emotions, positions, gender, and even race politics. There will be various unexpected situations.

The coding is only a small part of the work, and the other parts need to be completed in collaboration with various teams. PK needs with the business side, communicate ideas with the boss, communicate with the team about the implementation strategy, communicate with the fraternal departments, communicate with the customers, etc. Good communication skills are the key factor to ensure that the architecture is recognized and can be implemented. Effective communication with team members, answering questions for everyone, and discussing technical issues together are also a good way to ensure that the architect is integrated into the team.

to sum up:

The above are just some aspects that I can think of for the time being at my current level. Compared with hard power, soft power usually appears more illusory. Only by constantly summing up, thinking more, communicating more, and exercising more can we effectively improve soft power.

At last

Needless to say, I believe everyone has a consensus: no matter what the industry, the most powerful person is definitely the person at the end of the pyramid. Therefore, if you want to be a great programmer, you must make yourself stand taller. Becoming a technical expert is not a matter of overnight. It requires time and technology accumulation.

Regarding this point, when I established the Android direction at that time, I had already begun to sort out my growth path, including how to systematically learn the technology, which was listed in great detail.

The first is the super detailed Android development learning mind map , because the picture is too big, so I only put the content of the secondary directory, more detailed, you can privately message me to get the WeChat QR code to view .

Next, we need to sort out knowledge and improve our reserves! (Android Mobile Architect Seven Topic Learning Resources)

  • Essential skills for architects: in-depth Java generics + annotations in simple language + concurrent programming + data transmission and serialization + Java virtual machine principle + reflection and class loading + dynamic proxy + efficient IO

  • Android advanced UI and FrameWork source code: advanced UI promotion + Framework kernel analysis + Android component kernel + data persistence

  • 360° overall performance tuning: design ideas and code quality optimization + program performance optimization + development efficiency optimization

  • Interpretation of open source framework design ideas: hot repair design + plug-in framework interpretation + component framework design + image loading framework + network access framework design + RXJava responsive programming framework design + IOC architecture design + Android architecture component Jetpack

  • NDK module development: NDK basic knowledge system + underlying image processing + audio and video development

  • WeChat Mini Program: Mini Program Introduction + UI Development + API Operation + WeChat Docking

  • Hybrid development and Flutter: Html5 project combat + Flutter advanced

After the knowledge is sorted out, it is necessary to check and fill in the vacancies. Therefore, for these knowledge points, I have prepared a lot of e-books and notes on hand. These notes provide a perfect summary of each knowledge point.

Then learn systematically through source code

As long as it is a programmer, whether it is Java or Android, if you do not read the source code and only look at the API documentation, it will just stay on the skin, which is not good for the establishment and completeness of our knowledge system and the improvement of actual combat technology.

The one who can really exercise the ability is to read the source code directly, not only reading the source code of major systems, but also including various excellent open source libraries.

"486 pages of super comprehensive Android development related source code refined analysis"

Prepare for the interview questions of the big factory to increase the passing rate of the big factory

After half a year, I compiled the most comprehensive Android interview question analysis on the market.

1. You can directly browse the required knowledge points through the catalog index to check the missing points.
2. The number of five-pointed stars indicates the frequency of interviews, and represents an important recommendation index

"379-page Android Development Interview Collection"

The above content  has been included in the open source project: [ github ] , you can get it by yourself.

Guess you like

Origin blog.csdn.net/weixin_44339238/article/details/112385034