I was @48 times a day by Ai Te! The 35-year-old Android programmer is in a situation comparable to the donkey of the production team!

origin

With the rapid development of the Internet and mobile Internet, various application software (apps) have sprung up like mushrooms after a rain shower. Many applications have even become super apps. Some applications with over 100 million active users have become national apps. The rise of these apps is similar to programmers. Groups are inseparable. The fast-growing industry, the aura of Internet giants, the sense of accomplishment brought by national-level applications, and the salary that far exceeds that of ordinary industries, attract a large number of programmers every year.

The competition is becoming more and more fierce. The 35-year-old threshold for programmers has become a hot topic in social media all the year round. Middle-aged anxiety of programmers has become the norm. As programmers, what core capabilities should we build to get us out of? Anxious and staying behind on the long career path?

Today, let’s talk about some insights that I have summed up in my more than ten years of programmer career.

From basic to advanced, I will summarize from three aspects: general ability, professional ability and advanced ability.

Insert picture description here

01 General ability

General competence is a basic competency that all professionals need to possess.
General ability includes learning ability, communication ability and execution ability.

  • Learning ability

In the Internet industry, technologies are changing with each passing day and are constantly being upgraded; 3G and 4G will gradually become popular within 10 years, and 5G will soon be on the horizon, which brings higher and higher IT-related technical requirements. From the programming languages ​​and technical frameworks we use every day, to more complex communication protocols, audio and video encoding and decoding, network data transmission, etc., various technologies are continuously updated and advanced. As a programmer, we will also move between different sub-industries and companies, contact different businesses and products, and quickly learn and understand the logic and essence behind different businesses and products, which is a necessary quality. All of these require at least passing learning ability, continuous learning, grinding skills, and enriching their own skills to adapt to the technological updates and challenges brought about by the rapid changes of the times.

  • Communication skills

As a programmer, most of the time you are dealing with machines, but that does not mean that programmers can be completely isolated from the outside world. Good communication skills can make your work more effective. Many programmers will reject communication with others, and always hope to show and express themselves through code and products made, which may work at some times; but in most work, we still have to communicate and communicate with other people For example, requirements reviews need to communicate with product classmates, bugs need to communicate with testers, and even code needs to make a good technical architecture design and express it through text, graphics or language. Communication first needs to have the willingness to communicate.

Second, we must master communication skills, learn empathy, and avoid unnecessary conflicts. As the post-90s and millennials enter the workplace, society is becoming more tolerant of advocating a diverse and free culture. This brings about a problem that more and more people will go toward self, isolation, and even extremes. The direct manifestation is They often have conflicts in their social and workplace communication with others, and teamwork is becoming more and more difficult. Therefore, mastering good communication skills and learning empathy are also a manifestation of communication skills.

  • Execution

Any team and organization will require everyone to go all out after the goal is clear, execute the established plan without compromise, and complete the task with high quality and efficiency. Therefore, good execution is also a must for programmers in a team. The basic ability of equipment.

The above are the basic abilities that a programmer needs in the workplace. In addition, I think programmers also need to build the following professional capabilities.

02 Professional Ability

Professional ability is the key for programmers to enter the IT industry to engage in software development. The difference in professional abilities also means that different professional heights can be achieved.
Professional capabilities include basic technical capabilities, architecture design capabilities, and project management capabilities.

  • Basic technical skills

Basic technical ability is the basis for a programmer to survive at work. Take a beginner-to-intermediate Android programmer as an example. The basic skills you need to master are:

1. Have sufficient experience in various system versions and machine adaptations.
2. Familiar with UI controls, including self-drawn controls and animations; independently solve daily UI development problems.
3. Have certain performance tuning capabilities and crash handling capabilities
4. Understand the framework and the design behind it, rather than simple API stacking.
5. Proficiency in the Java language (annotation, generics, reflection, container, JVM)
6. Learning ability, analysis and problem-solving ability

  • Architecture design ability

