Share how I became an architect step by step in my 8 years in Ali

foreword

Becoming a good architect is the staged goal of most junior and intermediate engineers. Excellent architects often have seven core capabilities: programming capabilities, debugging capabilities, compilation and deployment capabilities, performance optimization capabilities, business architecture capabilities, online operation and maintenance capabilities, project management capabilities, and planning capabilities.

The relationship between these abilities is roughly as follows. Programming ability, debugging ability, and compiling and deploying ability belong to the most basic ability. Without mastering these three capabilities, it is difficult to achieve performance optimization capabilities and business architecture capabilities. Only with certain performance optimization capabilities and business architecture capabilities can you perform well in online operation and maintenance capabilities and project management capabilities. Team management ability is the highest ability, and it is more dependent on project management ability.

Share how I became an architect step by step in my 8 years in Ali

basic knowledge

1. Learn to analyze source code

Programmers work with code every day. After years of basic education and vocational training, most programmers "write" code, or at least copy and modify code. However, there are not many people who can read code. There are very few people who can read code and really understand the source code of some large projects. This kind of weirdness really has to be investigated, no wonder the group of programmers itself - it is caused by two reasons:

  • All of our education and training emphasizes how to code, not how to read code

  • Most work scenarios are one radish and one pit. We only need to understand a part of a system to work. Reading irrelevant code seems useless.

Read the source code and ask three questions: "Why does it have such an architecture", "What does it look like", "How does it work". 

So how do Ali programmers read code?

Share how I became an architect step by step in my 8 years in Ali

2. Distributed architecture features and design concepts

The first thing to note is that distributed systems is a complex and broad field of study, and taking one or two online courses or reading a book or two may not cover it all. Since this article is a guide for beginners to get started, I personally think that it may be more helpful to introduce the whole picture of the current distributed system field for beginners than to directly recommend papers and courses. When beginners have established a large picture in this field, they can selectively go deep into different fields for further study according to their own interests.

Share how I became an architect step by step in my 8 years in Ali

3. Why are microservices so popular?

To learn about microservices, first, we need to understand why microservices are used.

  • Code difficult to understand?

  • Construction and deployment take a long time, difficult to locate problems, and development efficiency is low?

  • A single unit can only expand horizontally as a whole, but cannot expand vertically by modules?

  • Could a bug cause the entire app to crash?

  • Limited by the technology stack, team members use the same framework and language?

So how to solve the insufficiency of the monolith? By migrating to the microservice architecture, let's take a look at what a microservice is.

Microservice architecture: split a single application into multiple small services with high cohesion and low coupling, each small service runs in an independent process, developed and maintained by different teams, and uses a lightweight communication mechanism between services, which is independent and automatic Deployment can be in different languages ​​and storage.

Monolithic architecture The entire team maintains and develops a large project and a single library. In the microservice architecture, user requests are routed to downstream services through API Gateway, and services communicate with each other through lightweight communication protocols. Services discover each other through the registry. Each service has a dedicated development and maintenance team, and each service corresponds to an independent database. The service is independently developed, deployed and launched independently.

Next, we summarize the advantages of microservices.

  • Easy to develop and maintain

  • Microservices are relatively small and easy to understand

  • Short startup time and high development efficiency

  • Standalone deployment

  • Modification of one microservice does not require coordination with other services

  • Strong scalability

  • Each service can be scaled horizontally and vertically

  • Each service can be independently scaled according to hardware resource requirements

  • match the organizational structure

  • Microservices architecture can better match architecture and organization

  • Each team is responsible for certain services independently, resulting in higher productivity

  • technological heterogeneity

  • Use the technology best suited for the service

  • Reduce the cost of trying new technologies

Let's send the learning structure diagram below.

Share how I became an architect step by step in my 8 years in Ali

If you feel that you want to improve yourself and learn the knowledge in the article, here is a place to recommend a free public class, you can join the group: 433540541, find the group owner to obtain the class qualification, this is a free course, you can be polite when looking for the group leader a little.

