Abstract: Painstaking experience sharing, architect is more of a process of continuous learning, continuous accumulation, I hope to help friends in the same industry foreword

Becoming a good architect is a phased goal for most junior and middle level engineers. Good architects tend to have seven core competencies: programming, debugging, compilation and deployment, performance optimization, business architecture, online operation and maintenance, project management, and planning.

The relationship between these abilities is roughly shown below. The ability to program, debug, and compile and deploy are among the most basic capabilities. Without mastery of 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 they perform well in online operation and maintenance capabilities and project management capabilities. Team management ability is the highest ability, which is more dependent on project management ability.

Share my basic knowledge of how to become an architect step by step during my 8 years in Ali

1. Learn to analyze source code

Programmers work with code every day. After years of basic education and professional training, most programmers can “write” code, or at least copy and modify code. However, can read the code is not in the majority, can read the code and really understand the source code of some big projects, very few. This strange situation, if it is to be investigated, can be blamed on the programmer community itself — it is caused by two reasons:

All of our education and training focuses on how to write code, not how to read it. Most of the work is done in one place, and we only need to understand parts of a system to get to work. Reading irrelevant code doesn't seem to work, rightCopy the code

Read the source code three ask: “why is there such a architecture”, “what does it look like”, “how does it work”.

So how do Ali programmers read code?

How did I become an architect step by step during my 8 years in Ali

2. Distributed architecture features and design concept

First of all, distributed systems are a complex and broad field of study that may not be covered by a course or two online or a book or two. Since this article is for beginners to get started, I personally feel that it may be more helpful to give beginners an overview of the current field of distributed systems than to directly recommend papers and courses. Once a scholar has established a big Picture in this field, he or she can selectively go into different fields for further study according to his or her interests.

How did I become an architect step by step during my 8 years in Ali

3. Why are microservices so popular?

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

Code hard to understand? Is it time-consuming to build and deploy, difficult to locate problems, and inefficient to develop? A single unit can only be extended horizontally as a whole, not vertically by modules. Can a bug cause an entire application to crash? Constrained by the technology stack, team members using the same framework and language?Copy the code

So how do you solve the singleton problem by moving to a microservice architecture, and let’s look at what microservices are.

Microservice architecture: Single applications are divided into multiple small services with high cohesion and low coupling. Each small service runs in an independent process and is developed and maintained by different teams. Lightweight communication mechanism is adopted between services, independent automatic deployment can be adopted, and different languages and storage can be adopted.

Monomer architecture to the whole team to develop a large maintenance project and a single library, the service architecture, user requests through the API Gateway is routed to the downstream service, with lightweight communication protocol for communication between services, service registry found each other, each service has the development of specialized maintenance team, each corresponding to a separate database service, Services are independently developed, deployed and launched.

Next, we summarize the advantages of microservices.

Easy to develop and maintain Microservices are relatively small, easy to understand and have a short startup time, The development of high efficiency Independent deployment A micro service changes do not need to coordinate other strong scalability Each service can on the horizontal and vertical extensions Each service can meet the requirements of hardware resources, an independent capacity match the organizational structure micro service architecture can better match the architecture and organization Each team is responsible for certain services independently, Achieving higher productivity technology heterogeneity Using the technology best suited to the service reduces the cost of trying new technologiesCopy the code

Below is the learning structure chart

How did I become an architect step by step during my 8 years in Ali

If you want to improve yourself and learn the knowledge in the article, here is a recommended place for free public class, you can add group: 744642380, ask the group owner to obtain the qualification of class, this is a free course, you can be a little bit more careful when looking for the main group.

4. Should programmers learn the JVM at all

There are always people asking this thing doesn’t seem to be useful, so should we learn such questions?

And then there’s always the worry of moving bricks all the time and doing the same thing all the time.

If you want to be a mediocre Java programmer for the rest of your life, there is no need to learn about the JVM. The benefits of learning the JVM for a Java programmer can be summarized as follows:

1. You can see why Java was originally called an interpreted language and why it has since been called an interpreted and compiled language (understanding interpreters and just-in-time compilers in the JVM can answer this question); 2. You understand the difference between dynamic compilation and static compilation, and the benefits of dynamic compilation over static compilation (JVM JIT); 3. You can use jMap, JVisualVM, Jstat, JConsole, etc. to help you observe the heap layout of your Java application at runtime, so that you can adjust JVM parameters to improve the performance of your Java application. 4. You can clearly understand how Java programs are executed. 5. You can understand why Java and other high-level languages have strong portability.Copy the code