Architecture design ability is the first hurdle that a programmer needs to overcome to break through.

A new problem brought about by the continuous update of technology and framework is that many programmers can complete most of the work by simply copying and pasting in their daily work, so there is also a nickname "CV programmer". Repeated copy and paste makes the programmer's thinking gradually degenerate, unwilling to think, and face the dilemma of being eliminated over time. If you can think about and summarize more in your work, and gradually accumulate your architectural design capabilities, the result may be another situation.

Architecture design capabilities include the simplest design patterns first. When writing code, have you considered effectively organizing the code and refactoring it in accordance with the 23 design models advocated by GoF to make the code easier to read and maintain? These are all manifestations of architecture design capabilities.

Secondly, you need to master the Android hot fix framework, plug-in framework, component framework, image loading framework, network access framework, RxJava responsive programming framework, IOC dependency injection framework, recent architecture component Jetpack and other Android third-party open source framework design ideas and The underlying implementation principle.

The Android system architecture from top to bottom is the application layer (System Apps), application framework layer (Java API Framework), runtime layer (system Native library and Android runtime environment), hardware abstraction layer (HAL), and Linx kernel (Marco). Kernel). Each layer has corresponding processes and system libraries.

Android system architecture

Architecture design capabilities can be continuously subdivided and expanded. For example, with the rise of video screen and live broadcast applications such as Douyin and Kuaishou, how to design video, graphics and image system architectures under super-large traffic, as the era of 5G and AIoT In the coming, how to design a system to support large-scale and ultra-large-scale Internet of Things hardware terminal access and the data it generates, etc. The above architectural design capabilities have technical points that can be studied and excavated in each dimension. If you have time and hope to continue to make breakthroughs, you should go deep into each field and accumulate experience through continuous research and practice until one day you can According to different business, application scenarios, users, etc., design a set of reasonable architecture by yourself.

  • Project management ability

Another item of professional competence is project management competence.

Project management ability is a comprehensive ability.

Many people have misunderstandings about project management ability, thinking it is a very simple ability, or don't think it is a core ability that programmers need to possess. In some large Internet companies, there are also dedicated project managers or PMO-like organizations to promote and complete project management work, but this does not mean that a programmer does not need to master project management capabilities. Project management is something that any organization must do well to complete the product and successfully launch the project. For a programmer, whether he can lead or be responsible for completing the project management work of a medium and large project or completing project-related management work in a certain subdivision of the project is a manifestation of comprehensive ability. In recent years, whether it is Baidu, Kuaishou’s Spring Festival Gala marketing technical support team, or JD’s and Taobao’s annual double eleven technical support team, all are large-scale, cross-team, and cross-regional large-scale projects. In these projects, from From top to bottom, project managers in different fields, different organizations, horizontal and vertical are needed, and these project managers are often grown up by senior programmers and technical experts. They need to have a thorough understanding of the project’s goals and strategic significance, organize the goal alignment, task decomposition and plan implementation of project segmentation, coordinate the various resources of the project to break through various technical bottlenecks and project difficulties, and do a good job of project risks Manage, and at the same time make overall plans and take into account the atmosphere of the project team, form the teamwork of the project team, and ultimately be responsible for the achievement of the project goals.

If you have already possessed and mastered all these professional skills, you can grow from a programmer rookie to a technical expert, and most of the technical problems encountered in your work can be solved by yourself. If you are still not satisfied at this time and want to improve yourself further, you need to cultivate the following advanced abilities.

03 Advanced Ability‍

Advanced ability is a necessary condition for programmers to reach a higher level and break through the ceiling of the workplace.

Advanced capabilities include technical breadth, systematic thinking, team management, organization and coordination, and business understanding.

  • Breadth of technology