4. Should programmers learn JVM or not?

There are always people asking if this thing doesn't seem to work, so it's a question of whether to learn it.

Then there are always people who worry about doing things that are repeated and not improved all day long.

If you are only willing to be a mediocre Java coder in your life, then there is no need for you to learn JVM-related knowledge. The benefits of learning JVM for a Java programmer can be summarized as follows:

  • 1. You can understand why Java was originally called an interpreted language, and then why it was called a language that coexists with interpretation and compilation (understanding the interpreter and just-in-time compiler in the JVM can answer this question);

  • 2. You can understand the difference between dynamic compilation and static compilation, and what are the benefits of dynamic compilation over static compilation (JVM JIT);

  • 3. You can use some tools, such as jmap, jvisualvm, jstat, jconsole and other tools to help you observe the heap layout of Java applications at runtime, so you can improve the performance of Java applications by adjusting JVM-related parameters;

  • 4. You can clearly know how the Java program is executed;

  • 5. You can understand why high-level languages ​​such as Java have the characteristics of strong portability.

In fact, this question is equivalent to "Why do C/C++ programmers need to learn architecture and compilation principles?"

Not much to say, attach the learning system diagram

Share how I became an architect step by step in my 8 years in Ali

5. Engineering topics that we ignore

The segmentation of the IT industry is not a matter of one or two days. The integration of technology is not a shameful thing, but another valuable capability. It's not like some people describe it as if you wholesale a few CPUs and get Huaqiangbei to convert your computer into a supercomputer.

So why do we often overlook the value of engineering? The main reason, perhaps, is that engineering itself is too far away from us. The higher the universality of an industry's engineering, the more mature the development of the industry is: the subdivision of the industrial chain, the refinement of the division of labor, and the emergence of efficient working methods such as globalized R&D and production. The maturity of the industry also often represents a significant oligopoly.

In the IT industry, oligarchy means fewer startups—no one has to tell stories with big press conferences, no one has to advertise how much money they have raised.

The education of this generation of Chinese since childhood is not comparable to that of STEAM in Europe and the United States, but emphasizes academics and light craftsmanship. We tend to equate engineering with excess capacity. Strong capital and technical thresholds cast a mysterious veil on these industries, making it difficult for ordinary people to truly understand the complexity of the technology and craftsmanship, and even more difficult to understand the value. But it is precisely because of China's engineering capabilities that we have the opportunity to reach the first echelon of the AI ​​era, not just academic research capabilities.

Another reason may be that we are born with a "rebellious mind". Industries with high technical thresholds, such as supercomputers and mobile phone chips, are often backed by large enterprises and state-owned scientific research institutions. When the object of judgment is them, we seem to be more willing to believe in dog-blooded business stories and conspiracy theories: for example, scientific research funds are eaten and drunk by professors; supercomputers are satellites. In fact, the United States and Japan do not care at all; the technology of XX companies They are all bought from startups and have no technology other than making money from users...

The reason for this kind of "rebelliousness" is too profound. All we can do is to hold down our hand running towards the keyboard when this "habitual thinking" appears, turn expressing desire into curiosity, and fulfill our obligation to understand. , and then exercise their right to criticize.

Attach a mind map

Share how I became an architect step by step in my 8 years in Ali

6. Without high concurrency experience, what should I do if I want to join a big company?

What if you don’t have a reliable company and can’t get in touch with high-concurrency business scenarios? You always solve small problems, and your technology may not improve much after 10 years of work.

Many programmers often come to me and say that without experience, there is no reliable company, and without a reliable company, there is no experience. I have read countless books, and have done countless experiments myself, desperately trying to find a reliable company. In-depth, but it feels so difficult, it's an endless loop

Friends of the readership group are more concerned about high concurrency. The reason is very simple. If you want to go to a large company like BAT, you must have high concurrency experience. Today, the knowledge of high concurrency is popularized, and I hope everyone has a correct understanding of high concurrency.

