1. Should architects write code

Qualified programmers do a great job with clearly assigned tasks, but in most cases the word “architecture” implies that the architect doesn’t go into too much detail, there is always some distance between the architecture diagram and the code implementation, and you can’t guarantee that everyone will understand your design correctly. Or a programmer who hits a snag in writing code and immediately comes up with an elegant enough solution.

In my opinion, an architect who writes code is more of a logistics job: spotting potential problems in the code first, alerting others, or suggesting improvements, or demonstrating proper posture when necessary.

Most of the time as an architect I don’t need to take on “core module” development because my time is too fragmented to be productive. There are many people who do a much better job than I do when they are focused, and I just need to keep the big picture and participate in moderation.

In general, architects and programmers are in some ways like product managers and users. Most programmers don’t tell you what they want, where they need to optimize, or even know it themselves. One of the easiest ways to make a great product is to do the same thing.

2. Why do other people’s systems always suck

Many programmers are so good at solving problems that they can write hundreds of lines of code in the afternoon to solve a problem. But there is a sense that something is missing. Most programs can do the job, but if you consider “time” as a dimension, you realize that a good project needs to consider much more: more common usage, easy-to-understand documentation, simple and easily extensible design, and so on.

Many companies have legacy systems that are huge, cumbersome, difficult to use, almost impossible to maintain, and everyone complains about them and tries to replace them every day. But after a while, you’ll find new people around you poking fun at the system that replaced legacy systems.

“Most of the systems were great at the time, functional at the time, and seemed to scale well, but they all went bad after the people who developed them left.”

3. What is the most difficult threshold to become an architect?

Many people claim to be the architect when people tell you an architecture of gushing, all kinds of technical terms like said crosstalk from his lips, three sentences from high concurrency large data, but slightly ask once, you will find a lot of the lack of basic concepts, such as claims to master the high concurrency people say not clear where he so-called high concurrent system bottlenecks, The person who claims to be proficient in architectural design can’t understand how his system can guarantee high availability, the system that claims to be very large data volume actually has less than 1 million pieces of data, etc.

Architects, while they may sound lofty, are still engineers at heart, not scientists, and not charlatans. No matter how much you learn, you also need to practice. Designing architectural solutions is more about abstractions and trade-offs: abstracting complex requirements into simple models, planning how to build a system in terms of functionality, performance, availability, r&d costs, and so on, requires more practice.

4. How to learn more efficiently?

Most people have limited time to study every day. At this stage, how to improve learning efficiency becomes the focus to be solved.

Talk about your experience to improve learning efficiency, in fact, very simple: systematic learning.

After repeating the painful learning-sorting process for several times, it is often twice the result with half the effort to read some independent articles or materials, because corresponding knowledge can be found in the system, and sometimes only one sentence on a page of a book can be read and the layer of paper can be broken to master new knowledge.

Like many people, I came out of college with the feeling that I could achieve something as a programmer with a little hard work and talent.

After working for a period of time, MY understanding of myself and others became clearer and clearer. Gradually, I realized that the gap between programmers might be bigger than the gap between humans and monkeys. It made me depressed for a long time to accept this fact.

After a period of time, I found myself able to objectively evaluate my ability and realized that the distance was not so important, as long as I tried to run faster, it was enough.

5. Fast path to becoming an architect

The following five knowledge systems are based on my experience in the industry and are the most mainstream technologies. Those who want to learn these techniques can add group: 697579751. The group will share these technical knowledge points for everyone to learn free download

One, source code analysis

Source code analysis is a kind of critical knowledge, master this critical knowledge, can be invariable should change, source code analysis for many people is very boring, difficult to understand.

Read the source code, I think there are three core points: technical basis + strong thirst for knowledge + patience.

I think is the core driver of reading source code. The majority of programmers I’ve seen have this kind of attitude toward learning:

The following is my summary of the current most should learn source knowledge:

Distributed architecture

Distributed systems are a complex and broad field of study, and a course or two online, or a book or two, may not cover all of it.

In general, the task of distributed system is to combine and connect multiple machines organically, so that they can cooperate to complete a task, which can be a computing task, or a storage task. If I have to make a classification of distributed system research in recent years, I think it can probably be divided into three parts:

  • Distributed storage system

  • Distributed computing system

  • Distributed management system

Here is my summary of the most mainstream distributed technologies in recent years:

Third, micro services

Microservices are hot right now, and everyone claims to be using microservices architecture, but what exactly is microservices architecture? Is microservices architecture a trend? We all lack a clear understanding of these issues.

In order to solve the problems under the single architecture, the microservice architecture came into being. Better to break up services sooner rather than build a bloated monster that is hard to tame. The core idea of microservices is to split and decouple services to reduce complexity. Microservices emphasize the reasonable disassembling of functions, as far as possible to ensure the Single function of each service, and clear roles according to the Single Responsibility Principle. Make each service light, so as to be flexible and reusable, and also according to the needs of each service’s own resources, separate deployment, separate horizontal expansion.

The following is a summary of the knowledge points I need to learn about microservices:

Fourth, performance optimization

Whether it’s dealing with a front-end interview or improving the product experience, performance optimization is a topic that can’t be avoided.

The purpose of optimization is to make users feel “fast”, so how to make users feel fast?

  • Loading speed is really fast, the user opened the input URL press enter immediately see the page

  • It doesn’t load faster, but your site feels fast to your users

Performance optimization depends on several factors, including garbage collection, virtual machine, and underlying operating system (OS) Settings. There are several Tools available to developers for Analysis and Optimization, and you can learn and use them by reading Java Tools for Source Code Optimization and Analysis.

It is important to understand that no two applications can be optimized the same way, and there is no perfect reference path for optimizing Java applications. Use best practices and insist on handling performance optimizations in an appropriate manner. To achieve the true highest performance optimization, you as a Java developer need to have a correct understanding of the Java Virtual Machine (JVM) and the underlying operating system.

The following is a summary of what I should learn and understand about performance optimization:

Five, Java engineering

To do a good job, you must first sharpen its tools, whether it is small white, or senior development, need to choose a good tool first. Improve development efficiency and teamwork efficiency. Give yourself more time to think.

6. Concurrent programming

Concurrent programming is one of the most important skills for Java programmers, and one of the most difficult to master. It requires programmers to have a deep understanding of the operation principle at the bottom of the computer, and requires programmers to be logical and thoughtful, so as to write efficient, safe and reliable multithreaded concurrent programs. At present, there is no systematic and comprehensive learning outline of concurrent programming on the Internet. I collected a lot of information and summarized the most comprehensive learning outline:

The above six knowledge systems are my experience summed up in the industry for many years, which are the most mainstream technologies at present.