Everyone's energy and time are limited. When we have a deep enough understanding of our professional field, we also need to expand our knowledge. As a programmer, in addition to completing architecture design and coding, you will also be exposed to more professional technical fields, such as security, big data, algorithms, and AI. On the one hand, expanding these professional technical fields can promote a deeper understanding of the basic professional skills possessed by programmers, while also gaining new knowledge and breakthrough points in other technical fields.

  • Systematic thinking

After possessing a certain depth and breadth of knowledge, jump out of a single specific technical detail, do systematic thinking and summarization, use field vision and overall perspective, draw inferences from one another, sort out and establish its own technical knowledge system, and form Own problem-solving methodology. When you have the ability to think systematically, technology or knowledge is like a snowball, quickly identify, extract, learn, accumulate, and iteratively, establish a set of constantly updated and iterative technical knowledge system, no matter how the market, business, and technology changes, it can be timely Adapt and even seize the dividends of new technologies to lead the development of new technologies.

  • Team management ability

When a programmer grows to a certain stage, he will inevitably face the possibility of becoming a manager. Some people will become the leader of a group of 3 to 5 people, and some people will lead a team of dozens or even hundreds of people. It is not excluded that students who only want to write programs and refuse to take up management positions, but this does not mean There is no need to pay attention to the improvement of team management capabilities. Everyone is a participant and affected person in team management. Through good team management ability, the value of the team can be brought into play, which can make the programmer's work more meaningful.

The construction of team management capabilities includes the precipitation of management methodology and the implementation of management actions. These two aspects complement each other and promote each other.

The precipitation of management methodology firstly requires leadership training. Leadership should be the guiding ideology of your management team.
Different business organizations will build their own leadership models. In a leadership model that I have learned and practiced, leadership is explained in three dimensions and six areas, and I will share it here.

The main goal of leadership is to organize coordination and use the power of the team to achieve performance results. What aspects should leadership need to focus on?

1. Managers need to understand the company's strategy and direction, and formulate team goals based on the company's strategy and direction. Any organization needs clear direction. After becoming a team manager that year, for your company, you need to understand the company’s long-term goals, which we call the vision, as well as the company’s short-term goals; use the company vision to guide the team’s long-term efforts and follow the company’s short-term goals Decompose and formulate short-term goals for your team to guide the team's work in the next half year, quarter or month. We can use different target management methods such as OKR to manage the team's goals.

2. Good incentive measures need to be done. Incentives can make team members more motivated to work. Short-term incentives can be achieved through rewards, praise or praise in daily work, while long-term incentives also need to be achieved through expected management and work authorization for team members.

3. Need to do a good job of guiding the team members. By providing guidance and assistance to team members' daily coaching, and by setting an example, they can point out the target employee portraits that team members need to learn in the future. Leadership is finally implemented through action plans, not just in slogans and text summaries, which will be explained later.

Leadership is a big topic. Everyone who is interested can go to in-depth research to find and establish a leadership model that suits them.

Second, with the guidance of the leadership model, we also need to do a good job in team talent inventory and echelon building, identify the stars, potentials, backbones and latecomers in the team, and know the team members while passing goals and performance. Promote continuous improvement and progress of team members.

Third, do a good job in team process and mechanism precipitation. For a team to operate efficiently, it needs to rely on reasonable processes and mechanisms. Regarding this point, I have seen a very concise summary: simplify complex things, standardize simple things, streamline standard things, and automate process things. The reason it expounds is to continuously do the precipitation of processes and mechanisms, and ultimately achieve the maximization of efficiency.

Fourth, we need to do a good job in upward management. Understand your superior's expectations for you and your team, know how to seek help through superior coordination resources, and at the same time be able to consider problems from the superior's perspective, and share the worries for the superior.

Finally, establish a distinctive team atmosphere and team culture. A good team is inseparable from a good team atmosphere and team culture. The team culture can also attract and filter like-minded people together and promote the continuous development of the team atmosphere.

With the precipitation of management methodology, it does not necessarily mean that you can manage well. How to influence the team through the implementation of management actions in daily work is more important.