This is the equivalent of “Why do C/C++ programmers need to learn architecture and compilation principles?”

Without further ado, attached is the study system diagram

How did I become an architect step by step during my 8 years in Ali

5. Engineering projects we neglected

The fragmentation of the IT industry has been a long time. Integration technology is not a shameful thing, but another valuable ability. It is not as some people described, as if the wholesale of a few CPUS, take Huaqiangbei can modify their computer into a supercomputer.

So why do we so often ignore the value of engineering? The main reason, perhaps, is that engineering itself is so far away. The higher the universality of an industry engineering, the more mature the industry development: industry chain subdivision, division of labor, global RESEARCH and development and production such as efficient work methods began to appear. Industry maturity also often represents a significant oligopolization.

In the IT industry, oligopolization is a sign of fewer startups — no one to tell stories with big press releases and advertise how much funding they’ve raised.

The education of this generation of Chinese is not like that of STEAM in Europe and The United States. We tend to equate engineering with overcapacity. Strong capital and technological barriers create a veil of secrecy around these industries, making it difficult for ordinary people to truly appreciate the complexity of the technologies and processes involved, and even harder to understand their value. But it is because of China’s engineering capabilities that we have the opportunity to move to the first tier of the AI era, not just academic research capabilities.

Another reason may lie in our innate rebelliousness. Large enterprises and state-funded research institutions are often behind industries with high technological thresholds such as supercomputers and mobile phone chips. When judged against them, we seem more likely to believe dodgy business stories and conspiracy theories: that research funding is being eaten and drunk by professors; Make supercomputer is put satellite in fact the United States and Japan do not care at all; The technology of XX enterprise is all bought from start-up companies. There is no technology except to make money from users.

The reason for this “rebellious heart” is so profound that we can only hold down our hands running to the keyboard when this “habitual thinking” appears, turn desire into curiosity, fulfill the obligation of understanding, and then exercise our right to criticize.

Attached is a mind map

How did I become an architect step by step during my 8 years in Ali

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

What if there is no reliable company and no access to high concurrency business scenarios? You always solve small problems, and 10 years of work doesn’t necessarily improve your skills.

Many programmers often come to me and say that there is no reliable company without experience, and there is no reliable company without experience. I read countless books and did countless experiments to try my best to find a reliable company to go deep, but I feel it is so difficult, it is a cycle

Readers of friends are more concerned about high concurrency, the reason is simple, want to go to BAT such a large company, you must have high concurrency experience. Today popularized the knowledge of high concurrency, I hope you have a correct understanding of high concurrency.

How did I become an architect step by step during my 8 years in Ali

Study a thousand times, not as successful as the project actual combat once

One of the most common mistakes we make in the learning process is to see too much and do too little. Especially for the overall development of some projects, we have even less exposure.

A complete development is the best learning. It gives you a complete view of the entire development process and a great consolidation of knowledge. More importantly, you will learn how to apply theoretical knowledge to practical development.

So no matter how big or small a project is, be sure to get your hands dirty and learn.

Project combat I believe many programmers are how much will have, but we have to learn what?

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

In my opinion, the most important thing to learn project actual combat is to learn project management. As a programmer, we should learn project management.

Two attributes of a project (Complex logic, Huge amount of information) The human brain is good at thinking, not memorizingCopy the code

Being alone is a very sexy word. The workplace value of having it or not is vastly different.

All bosses love “do-it-yourself” employees because it is the most effortless and best accounting model: give you a resource, give you a title, give you a goal, and you give me a piece of the world.

When you can take sole responsibility for a whole bunch of things and get them done, there’s a huge workplace premium — and, in turn, a far bigger payback than the technical screws.

If you are aggressive, you will dominate a group, a department, a family, a city… The starting point for all of this is to do a project as a whole: you don’t have anyone to rely on, you’re responsible for everything big and small, and you’re responsible for the end result.

In other words, “project management” is a “do-it-yourself” meta-capability. In the process, your awareness grows clearer, your methodology grows more mature, your confidence grows, and your projects grow bigger. Until one day, you do have a fief who controls one side.

This is the ultimate purpose of studying project practice.

How did I become an architect step by step during my 8 years in Ali

