Hot article index, adhere to the original is not easy, please friends don’t hesitate to “like” support:

  1. How to design a beautiful Web API?
  2. Programmers must master performance tuning X, Y, and Z
  3. How to break down monolithic applications into microservices? 【 the 】
  4. How to break down monolithic applications into microservices? 【 the 】
  5. Programmers “seek to keep” strategy revealed

At that time, the positions related to technology were development engineer, test engineer and system engineer. Later, with the continuous growth of software scale, especially in the wave of the Internet, the number of users and visits are quantified. Due to various coincidences, veteran brother chose the path of architect based on his personal preference. From ignorance to learning by doing, he has finally figured out some secrets. There are a lot of experiences to share in this process, and I plan to sort out these contents and share them for the reference of friends who need them. Today we are going to start by looking at what is software architecture? What is its unique value for software development?

  • 1. Textbook definition

Software architecture, also known as software architecture, has no unified definition in the industry. Common definitions are as follows:

On the basis of certain design principles, the various parts of the system are matched and arranged from different angles, and the architecture is composed of multiple structures that form the system. It includes the components of the system, the external visible properties of the components and the relationships between the components. Externally visible properties of a component, which refer to assumptions made by other components about the component. Software architecture, which also includes compliance with system integrity, economic constraints, aesthetic needs and styles, not only focuses on internal considerations, but also on the overall consideration of the system in the user environment and at the same time focuses on external considerations. Software architecture, output abstract description of the overall structure and components of the system, a set of associated abstract patterns, a system sketch, used to guide the design of various aspects of large-scale software system construction.

Generally speaking, software architecture is the highest level division of a software system from the whole to the parts. Generally, a system is composed of components, and how these components form and interact with each other is important information about the structure of the system itself, mainly including:

  • Architecture Component: The core elements that make up a system.
  • Connector: Describes the path, mechanism, and expected results of communication between components.
  • Task-flow: Describes how the system uses these components and connectors to accomplish a requirement.

Software architecture is a decision made at the highest level when building a system that is hard to change later, not just on a technical level, but on a business level as well. Many important decisions need to be made in advance before a system can be built, and once the system is detailed and even built, these decisions are difficult or impossible to change. Clearly, such decisions must be the most important decisions regarding the success or failure of the system design and must be studied and examined with great care.

  • 2. What do the gods say

The textbook definition above is very professional, abstract, and complete, but for those who lack architectural experience, this style of definition is difficult to understand and absorb. It is readable, but not intuitive. Next, let’s listen to some of the industry gurus define software architecture. Mary Shaw, David Garlan, author of the classic book Software Architecture, gave a relatively simplified definition:

Software architecture = {Component, Connector, Constrain}.

Software architecture, the basic organizational structure of a system based on components, the relationships between components, and the relationships between components and the environment, and the principles guiding the design and evolution of the above contents. In software design, it is a level beyond algorithms and data structure design. Architecture issues include aspects of organization and global control structures, communication protocols, synchronization mechanisms, data storage, assigning specific functions to design elements, organization, size, and performance of design elements, and choosing between design solutions.

  • 3. Explanation of grounding

In recent years, I have been training new college colleagues on application architecture. At first, I used the definition from the textbook, along with the explanation of the god, thinking that the new colleagues would understand. But later, when I had the opportunity to introduce the job responsibilities of architects to non-computer majors, I found that they could not understand such a professional and abstract answer. After all, they had no professional background and had never done relevant work before. While the above definition is all well and good, it doesn’t matter if students can’t understand it and use it. With this in mind, I began to draw analogies from my students’ own experience.