We need to refine management methods and management methods for every environment and every action at work.

For example, annual, quarterly, and monthly goal setting and regular review can enhance the sense of goal and team cohesion of team members. Regular one-one communication, understand the ideas and confusion of team members, and give them counseling and help. Organize the review and summary of the project and demand iteration, find the problems in the demand iteration process, find the points where the process can be optimized, and form a reproducible and reusable methodology. Regular team performance review and team member performance feedback, let everyone know how to improve. Organize team technology sharing, participate in industry technical exchanges, build team and personal technical influence, build team geek culture, and so on.

In the process of implementing management actions, the knowledge gained through practice can enrich management tools and management toolboxes, and then summarize them into a new management methodology to guide the next stage of team management.

  • Organization and coordination capacity

Organization and coordination ability and project management ability have both similarities and differences. The similarity lies in that they both emphasize the importance of teamwork and focus on achieving the set goals through the power of the team. The difference is that the project management ability puts more emphasis on the project, and all work around the project's goals. The organization and coordination ability emphasizes the organization and people. Compared with the project management ability, the organization and coordination ability is a higher level. When you have accumulated a certain amount of organizational and coordination skills, any project or task will no longer be a problem. Organizational coordination ability requires you to understand the organization and its departments and personnel, quickly identify key figures and core goals, establish your own connections within the organization, and enhance your own influence within the organization. Can understand and listen to others well, resonate and empathize. When you need to complete a task, take advantage of your organization and coordination ability, grasp the key points, find the key person, and success will follow.

  • Business understanding

Technology itself does not generate value. Only by applying technology to business and products and solving user needs through products can value be generated. As a programmer who masters technology, thinking about problems from a business perspective, solving business pain points is always the first. Programmers can not only be satisfied with passively fulfilling business needs, but also need to actively understand and think about the business, gain insight into the core and essence of the business, and turn business problems into technical problems. At the beginning of the business, quickly build MVP version products to support business development. When the business enters a stage of rapid development or stability, through continuous abstraction and modularization, a service-oriented and platform-oriented technology system is created to support the scale of business Expansion allows technology to truly play a role in supporting business and even driving business transformation. Finally, a picture is used to summarize the above explanation.

Through my many years of practical experience, it is proved that these core abilities of programmers are intertwined and progressive in work. We use, learn and accumulate these abilities every day. Through continuous summary and review in the work, and acceptance of the experience of projects and products, I believe that everyone can break through themselves and step up to a new level.

Of course, the core competence of programmers will be different in the eyes of different people, just as there are a hundred Hamlet in the eyes of a hundred readers. The important thing is that everyone keeps summarizing at work and finds a circle of competence that suits them.

Android development full stack advanced study notes

The following complete study notes PDF, you can like + comment to support the blogger, click here to pick it up for free !

  • Essential skills for architects

At present, the mainstream language for Android APP development is the Java language. The biggest feature of the Java language is to increase the possibility of software interaction. It can be said that almost all applications on Android phones are written in the Java language.

Knowledge points:
1. In-depth understanding of Java generics
2. Explaining in-depth explanations
3. Concurrent programming
4. Data transmission and serialization
5. Principles of Java virtual machine
6. Efficient IO

Essential skills for architects

  • Interpretation of open source framework for design thinking

With the continuous development of Internet companies, there are more and more modules in product projects, and user experience requirements are getting higher and higher. It is becoming more and more difficult to achieve the purpose of small steps and fast iterations, and the application of plug-in technology is born. If there is no plug-in technology, the applications that integrate a large number of "app" such as Meituan and Taobao may be as big as a few g.

Therefore, today's Android mobile development will not be hot-fixed, plug-inized, or componentized, and more than 80% of the interviews will not pass.

Knowledge points:
1. Hot fix design
2. Plug-in framework design
3. Component framework design
4. Picture loading framework
5. Network access framework design
6. RXJava responsive programming framework design