Maybe you want to improve as a programmer, but you can’t find a breakthrough. Or maybe you’ve been working for 6 years, but you still don’t know much about it, and you haven’t met your expectations for a position or salary. In this recommended free open course place, the above mentioned basic knowledge of the architect has information, you can add group: 744642380, ask the group master to obtain the class qualification, this is a free course, you can be polite when looking for the main group.

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

No, you’re wrong. These are the basics. Becoming an architect must be a cumulative process.

These are also things that the architect must know. Programming ability

For engineers, programming is the most basic ability, a necessary skill. It is essentially a translation capability that translates business requirements into a language that machines can understand.

There are many books on improving your programming skills. Mastery of object orientation and design patterns is fundamental to effective programming. Junior engineers should write and read more code. Looking for an expert to do Code Review is also a shortcut to improve your programming skills. Compile and deploy capability

Compiling and deploying the running program online is the last step in bringing the system online. With the popularity of SOA architectures and the increase of business complexity, most systems are just one part of a complete business, so local compilation and running cannot fully simulate the online operation of systems. To quickly verify the correctness of the program, compiling and deploying it online becomes necessary. So the ability to compile and deploy is a required skill.

Getting so many interconnected subsystems up and running is no small challenge. Thanks to the ubiquity of SOA architectures and the proliferation of compile and deploy tools, the barriers to compile and deploy have been lowered. In companies that develop at the application layer, there are very few “compiler engineers” anymore. But compiling and deploying is still no picnic for junior engineers. Performance optimization capability

An important measure of a system’s success is usage. As usage increases and business complexity increases, most systems will eventually encounter performance issues. Performance optimization capability is a comprehensive capability. Because:

Many factors affect system performance, including data structure, operating system, vM, CPU, storage, and network. In order to tune system performance, the architect needs to master all relevant technologies. Mastery of performance tuning means a deep understanding of the nature of availability, reliability, consistency, maintainability, scalability, and more. Performance optimization is strongly coupled to the business, and the ultimate approach is often a compromise. Therefore, performance optimization is about mastering the art of compromise.Copy the code

It can be said that the ability to optimize performance is a sign of the convergence of skills as engineers grow up. See the previous blog post “Summary of Common Performance Tuning Strategies” for this. There are a number of books on performance optimization that you can refer to. Reading the documentation and code in open source frameworks for performance optimization is also a good way to improve. Hands-on solutions to online performance problems are also key to improving performance optimization capabilities. If you have the opportunity, learn from the best and analyze performance optimization solutions (we’ve written a lot about this in the past on our tech blog), which is a great way to quickly improve your performance optimization capabilities. Debug ability

Program code is a static form of the system, and the purpose of debugging is to verify and optimize the system by looking at the runtime state of the program. Essentially, engineers are constantly debugging to improve their ability to predict the state of operation from static code. Therefore, debugging ability is also a key means to improve the programming ability of engineers. Long ago, there was a legend: “As good as debugging, so good as programming.” But now that many editors are so powerful, the bar for debugging capability has been lowered.

Debugging capability is the key to timely and high-quality project delivery. Most engineers can’t complete a project with even a slight degree of complexity all at once. Large projects are optimized and corrected through continuous debugging. So the ability to debug is an indispensable ability.

Writing more programs, solving bugs and consulting experts is an important means to improve debugging ability. Online operation and maintenance capability

If the performance optimization ability reflects the static thinking ability of the architect, the online operation and maintenance ability tests the dynamic reaction ability. The harsh reality is that no matter how perfect your program is, there will always be bugs. At the same time, the higher the position, the greater the responsibility, many architects are responsible for very important online systems. Online failures can be catastrophic if they are not prevented and resolved quickly, so online operations are a must for a good architect.

Standardized monitoring, reporting, escalation, and basic coping mechanisms are of course important in order to quickly deal with online failures. It is also critical to quickly locate, alleviate, and resolve the symptoms observed. This requires the architect to have a thorough understanding of the business and technology of the failing system. An architect who fixes online glitches is like a F1 driver. A racing driver has to understand himself, his car, his opponents, his peers, the weather, the venue — all factors — to make quick decisions and make constant adjustments. The architect must understand all the technical details, business details, processing specifications, peers, and many other factors to make quick decisions and make quick adjustments.

Online operation is essentially a process of reinforcement learning. Many abilities can be completed by reading books and looking up materials, but online operation and maintenance skills often need a lot of practice to improve. Business Architecture capability