Share how I became an architect step by step in my 8 years in Ali

7. Learning a thousand times is not as good as a successful project

One of the most common mistakes we make in the process of learning is: watching more and doing less. Especially for the overall development of some projects, we have fewer opportunities to contact.

A complete development is the best learning. It allows you to have a complete understanding of the entire development process, and the knowledge will be greatly consolidated. More importantly, you will learn how to apply theoretical knowledge to practical development.

So no matter the size of the project, you must start to develop and learn.

I believe that many programmers will have some in the actual project, but what do we need to learn?

It depends on whether you want to be an architect or not, why 98% of programmers work for 10 years and are just a developer all their lives. Programmers should think about this question, do I need to improve.

In my opinion, the most important thing to learn project practice is to learn project management. As a programmer, you should learn some project management.

  1. Everything is a "project"

  2. Two types of properties of the project (complex logic, huge amount of information)

  3. The human brain is good at thinking, not memory

  4. Become a "one-sided" person

Being alone is a very sexy word. Whether you have it or not, the corresponding workplace value, has a world of difference.

All bosses like employees who are "in charge of themselves", because this is the most trouble-free and the best way to settle accounts: give you a resource, give you a title, give you a goal, and then you give me a world.

When you can be independently responsible for a bunch of things and get them done one by one, you will have a large workplace premium-correspondingly, the return on income is far from being comparable to "technical screws".

If you are aggressive, you will gradually: lead a group, a department, a family, even a city... And the starting point of all this is to do a project independently and completely: you have no one to rely on, you need to Take responsibility for things big and small, and you're responsible for the end result.

In other words, "project management" is a meta-capacity that "stands alone". During this process, your consciousness will become clearer, your methodology will become more mature, your confidence will become more abundant, and the project will become bigger and bigger. Until one day, you really have a frontier official who controls one side.

This is the ultimate meaning of our learning "project combat".

Share how I became an architect step by step in my 8 years in Ali

Maybe as a programmer, you want to improve yourself, but you can't find a breakthrough, and no one takes you in the company. Or maybe you have been working for 6 years, but you are still very confused, you still do not understand a lot of knowledge, and you have not met your desired position and salary. Here is a place to recommend a free public class. The basic knowledge points of architects mentioned above have information. You can join the group: 433540541. Find the group owner to obtain the class qualification. This is a free course. You can be polite when looking for the group leader. a little.

At this point, you may think that the article is over. After learning these, you can go to a large BAT company to be an architect with an annual salary of 50W+?

No, you are wrong, these are the most basic knowledge. To become an architect must be a cumulative process, and so many programmers are only a developer in their entire life, and they will be fired by the company when they get old.

These are also the knowledge that architects must know.

programming ability

For engineers, programming is the most basic ability and a must-have skill. Its essence is a translation capability that translates business requirements into a language that machines can understand.

There are many books to improve programming skills. Proficiency in object orientation and design patterns is the foundation of efficient programming. Junior engineers should write more code and read more code. Looking for a master to do Code Review is also a shortcut to improve your programming level.

Compile and deploy capabilities

Compiling and deploying the running program online is the last link of the system online. With the popularization of SOA architecture and the increase of business complexity, most systems are only a part of a complete business. Therefore, local compilation and operation cannot completely simulate the online operation of the system. In order to quickly verify the correctness of the written program, compiling and deploying it online becomes a necessary link. Therefore, the ability to compile and deploy is a must-have skill.

Getting the many intertwined subsystems up and running can be a challenge. Thanks to the popularity of SOA architecture and the development of a large number of compilation and deployment tools, the threshold for compilation and deployment has been greatly reduced. Companies that develop based on the application layer have very few "compiler engineers". But for junior engineers, compiling and deploying is still not an easy task.

performance optimization capability