Interpretation of open source framework for design thinking

  • 360° all-round performance tuning

In the hands of development engineers at different levels, because of the uneven technical level, even if many mobile phones are running with very high software performance, there will still be lag when opening applications.

In addition, with the iteration of product content, the functions become more and more complex, and the UI pages become more and more abundant, which also becomes an obstacle to smooth operation. In summary, the performance optimization of APP has become a comprehensive quality that developers should have, and it is also a guarantee for developers to complete high-quality application works.

1. Design ideas and code quality optimization

2. Program performance optimization

  • Start-up speed and execution efficiency optimization
  • Layout detection and optimization
  • Memory optimization
  • Power consumption optimization
  • Network transmission and data storage optimization
  • APK size optimization

3. Optimization of development efficiency

  • Distributed version control system Git
  • Automated build system Gradle

4. Project actual combat

  • Start speed
  • Fluency
  • The practice of Douyin's APK package size resource optimization
  • Full analysis of Youku's responsive layout technology
  • Network Optimization
  • Revealing the Secret of the Performance Optimization Project on Taobao Double 11
  • Source code dependency analysis of AutoNavi APP full link
  • Sharing of actual combat experience of completely eliminating OOM
  • WeChat Android terminal memory optimization practice

360° all-round performance tuning

  • Android framework architecture

Android framework architecture (advanced UI+FrameWork source code) This piece of knowledge is currently the most users, and we call it the technology of Android from 2013 to 2016.

Android developers are often familiar and unfamiliar with this frequently "used" code because they are used to copying code online: the familiar is dealing with them almost every day, and copying the code every day; the unfamiliar is that although with these codes every day Dealing with codes, but I haven't studied the principles of these codes in depth and the connotations in the depths of the codes.

Key points of this article:
1. Advanced UI promotion
2. Android kernel components
3. Essential IPC for large projects
4. Data persistence and serialization
5. Framework kernel analysis

Android framework architecture

  • NDK module development (audio and video series)

NDK (abbreviation of Native Development Kit) is a software development kit based on a native programming interface that allows you to use C and C++ code in Android applications. The program developed by this tool runs directly locally, not a virtual machine.

In Android, NDK is a collection of a series of tools, mainly used to extend the Android SDK. NDK provides a series of tools to help developers quickly develop C or C++ dynamic libraries, and can automatically package so and Java applications into an apk.

Knowledge points in this article:
1. Introduction to C/C++ developed by NDK
2. JNI module development
3. Linux programming
4. Low-level image processing
5. Audio and video development
6. Machine learning

NDK module development

  • Flutter learning advanced

2019 is undoubtedly a year in which Flutter technology is in full swing.

Every mobile developer is crazy about the features and concepts of "rapid development, expressive and flexible UI, native performance" brought by Flutter, from super apps to independent apps, from pure Flutter to hybrid stacks, developers We are enthusiastic about exploring and applying Flutter technology in different scenarios, and we are also facing a variety of different challenges.

Key points of this article:
1. Overview of Flutter cross-platform development
2. Flutter development environment construction in Windows
3. Writing your first Flutter APP
4. Getting started

with the Flutter Dart language system ...

Flutter learning

  • WeChat applet development

As one of the most popular programming development application scenarios, WeChat applets are very popular in the market, which makes many developers greedy. But for beginners, it's completely at a loss. I don't know what knowledge needs to be learned in the development and production of WeChat applets. Friends in need can refer to this article.

The main points of knowledge in this article:
1. Overview and introduction of
applet 2. UI development of applet
3. API operation
4. Practical combat of shopping mall projects

WeChat applet development

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

Interpretation of Android related source code

Interpretation of part of the Android-related source code

Due to space reasons, if you need a PDF of the above complete study notes, you can click here to pick it up for free !

Guess you like

Origin blog.csdn.net/Androiddddd/article/details/114287879