Stories of engineers complaining about product managers are common, and the main reason for the most complaints is that requirements change frequently. 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 to reluctantly accept it. A good architect should be able to reduce the probability of requirement changes due to the second cause.

Pseudo requirements arise for two reasons:

The first reason is demand transfer distortion. From the perspective of information theory, any communication is a process of encoding and decoding. A typical requirement goes through at least three coding and decoding processes, from the demander side to the product manager and eventually to the development engineer. With every passing of information there is some loss and some noise, which sometimes results in a product that doesn’t meet the requirements at all. In addition, weak control of demand feasibility, system reliability and development cost control on the demander side and product manager will also lead to demand distortion.

The second reason is that the demand side has completely failed to think about its own needs.

A good architect should be able to distinguish between real and fake requirements. Take the time to understand customers’ real business scenarios, have strong business abstraction ability, and understand customers’ real needs. The real implementation party of the system is the engineer. After identifying the real needs of customers, a smart architect should be able to accurately judge the project’s requirements on feasibility, reliability, availability and other aspects, and be cost conscious. Finally, due to the tight coupling between requirements and online systems, mastering the details of online systems is key to a successful business architecture. As the level rises, the requirements faced by engineers become more and more abstract. Taking on abstract requirements and providing abstract architectures is the only way for architects to excel.

There are several books out there on how to become an architect. But practice may be the more important way to improve architectural capabilities. Business architects should focus on customer pain points, not PRD documents, and dig deep into the real business. Mastery of the extensive technical and business details of existing systems is also essential knowledge for business architects. Project management ability

As a product of the industrial age, division of labor and cooperation into the Internet project DNA. The architect also needs to be responsible for several major projects to clear his name. To manage projects in the role of architect, business architecture is certainly a required skill. In addition, people management and cost control consciousness are also very important.

Project management also means having a big heart. Major projects involve many variable factors such as technological breakthroughs, personnel changes and demand changes. Strong ability to work under pressure in the face of various changes and to ensure the smooth achievement of goals.

People management needs to pay attention to aspects including: know people and make good use of them, optimize relations, simplify communication, adhere to the truth.

Knowing how to use people means that the architect needs to understand the hard and soft skills of each participant. At the same time, pay attention to the performance of team members in the project process, according to the ability of allocation. Optimizing relationships means managing the mood of the team. After all, the team is at the heart of the project, and a motivated team can achieve its goals effectively. Simplified communication means quick decisions, compromise where necessary, and clear accountability. Sticking to the truth means standing up to pressure and never backing down on matters of principle.Copy the code

Cost control means the meticulous management of the project, which should follow the following principles:

Start with the end and set milestones. In order to achieve your goals, all plans must begin with the end in mind. Breaking a large project into smaller phases and controlling the milestones of each phase can greatly reduce the risk of project failure. Control the critical path and key projects. According to the critical path Management Theory (CPM), the architect needs to determine the critical path for each subproject and determine its earliest and latest startup times. At the same time, the architect needs to focus on those key points that could delay the overall project and focus on cracking them. Control the tension of team members. Large projects can last longer and involve different types of work. Project implementation is an ever-changing and dynamic process in which not the whole cycle is tense and not all types of work are equally busy. A good architect must be able to read the overall project in detail and react quickly and make adjustments in real time. This not only significantly reduces project costs, but also improves the quality of output and team satisfaction. Generally speaking, "tighten up and loosen up" is an important principle of project management.Copy the code

There are many books on project management. However, improving business architecture capabilities is equally important. Getting involved in big projects and observing how others manage them are also important ways to improve. Team management ability

An engineer who doesn’t want to be a CTO is not a good architect. Moving towards technical management should be a mainstream career plan for engineers. One of the core competencies of team management is planning, which includes project planning and personnel planning. Good planning follows the following principles:

Planning is a game of interests. Good planning is good for the boss above, good for yourself in the middle, good for the team below. Finding a balance point among the three stakeholders to achieve a win-win situation tests the wisdom and ability of managers. Any planning is better than no planning. A team without a plan is a fly with its head cut off and is not in everyone's interest. Planning is not bookish. Markets change, teams change, and planning should not stay the same. Customer first is the starting point of project planning. In terms of personnel planning, planning needs to consider the ability, performance, growth and other factors of team members.Copy the code

Here is the end of the article, I hope to help the friends who are still confused, finally, I wish you an annual salary of 50W as soon as possible, become an architect, welcome to leave a message and small make up discussion.