Alibaba Senior Architect Private Summit: Knowing these points, everyone is an excellent architect

Foreword:

Recently, a lot of people have asked me: "George, how can I become the main front-line architect in the company, I have been working in the formula for nearly five years now, and I am still an unknown programmer, and I also use many channels to break through. I have a bottle disease now, but I just can’t get out, and the technology has not been able to break through. I really have no choice. Through the recommendation of a friend, I said that you can solve my technical bottle disease, so I want to ask you to help me break through. Let’s talk about the technical bottle-sick.”

Do you have questions like this - "How can a programmer who writes business code every day become a technical expert and start writing technical code?"

Today, my friends and I worked together with me to discuss the conclusion: how to work hard to become the main architect of the company.

No matter it is development, testing, operation and maintenance, every technician has a dream of becoming a technical master more or less. It is the pursuit of technological dreams that drives us to constantly strive and improve ourselves.

However, "dream is beautiful, but reality is cruel". Many students will find out after actual work that their dream is to become a big cow, but the things they do seem to be unrelated to the big cow. For example, the programmer said "every day. Writing business code and working overtime, how can I become a technical expert”, the test said “there are endless test cases that can be executed every day”, and the operation and maintenance said “carry the machine to connect the network cable and type shell commands, this is not the operation and maintenance life I want” .

I am also a programmer, so I hope to help you solve these confusions through some examples based on program development below. The general principles are the same, and both testing and operation and maintenance can be used for reference.

Misunderstandings of being an architect

First: worship Daniel as a teacher

Some people think that the easiest, most direct, fast and effective way to become a technical master is to "become a team technical master as a teacher" and let them open a small kitchen for you and assign you some difficult tasks.

I am personally against this approach for several main reasons:

Daniel is very busy, and it is unlikely that he will open a small stove for you alone, let alone open a small stove for you for 1 hour every day; and in a team, if Daniel often opens a small stove for you, it will inevitably lead to other team members. Doubt, I personally think that if the big cows in the team are really interested, it is best to give the team more training. However, those who have done training know that it is very time-consuming to prepare for a training. The courseware and materials should be at least 2 hours (not fragmented time), and the explanation should be 1 hour. It is very high for the big cows to do training once a month. frequency.

Because of the first reason, it is generally necessary to seek advice or discuss with Daniel with questions. Because answering or discussing questions does not require much time, it is more about experience and accumulation. In this case, Daniel is very happy. After all, influence is an important indicator of Daniel. However, pay special attention: if you often ask about knowledge that can be easily found in books or google, the big cows will also be very impatient, after all, time is precious. Netizens often ask me questions such as "how to configure the -Xmn parameter of jvm", and I always answer "please go to google directly", because there are too many such questions. If you don't go to the system to learn, each It's a huge waste of your own and others' time.

There are not many big cows. It is unlikely that every team has a technical master. It can only be said that there will be people in the team with a higher level than you. Even if he opens a small stove for you every day, you can only improve to his level in the end; However, if it is a cross-team technical expert, due to work arrangement and assignment, there are few opportunities for direct consultation and counseling. It is unlikely that you will become a technical expert just by participating in a few trainings.

Based on the above reasons, I think that for most people, if they want to become a master of technology, they must first understand the principle of "mainly rely on themselves", and don't expect a master like a martial arts master to take it step by step. teach you. When appropriate, you can improve yourself by consulting or discussing with Daniel, but most of the time, it is still systematic and targeted improvement.

Second: the business code is equally awesome

Some people think that writing business code can be awesome. The reason is that business code can have various skills. For example, encapsulation and abstraction can be used to make business code more extensible, and it can be better understood and implemented by communicating with products. For business, the problem location efficiency can be improved by 10 times after logging and so on.

Business code is as technical as it is, that’s for sure. The technology in business code is the foundation of every programmer, but just mastering these skills will not make you a tech giant. Just like upgrading and fighting monsters in a game, start Fighting mobs, the experience value is very high, the later the experience value is less, and the experience value can no longer be increased by fighting mobs. At this time, you need to fight some more advanced monsters and brush some challenging dungeons, but I don’t see any of them. The game can rise to the top as long as you keep fighting mobs. The road to becoming a tech giant is similar. You have to constantly improve your level, and then face greater challenges. By responding to these challenges, you can improve your level to a higher level. In the realm of Daniel, writing business code is just a challenge on the way to fight monsters and upgrade, and I think it is a relatively elementary challenge.

So I think that programmers who can't write good business code will definitely not be able to become technical giants, but programmers who only write good business codes can't become technical giants.

Third: Too busy at work and no time to study by yourself