An important metric for measuring the success of a system is usage. As usage increases and business complexity increases, most systems eventually experience performance issues. The performance optimization capability is a comprehensive capability. because:

  • There are many factors affecting system performance, including: data structure, operating system, virtual machine, CPU, storage, network, etc. To tune system performance, architects need to master all relevant techniques.

  • Mastering performance optimization means having a deep understanding of the nature of availability, reliability, consistency, maintainability, scalability, and more.

  • Performance optimization is strongly coupled with business, and the final approach is often the result of compromise. Therefore, performance optimization requires a deep understanding of the art of compromise.

It can be said that the ability to optimize performance is a sign that the various skills of engineers have begun to converge in the process of growing up. In this regard, refer to the previous blog post "Summary of Common Performance Optimization Strategies". There are many books related to performance optimization on the market, you can refer to. It is also a good way to improve by reading more documents and codes about performance optimization in open source frameworks. Solving online performance problems by hand is also the key to improving performance optimization capabilities. If you have the opportunity, learning from experts and analyzing performance optimization solution cases (our technical blog has also published many articles in this regard before) is also a means to quickly improve performance optimization capabilities.

Debug capability

The program code is the static form of the system, and the purpose of debugging is to verify and optimize the system by viewing the runtime state of the program. Essentially, engineers can continue to strengthen their ability to predict the running state of static code through continuous debugging. Therefore, debugging ability is also a key means for engineers to improve their programming ability. There was a legend a long time ago: "How strong is the debugging ability, how strong is the programming ability." However, many editors are now very powerful, and the threshold for debugging ability has been greatly lowered.

The ability to debug is the key to whether the project can be submitted on time and with high quality. Even for a slightly complex project, most engineers cannot complete it right at the first time. Large projects are optimized and corrected through constant debugging. So debugging ability is an indispensable ability.

Writing more programs, solving bugs, and consulting more experts are important means to improve debugging capabilities.

Online operation and maintenance capabilities

If the performance optimization ability reflects the static thinking ability of the architect, the online operation and maintenance ability tests the dynamic response ability. The harsh reality is that no matter how perfect a program is, bugs will always exist. At the same time, with higher positions and greater responsibilities, many architects are responsible for very important online systems. For online failures, if they cannot be prevented and resolved quickly, the losses may be unimaginable. Therefore, online operation and maintenance capabilities are an essential skill for excellent architects.

In order to quickly deal with online faults, standardized monitoring, reporting, upgrading, and basic response mechanisms are of course very important. Rapid localization, mitigation, and resolution of associated symptoms through the observed phenomena are also critical. This requires the architect to have a comprehensive understanding of the business and technology of the faulty system. An architect who fixes a line glitch is like a driver in a race F1. Racers must understand themselves, the car, opponents, companions, weather, venue, etc., make quick decisions, and constantly adjust. Architects must understand all technical details, business details, processing specifications, partners and many other factors, make quick decisions and adjust quickly.

Online operation and maintenance is essentially a reinforcement learning process. Many capabilities can be accomplished by reading books and checking materials, but online operation and maintenance capabilities often require a lot of practice to improve.

Business Architecture Capability

It's not uncommon for engineers to complain about product managers, and the main reason for the most complaints comes from frequent changes in requirements. There are two main sources of demand change: the first reason is market change or strategic adjustment, and the second reason is pseudo demand. For the first reason, both engineers and product managers have no choice but to accept it. A good architect should have the ability to reduce the probability of requirement changes caused by the second reason.

There are two reasons for the generation of false demand:

The first reason is demand transfer deformation. From the perspective of information theory, any communication is a process of encoding and decoding. A typical requirement needs to go through at least three encoding and decoding processes from the demander to the product manager and finally to the development engineer. Every time information is transmitted, there is some loss and some noise, which leads to the fact that sometimes the developed products do not meet the demand at all. In addition, the demand side and product manager have relatively weak control in demand feasibility, system reliability, and development cost control, which will also lead to demand deformation.

The second reason is that the demand side has not thought about its own needs at all.

