It takes about 5 minutes to finish the article
Hi, I’m Shixin.
In a twinkling of an eye, I have been engaged in Android development for more than six years, and have gained a better understanding of the value of Android development and even software development every year. The direction of the future, but also from just entered the line of confusion to now gradually clear. I think it’s time to look back and forward.
This article will first review some of the key points I’ve made since I started, then talk about how I’ve changed my understanding of software development over the years, and finally share some plans for the future.
review
It is so easy to get lost in the triviality of life that we always need to remember where we came from in order to know where we are going.
Some of the key nodes in the line so far
2014-2015: Started the journey of Android development
Speak of why do Android development, I have feeling very much, almost “go astray” 😄.
When I was in college, I joined the XD Jinshan Club. There are many directions in the club: back end, front end, Android, Windows Phone, etc.
Since I was using Samsung i917 and WindowsPhone, I chose WinPhone.
At that time, iOS, Android, WinPhone and Symbian were fighting each other. I liked the tile-like design of WinPhone very much, and its smoothness and high pixel made me think it might dominate the mobile market.
As a result, less than 2 months later, my WinPhone accidentally flooded! I was very sad at that time. On the one hand, I felt sad for the broken phone, and on the other hand, I felt sorry that I could not continue to develop WinPhone. At that time, it was too expensive for me to change to a WinPhone, so I had to change to a cheaper Android, so I turned to Learn Android development.
As we all know, WindowsPhone lacks a good development ecology and supports few applications, so there are fewer users. Fewer users lead to fewer developers, a vicious circle, and now the market share is pitiful.
Looking back on it now, I still have deep feelings about it. Some things seemed bad at that time, but it may not be so if we look at them with a long time line.
Then there was another decision that now seems very important: to start a blog about what I had learned.
When I was developing a project, I often had to search for solutions on the Internet, but as I searched more and more, I felt that I couldn’t always take, so I could try writing. So I registered my account in CSDN and published my first original article in October 2014.
Later, I would try my best to translate what I learned from work into a way that others could understand and write it in the podcast. From this humble beginning, I gradually developed the habit of timely precipitation and sharing after solving problems, benefiting a lot.
2015-2017: Understood the whole process of project iteration
When LEARNING Android development, I first read a book titled “Android from Entry to Mastery” by Tomorrow Technology, and then watched some videos of Xiaonei, which enabled me to make some simple applications gradually. The WYSIWYG aspect of Android development allows me to get positive feedback very quickly. Later, I went to participate in some local competitions and won some rankings, which gradually strengthened my confidence in this industry.
In 2015, I happened to attend a job fair of a company. During the interview, the interviewer asked some simple questions about Java, Android and algorithm. One of the most impressive is the use of the four components and ListView. At a time when the mobile Internet market was booming, recruitment requirements were so low. So that now many old Android recall at the beginning, are very feeling: “at the beginning will be able to find a job ListView, now are eight essay” ha ha.
After my internship in the company, I felt a lot. Before, I wrote some simple functions by myself without developing or releasing specifications, engineering structure design, system design, or considering whether there was any problem in performance. The real development of a commercial project, let me find myself too many deficiencies.
So in work done at the same time, I observe and record the project each iteration process, at the same time their technical point do leak fill a vacancy, output some Java source code analysis, Android advanced, design patterns, and since that time, formed the habit of checking regularly, every time I want to review the past, will take a look at the growth of my column.
2017-2020: Improve the architecture ability and work consciousness of complex projects
In the first project, I basically mastered the process of developing an Android application from 0 to 1, but my knowledge of android project architecture was still superficial and I did not have enough practice.
In 2017, I started the Ximalaya Live broadcast project. Since Ximalaya had accumulated many years of technology at that time and its business was relatively complex, I did a lot of work in architecture design, compilation acceleration and rapid iteration, which made me feast my eyes.
At the same time, the live broadcast business itself is also relatively complex. It integrates IM, push and pull flow and other functions in a page, and also has a large number of message-driven UI refresh operations. To ensure rapid business iteration and better user experience, a lot of efforts are needed.
In order to improve their technology, during this period I learned a lot of internal/external framework source code, through the analysis of the advantages and disadvantages of these frameworks, core mechanism, architecture, hierarchy, design patterns, how to develop a framework for have a basic understanding, also output some articles, such as the Android advanced road: deep understanding of common framework implementation principle “.
With this knowledge, it is much easier to do complex business requirements, infrastructure extraction, internal SDKS, and optimizations.
When developing some requirements or encountering complex problems, I will first think about whether there are similar problems in the source code of these tripartite frameworks or systems, and how they are solved. For example, to develop PK functions, the complexity of this requirement lies in the fact that there are many business processes with many states. At first glance, it seems very complicated, but if you understand the state machine pattern, you will find it very simple. Borrowing design ideas from other libraries helped me solve a lot of problems, which convinced me of the value of learning good framework source code.
In addition to technical improvement, my overall project thinking ability has also improved a lot in these years.
Because OF my outgoing personality, I communicated well with students of various functions, so my leader asked me to be the agile leader of a team of ten people, responsible for following up all aspects of requirement proposal, development, testing, launching and operation to ensure timely delivery and rapid iteration of the project.
At the beginning, I was not used to it. When I was writing code, I was always interrupted by different people, such as product requirement review, test bug feedback, operation feedback of online data problems, etc. I was often called to a meeting just after I had figured out how to write the code and was about to start.
Later, after communicating with leaders, reading some books and sharing, I gradually had a different understanding of writing code and doing things. The code is just an intermediate product. Ultimately, we need to get a product that is valuable to users and generates revenue for the company, and to do that, there is a lot more to it than just the code.
2020-present: Go deep into underlying technology
After entering byte to do basic technology, my eyes were opened again.
Byte has multiple products with hundreds of millions of users, and complex businesses often encounter unexpected problems that require a deep understanding of the entire architecture of The Android system to be able to solve.
The figure above is the android system architecture diagram. Before, I had always stayed at the first and second levels. During this period, I finally gained in-depth practical experience.
For example, to help the business side solve a memory problem, in addition to understanding the way to monitor the memory indicators, we also need to know the tools and basic principles for analyzing the use of different types of memory. Finally, after knowing where the problem is, we need to figure out how to implement systematic tools to reduce learning costs and improve troubleshooting efficiency.
Question driven learning is a great way to learn. Every time I help the business solve a new problem, I get another point in my knowledge base, which makes me really excited. I did not know what to learn to do before Linux programming, Android virtual machine, finally understand the use of scenarios in practical problems, learning efficiency is also a lot higher.
Knowledge of software development
I have talked about my personal experience before, including how I entered the industry, what projects I did and what good practices I had in the process. So let’s talk a little bit about what kind of valuable conclusions I’ve drawn from these specific things.
Mainly talk about the understanding of these two points:
- Different stages of career development
- Value of technology
Different stages of career development
The first point is the understanding of career development. When we work, we should have a clear understanding of what we are doing, which stage it probably belongs to, and how we can do it better.
Based on what I’ve done over the years and what the biggest names in the industry have done, I’ve broken down the career path of software developers into several stages:
- Develop simple projects using a point in a technical direction
- To develop a more complex business or system using multiple points and lines in a technical direction
- Master general knowledge of a certain direction, there are multiple lines of practice, can be recognized and planned from the whole
- Not limited to this direction, can start from the product indicators, provide a full range of technical support business perspective, end-to-end focus on indicators
The first phase is to use a point in a technology direction to fulfill the business requirements. Take Android developers, for example, using the Android SDK to customize the layout and complete the interface functions required by the product. This stage is relatively easy, as long as you can carefully study the official documents or read some books. Take the back-end for example, when I just took over a small project, my daily work was to use Spring and other libraries to develop simple interfaces, which did not involve upstream and downstream communication, database optimization and so on.
In the second phase, you are working on more complex projects that involve multiple points in a technical direction, and you need to be able to connect the dots to come up with a more systematic solution.
Take Android developers, for example, in the custom layout, found that the interface is very slow, to solve this problem, you need to understand the custom View code flow affects the page refresh speed. It’s like going from one point to another. How do you connect them? You need to study the fundamentals of rendering, analyze Caton’s tools, find out what causes caton, and optimize. In this process, we can have an overall understanding of fluency and have a comprehensive analysis idea and solution for related problems, so that we can develop relevant analysis tools or optimization library. If you can reach this level, you are basically a senior engineer, not only doing a module, but also responsible for a specific subdivision direction of the work.
The third stage, master the general knowledge of a certain technical direction, have the practice of multiple lines, be able to connect as the surface, at the same time do medium – and long-term technical planning for the work.
For Android development, I mentioned that you’ve had a lot of practice in terms of fluency by solving the lag problem; Then you find that there is a memory problem, to understand the principle of memory allocation, recycling, memory analysis and optimization tools, so that you have a systematic practice of memory. Add some other tuning lessons, such as startup speed, package size, etc. By connecting these wires together, you get a performance monitoring platform that connects multiple wires into a single surface.
For example, if you find some pain points in the process of project packaging and release, and can do some practical solutions, finally, if you can connect these optimization items to make a unified system, give a complete DevOps plan, improve the efficiency of development, release, operation and maintenance. Can build this system, have more in-depth experience, that can become a “technical expert”.
The next step up is not just doing technology, but thinking more about the business. Technology is ultimately about serving the business. The fourth stage of career development is not limited to a certain technical direction, and can provide technical support for products based on business planning and business indicators.
You should first understand the core indicators of the company’s business. For example, for a short video application, its core indicators are not only the regular daily live and number of users, but also the video playback rate, duration of stay, page penetration, etc. Once you know these metrics, think about what you can do to help your company improve them. Reflect on current projects with business metrics where there is room for improvement.
Once you have this idea and know what you can do, you can make a more comprehensive plan and then bring the leader to discuss the feasibility. You can’t just be one side, you can’t say I’m just an Android developer, and you can find someone else to do the rest. In general, the leader will not give you resources until the value of the project is verified, so the first iteration must be done by yourself, from front to back, making an MVP version, and then the leader will recognize the value of the system, so that you can allocate more resources to do this.
To summarize the understanding of career development: The first stage only do some specific points; The second stage to do multiple points, need to be able to connect points into a line; The third phase involves distilling general knowledge around these lines and then achieving a holistic understanding of the business/technical project; Stage 4 is able to build valuable systems/platforms from business metrics.
Value of technology
After talking about the different stages of career development, let’s talk about the value of technology to the business.
Technology is for business. The value of technology varies depending on the stage of the business:
- When the business goes from 0 to 1, it helps the business quickly determine the mode
- Help businesses scale up quickly when they grow from 1 to 100
- The most outstanding, driving new business development with technological innovation (Google, AWS, Ali Cloud)
Business goes from 0 to 1
When I started working, the business was in deterministic mode. Business trial-and-error, where projects often start from scratch, can be frustrating for programmers.
At this stage, many programmers use the copy-and-paste method. The product manager says to add a new feature, just copy the code and change it slightly.
If that’s the kind of business you’re in, what do you do? What can I do to make the business better if I go back to that time?
I’ve come up with two things: think about how you can make your business less trial-and-error costly while doing business efficiently and with quality.
How do you make business trial and error cheaper? There are probably some ways:
- Provide a reusable framework
- Provide convenient data feedback mechanism
- Learn more about competing products and give some suggestions when products are uncertain
First point: as far as possible abstract similar points, reduce the cost of duplication.
If the product gives you similar requirements every time, you can think about how to abstract these repeated requirements into some reusable logic, build a basic framework, and then use the framework directly the next time you develop, rather than starting from scratch every time. At work, I often ask myself “what I’m doing now is repetitive and what can sink in”.
In terms of Android development, at this stage, we can do a good job in infrastructure construction, provide plug-in, hot repair, dynamic framework, help business quickly release, independent research or third party depends on the company’s financial resources.
If you say that this is too complicated for me to do, then start from a smaller level, such as a function that originally requires multiple interfaces and interfaces, see if you can change the interface parameters to configurable, interface based on the parameters of dynamic generation (i.e. DSL).
Second: provide a convenient data feedback mechanism.
When the product asks for a requirement, you can ask the product what is the reason for the requirement and is there any data to support it? For example, if the product needs a button to be moved, you need to figure out why it needs to be moved, and will it lead to an increase in page open rates? Have this data-driven mindset.
If the company doesn’t have the data to make decisions, you can proactively provide that feedback. For example, develop a buried platform, data monitoring platform. Make the business as data-driven as possible, not as headless as a chicken.
If it is impossible to build such a large system, we can start from what we can do first, such as strategically focusing on data; Do a good job of data buried point; Think about the function of doing, what data is core at present, whether these data are reported, whether the data of different versions are up or down, etc.
Ok, so this is the first stage, where the value of technology to the business is to help the business quickly identify patterns. The second phase is what are the core values of technology when the business is rapidly scaling up?
Business ranges from 1 to 100 hours
When a business is rapidly scaling up, it needs to replicate the current business model in more places and serve more users. At this stage, there are two main things that technology can offer.
- Iterate quickly (in any phase)
- Improve quality (users live in hundreds of millions and ten thousand a day, and the difference between the challenges we need to face is of the same order of magnitude)
Number one: Iterate quickly
Although rapid iteration is a requirement in all phases of the business, going from 1 to 100 is more challenging than going from 0 to 1. In addition to individual speed, it is more important to focus on team speed.
How can the team speed increase? You can refer to the evolution process and reasons of monomer to micro-service at the back end and single warehouse to multi-warehouse at the front end.
This stage mainly has the following problems:
- Multiplayer collaboration code conflicts
- Slow release
- The impact of the problem is great, and it is not good to locate
When it comes to Android projects, it’s hundreds of times more complicated than a couple of people. What we can do is:
- Sink base components, define component specifications, and converge core processes
- Split business modules, design business templates, and maintain iterations separately
- Explore new approaches to business: cross-terminal (RN Flutter KotlinMultiplatform), dynamic, multi-terminal logical consistency (C/C++ Rust)
Second point: improve quality
Compared with tens of thousands of projects, tens of millions or even hundreds of millions of products need to be dealt with more significant quality problems. At this stage, we should not only be satisfied with the implementation of functions, but also be able to write well, but also to understand the underlying principles, in order to deal with such a large volume of business.
When you have a large audience, you get a lot of strange problems. Instead of trying to solve the same problems every day, you need to find some common ground between these problems and then extract it and export tools, solutions and even platforms.
This requires you to hone your skills from questions and think at a higher level about your specific abilities, ideas, and tools.
When solving problems, in addition to the current problem, what we need to do is to deconstruct and classify the problem, abstract out the similarities and differences of different problems, and draw a problem analysis flow chart.
Some people might just know to use Leakcanary, but you can think a little further, for example:
- Define the problem first. What is a leak?
- Leaks are applied without release or created without reclaim
- How to analyze memory leaks?
- Find the create and destroy points
- Save the record when it is created, delete it when it is destroyed, and what is left is leaked
With basic logic, you can apply it to a variety of problems:
- Native memory leak: Make a note of the Native memory allocation and release API
- Image misuse: Make notes in the image creation and release API
- Too many threads: Log in the thread creation and release APIS
When you encounter a new problem, you realize that it is similar to the one you solved before, but you don’t know where. How to do? What is the nature of the old and the new? What are the similar analytical ideas?
The purpose of this thinking exercise is to improve the ability to draw inferences. Large-scale application may be a variety of problems, you need to improve the technology on the one hand, on the other hand, the analysis of the problem of thinking and ability to improve, can not look at a problem is a problem, to see a problem, think of a problem.
Outlook (Later planning)
In terms of technology, we have achieved specialization and multi-capabilities, and in terms of soft power, we have continued to improve.
Hard power
professional
If you’re an Android developer, you’d better be good at niche areas like audio and video, cross-terminal, dynamic, and performance optimization.
I currently mainly do optimization, the need to continue to add knowledge:
- Principles of the Linux Kernel
- Principles of Android VMS
- Project from the development, compilation, release, data analysis of each process efficiency improvement
pluripotent
The fourth stage of career development was mentioned earlier:
Not limited to this direction, from the product indicators, to provide a full range of technical support
I hope to have the ability to independently complete a system from front to back.
Current experience:
- Develop desktop software using TypeScript + React + Electron
- Develop simple internal systems using SpringMVC
The following points need to be strengthened:
- Proficient in front-end JS, packaging, optimization and other knowledge
- Backend technology reaches intermediate level
Here are some things to look for in the long run:
- Flutter updates frequently, and some attempts have worked well. One set of code runs multiple times, saving development costs
- Master DevOps concepts and practices
Ultimate purpose:
- Ability to independently complete a valuable system
- Ability to improve and optimize the whole process of r&d
Soft power
In addition to technical planning, I also have a lot of soft power to continue to improve, the main thing I want to improve this year is the ability of simultaneous communication.
What is synfrequency dialogue?
Simultaneous conversation is all about changing what you say according to the audience’s role and perspective.
For example, when we report to the leader, you want to talk about a system you do, you should express it from his point of view. He may focus on the overall process, the difficulties of the system, where the bottlenecks are, and what the benefits are. Then you can’t just talk about the details of one module, but think and express at a higher level.
Why promote?
With the increase of working years, the market’s requirements on us are higher and higher, in addition to writing code, the requirements on expression ability are also higher and higher.
At the beginning of your career, you are a performer, as long as you move your ears, eyes and hands more, to achieve the function that others ask you to do.
Later, when you have the opportunity to design a module, you need to use more brain power to think, to redesign the system’s input and output, internal data flow and so on.
Further down the line, you may have the resources to be able to fully articulate your ideas and have others help you implement them. This is actually a rare ability. This year, I plan to improve this ability by sharing more and communicating more with different people, so as to achieve satisfaction.
conclusion
Well, that’s all for this article. That’s my tech review and outlook for the past six years. Thank you for reading ❤️.
The multiple realms of life: see mountains as mountains, see water as water; Mountains are not mountains, and water is not water; See mountains or mountains, see water or water.
I don’t think I’ve reached the third level of software development yet, and I’m sure it won’t be long before different perspectives emerge.
But, afraid of what infinite truth, into an inch of joy!
If give you what inspiration, welcome message exchange, common progress ✋!