Many people think that it is not because they are not smart or they do not work hard that they have not become a technology giant, but because in this environment in China, technicians work too much overtime, so they do not have extra time to study.

This reason has a certain objectivity. After all, compared with Europe and the United States, we do work more overtime, but this factor is just a problem that needs to be overcome, not an insurmountable gap. After all, there are still so many big cows around us. grew up in the environment of China.

I think there are several myths that have led to this perception:

(1) All you do at work is repetitive work, and you must learn extra if you want to improve.

The main reason for this misunderstanding is the belief that "writing business code is not technical", and I am writing business code at work now, so I can't improve at work.

(2) Learning requires a large period of continuous time

Many people think that if you want to study, you need to be like a class in school. You can only study if you come to class all day. We usually work a lot of overtime. When we are tired on weekends, we just want to sleep in, or we just want to watch movies and play games. Relax, so there is no time to study.

In fact, the practice is just the opposite: firstly, we should learn and improve at work, because the learning effect is the best if we apply what we have learned or have examples for reference; secondly, we don’t need a lot of time to study after work, but we need to squeeze out time. , using time fragments to learn.

How to break through and avoid the above major mistakes

How to break through the above misunderstandings depends on how you study, whether there is a systematic learning system for you to learn, whether there is a group with a learning atmosphere, and whether there is a group of brothers and sisters who encounter bottle disease and break through together. Is there? ? ? ? ? ? I have it here.

I recommend to everyone what I think is a more comprehensive and systematic learning system (after decomposing, the complete group can be obtained)

1. Source code analysis

Alibaba Senior Architect Private Summit: Knowing these points, everyone is an excellent architect

2. Distributed Architecture

Alibaba Senior Architect Private Summit: Knowing these points, everyone is an excellent architect

3. Microservices

Alibaba Senior Architect Private Summit: Knowing these points, everyone is an excellent architect

Fourth, performance optimization

Alibaba Senior Architect Private Summit: Knowing these points, everyone is an excellent architect

Five, Java engineering

Alibaba Senior Architect Private Summit: Knowing these points, everyone is an excellent architect

The above is the most systematic learning system that I recommend to everyone. If you want to learn the above knowledge, you can add this group to get it: Exchange learning group: 433-540-541 There will be some recordings recorded by senior architects. Video recording: Source code analysis of Spring, MyBatis, Netty, principles of high concurrency, high performance, distributed, and microservice architecture, and JVM performance optimization have become a must-have knowledge system for architects. You can also receive free learning resources, which are currently benefiting a lot

Then the question comes again, can I become the main architect of the company after completing the above course system? The answer is: NO

To become a master architect, you need to know the following knowledge

To become an expert in software development requires a complete understanding of the software development process and extensive experience in key parts.

It requires us to understand the nuances of design patterns and algorithms, while following best practices in software development, including creativity and thinking, to provide suitable solutions to programming problems.

Achieving this goal requires mastering the capabilities of server-side development, client-side development, DevOps operation and maintenance, cloud computing, web design, distributed systems, databases, programming specifications, code management, infrastructure management, scalability, and security. .

You may not necessarily know all of the above. But try to understand most of them at the surface, and then go deeper into a few of these techniques.

Below is a list of the main technical competencies that developers lack, and which technical managers or architects should be familiar with when recruiting for these positions.

Coding Standards

Coding conventions help ensure good development practices and product development. To understand some of the most important coding conventions:

DRY (Don't Repeat Yourself), SOLID, TDD, Defensive Programming

Design Patterns

Design patterns are a common, reusable solution in software development to common problems in software. It is very important for software developers to be aware of some common Design Parterns, and more importantly to be able to identify the correct design patterns for a given problem. Design patterns used by some leading developers such as MVC, Singleton, DAO, Facade, Proxy, Adapter, Strategy, and Abstract Factory.

Server-side development

In a more complex software system, there will be various logics in the backend. As a back-end developer, dealing with the business logic of the application faces many challenges. Any developer can write code, but only experienced developers can write high-quality code that is performant, scalable, and reliable. The process of developing excellent software involves a lot of scientific, mathematical, computer and other professional knowledge, and it is very important to have the thinking and experience of processing.

cache

Various mechanisms for data caching (file, database, memory, reverse proxy, HTTP....)

memory management

Java has a very good garbage collector that manages memory automatically, cleaning up unused objects and freeing some memory. But a senior Java developer needs to have a very thorough understanding of how memory works in order to write high-performance and optimized applications.

It is important to understand the following concepts:

Stack, heap, strong references, weak references, escape references, how to reference strings, garbage collection process, meta space, garbage collector types.

exception handling

This is a very important and a relatively large topic, and we will write a dedicated article about it in the future. Now, to list some good practices for handling exceptions:

1. Follow the "error first" principle to make software more reliable

2. Don’t catch unrecoverable exceptions

3. Do not throw the exception after recording the exception

4. Select the correct layer to handle exceptions (for example: DAO does not know how to deal with database failures, but the service layer can know)

5. If you cannot recover from an exception, prefer unchecked exceptions

IO operation

Understand the cost of I/O operations and possible unpredictable results.

Asynchronous programming

Asynchronous programming in Java is implemented using threads, which is also a fundamental part of the Java platform, and the effective use of concurrency is important for building high-performance applications.

Terms such as thread pools, deadlocks, producer-consumer, atomicity, immutable objects, semaphores, etc. should not be new to experienced developers.

batch processing

In practical scenarios, writing batch jobs is very common. Usually to perform important tasks, there are some basic rules:

1. Each task should be divided into input, processing and output;

2. Always poll batch input data;

3. The processor should be thread-safe;

4. The output should be atomic;

5. Store work results;

6, to consider the EIP mode.

Distributed Computing

In the modern world, distributed computing refers to the use of distributed systems to solve computational problems. However, unlike traditional systems, distributed systems have a very high level of complexity. When users start to grow rapidly and consume more resources, engineers with working experience in distributed systems will play a role at this time. Microservice software architecture is a good example of distributed computing and all the advantages and tradeoffs of distributed architecture.

Today, microservices are a must-have skill for today's software engineers, requiring us to have extensive experience with distributed systems.

Such as fault tolerance, availability and consistency, distributed transactions/events, synchronous and asynchronous communication, distributed authentication, distributed applications, consensus applications, etc. are very important.

database

Accurately grasp all the costs involved in communicating with the database to obtaining data, such as connection handshake, data transfer, etc. Get a clear understanding of atomic transactions and how to ensure data consistency. Therefore, database management is an essential skill for software developers.

Databases are used to manage data, which is a difficult task even without thinking about adding business logic to the database. In large IT systems, databases face numerous challenges in terms of security, scalability, capacity and availability. We have to consider encryption, replication, sharding, big data, etc. Understanding how a database works and how to optimize it and the cost of each processing consumption (eg, memory footprint, number of CPUs) will help in effectively designing database management for a system.

DevOps

The main development engineers must have the ability to promote the cultural concept and practice of DevOps, automate all operation and maintenance steps, and improve the ability to deliver applications and services with high quality and high speed. The code deployment or configuration infrastructure must be automated, flexible, and monitored.

A strong developer should have a good understanding of the full development life cycle from testing and release to deployment and infrastructure management. Requires us to understand cloud computing, Linux, networking, containers, engineering management, etc.

code management

Given the importance of code, only the main developers can master the code life cycle and promote software engineering best practices. To this end, you need to be familiar with source code management systems, such as Git, and have a clear thinking about branch strategy, version control, distributed revision control, and code quality assurance tools, code communication and dependency management, and configuration management.

Safety

Web security is a tricky business and depends in part on many external parameters; software engineers need to follow best practices and guidelines for building secure web applications.

Key engineers need to have a deep understanding of information security, not only how to avoid building insecure and vulnerable systems, but also how to protect user privacy.

A great developer needs to be able to create a guide to dealing with the top 10 web application security risks. In web applications, we have more security threats that require engineers to pay attention, which include the following:

1. Upload file check;

2. Password brute force cracking;

3. Session expiration processing;

4. Session source verification;

5. Secure communication through the network;

6. Secure cookie access;

7. User credential processing.

Front-end development

Front-end development is an important part of software development, if you don't know the relationship between program design and good user experience, you can't be a main software engineer.

In the front-end world, Javas and CSS are a must for software engineers. It's not easy to master both, but it's important to understand how they work and how they connect with HTML so that we can deliver a great user experience.

To lead a front-end team, you need to know more than how to build a beautiful layout. To do better in front-end development, you need to know the following:

1. What can a browser as an engine build?

2. How to develop a responsive website;

3. How to improve the performance of the website;

4. How to develop a single page application;

5. How to build a modern and efficient development environment;

6. Familiar with HTML5 API.

7. Familiar with React.js or Vue.js framework

To master these skills, developers need to be self-motivated, proactively learn new technologies, and put a lot of hats on themselves in their careers. Continuing to challenge yourself and then solve problems better is the essence of programming. Knowledge is important, especially in the context of certain complex problems. In the rapidly changing world of IT technology, the acquisition of knowledge is always more important than the skills we already know.

If you need to learn, you can also add the group recommended above to obtain information. I hope it can help friends and children’s shoes who are developing in this industry, spend less time looking for information in forums, blogs and other places, and spend limited time really learning. superior.

Guess you like

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