Computer software is the basic element of the virtual world. Its history began in the 1950s, which is very short, while the buildings that constitute the physical world began to appear from the Stone Age, and humans have accumulated rich experience and lessons in thousands of years of architectural practice. If software is compared to the architecture of the virtual world, software architecture is the main frame of the architecture. Building adobe house does not need a complex framework, is in the foundation of continuous soil, the same small software does not need too complex architecture, oriented to the process, oriented to the object and so on can meet the needs. However, modern buildings such as high-rise buildings and residential buildings cannot be built without a complex framework, otherwise they cannot be built. Even if they are built, there will be the risk of collapse. Large-scale software also relies on complex architecture, otherwise it cannot solve its complexity, and it cannot be continuously updated, upgraded, operated and maintained. From this point of view, architect is equivalent to architect, it is a creative job.

Software architecture concepts such as components, connectors, and constraints also find their equivalents in architecture, for example: Building component is in the bricks, cement column, slab, fittings is connected each floor corridor, stair and lift, etc., and the constraint is based on the geographical location of the natural and social conditions to determine the building design contents, visible we humans build a virtual world experience mainly comes from the process of transforming the physical world.

  • 4. Grandiose exposition

Programmers are the most self-black group of people, we often use “code farmers”, “bricks” to label themselves, the above grounding architecture definition is particularly suitable for self-black us, from “bricks”, “wall” construction workers to upgrade to designers, this should be a relatively natural and optimized choice. For new programmers, the above exposition is more graphic and easy to understand, but if it is for people in other industries to explain, there is no more lofty exposition? As a veteran, I often go out to teach professional development courses to non-technical students and partners. In order for them to understand my job responsibilities, I often use organizational architecture as an analogy to software architecture. As we all know, organizational structure is an important tool for HUMAN resource management. For small start-up enterprises, organizational structure should be simple and practical, but for medium and large-scale enterprises, organizational structure must be able to solve the management of large-scale employees.

First of all, human resources can select and recruit suitable talents for the organizational structure, identify the advantages and disadvantages of each talent, and then assign them to positions where they can give full play to their strengths. Finally, they can create value in specific business projects. Isn’t this a bit like the selection and deployment of soldiers in the ancient battlefield? So software architecture is similar to organizational architecture, except that organizational architecture is for people, whereas software architecture is for software systems. Architects should be familiar with various mainstream technology stacks, middleware products, etc., know their advantages and disadvantages, and use them to solve specific problems in system design, so that each component can give full play to the utility, and finally solve various business challenges through complementary advantages and close collaboration. Is that a better statement? As the saying goes, if we can do the best architectural work, then when you are promoted to the management level, this methodology will be the same.

It seems that this is the triple realm for us to learn technology. To pass through this triple realm, we cannot do without in-depth professional study and practice in the field of software architecture, which is also what veteran Brother is trying to do. Today, we will continue to analyze software architecture to see how it has evolved, which generations of iterations it has gone through, and what are the advantages and disadvantages of each type of architecture.

If you feel valuable, please click the “like” button below, so that more partners can see it, and I will be more motivated to insist on sharing. In addition, I will share my experience in career planning, job interviews, skills improvement and influence building in the future. Please pay attention to this column or “IT veteran brother”!

  • Soft Skills – Hot articles (published on official account) :
  1. “Fancy” layoffs go a long way, you know?
  2. Encounter redundancy, how to spend psychological crisis?
  3. How to Find a good job in winter?
  4. 2C or 2B, what does that have to do with getting a job?
  5. Big company vs. small company, which would you choose?
  6. Keep that in mind and don’t worry about getting a good job!
  7. Jump, jump or not jump, how to jump?
  8. Programmers “seek to keep” strategy revealed
  9. Very hard, why am I still in the same place?


  • Hard Skills – Hot articles:
  1. How to write a good product help document?

  2. Is there a shortcut from programmer to architect?
  3. Spring: HTTP Request Processing flow and mechanism [1]
  4. Spring: HTTP Request Processing and mechanism [2]
  5. Spring: HTTP Request Processing and mechanism [3]
  6. Spring: HTTP Request Processing flow and mechanism [4]
  7. Spring: HTTP Request Processing flow and mechanism [5]
  8. How to use Spring Cloud correctly? 【 the 】
  9. How to use Spring Cloud correctly? 【 in 】
  10. How to use Spring Cloud correctly? 【 the 】