A good architect should have the ability to distinguish between genuine and fake requirements. It should take time to understand the real business scenarios of customers, have strong business abstraction ability, and understand the real needs of customers. The real implementer of the system is the engineer. After clarifying the real needs of the customer, a smart architect should have the ability to accurately judge the project's requirements for feasibility, reliability, availability, etc., and be cost-conscious. Finally, because of the tightly coupled relationship between requirements and online systems, mastering the details of online systems is also the key to a successful business architecture. As the level increases, the requirements faced by engineers will become more and more abstract. To undertake abstract requirements and provide abstract architecture is the only way for architects to achieve excellence.

There are some books on the market on how to become an architect that you can refer to. However, to improve the architectural ability, practice may be a more important way. Business architects should focus on customer pain points rather than PRD documents, and should focus deeply on real business. Mastering the numerous technical and business details of existing systems is also a must for business architects.

Project management ability

As a product of the industrial age, division of labor and cooperation are integrated into the genes of Internet projects. Architects also need to be responsible for several major projects in order to make a name for themselves. To manage a project as an architect, business architecture capability is of course a must-have skill. In addition, awareness of personnel management and cost control is also very important.

Project management also means having a big heart. Major projects involve many variable factors such as technical research, personnel changes, and demand changes. In the face of various changes, it is necessary to have a strong ability to withstand pressure to ensure the smooth achievement of goals.

Aspects to pay attention to in people management include: knowing people and making good use of them, optimizing relationships, simplifying communication, and sticking to the truth.

  • Knowing people and making good use of them means that architects need to understand the hard skills and soft qualities of each participant. At the same time, pay attention to the performance of team members in the project process and assign them according to their abilities.

  • Optimizing the relationship means managing the emotions of the team. After all, the core of the project is the team, and the team with morale can effectively achieve the goal.

  • Simplified communication means quick decisions, compromises when it’s time to compromise, and accountability.

  • Holding on to the truth means standing up to pressure and never going backwards on matters of principle.

Cost control means refined management of projects, and the following principles need to be followed:

  • Start with the end in mind and identify milestones. In order to achieve goals, all plans must be made with the end in mind. Breaking down large projects into smaller phases and controlling milestones in each phase can greatly reduce the risk of project failure.

  • Control the critical path and critical projects. According to the requirements of critical path management theory (CPM), architects need to determine the critical path of each sub-project and determine its earliest and latest start time. At the same time, architects need to pay attention to those key nodes that may cause the overall delay of the project, and focus on breaking them.

  • Control the tension of team members. Larger projects are longer in duration and include different types of work. Project implementation is a dynamic process of constant change. During this process, not the entire cycle is tense, and not all types of work are equally busy. A good architect must have the ability to read the overall project carefully and to react quickly and adjust in real time. This not only greatly reduces project costs, but also improves output quality and team satisfaction. Generally speaking, "tightening before and then loosening" is an important principle of project management.

There are many books on project management. However, improving business architecture capabilities is equally important. Actively participating in big projects and observing the way others are managing projects is also a very important means of improvement.

Team management ability

An engineer who doesn't want to be a CTO is not a good architect. Going to technical management should be a mainstream career plan for engineers. A core capability of team management is planning capability, which includes project planning and personnel planning. Good planning requires the following principles:

  • Planning is a game of interests. A good plan is worthy of the boss on the top, worthy of yourself in the middle, and worthy of the team below. Finding a balance between the three stakeholders and achieving a win-win situation for all parties will test the manager's wisdom and ability to make fine adjustments.

  • Any plan is better than no plan. A team without a plan is a fly without a head and is not in everyone's interest.

  • Planning is not bookishness. The market is changing, the team is changing, and planning should not remain the same.

  • Customer first is the starting point of project planning.

  • As far as personnel planning is concerned, planning needs to consider the ability, performance, growth and other factors of team members.

The article has come to the end here. I hope it can help friends who are still confused. Finally, I wish everyone an early annual salary of 50W and become an architect. Welcome to leave a message and discuss with the editor.

Guess you like

Origin http://43.154.161.224:23101/article/api/json?id=324572110&siteId=291194637