Original article: http://www.nowamagic.net/internet/internet_DutyOfSoftwareArchitect.php
I recently started to learn how to become a qualified architect. First of all, let's take a look at others' points of view and write your own understanding of how to become an architect based on your actual experience. I hope you will be enthusiastic and helpful, and give us some advice.
Communication skills and self-expression
In my opinion, communication skills are the basic, most important, and most common qualities. It seems that technicians are easy to ignore and cannot ignore them if they want to become architects. The first thing architects need to do is to communicate with team members, project managers, and customers for approval. I know that it may be difficult for people who want to switch to the architecture in the future. This is true for myself. Maybe you will notice that although you are dedicated, the old scalper has done a lot of things, but every promotion is always the most active people at ordinary times. Aside from other factors, the reason why a leader chooses this kind of person is that the leader thinks that he can deal with people-that is, communication, and I can only do things but be a good employee. Although I think I am also good at communication, I have not shown how others know it. Communication is two-way. On the one hand, you must be able to understand the meaning of the other party, and on the other hand, let the other party understand what you mean. Therefore, to become an architect, you must first be brave enough to express yourself and then listen carefully to each other's words. Do not have the idea of "wine is not afraid of the alley", or the result is "The world will never meet, the figure is sad.
Have a certain level of courage and appeal
Architects have to deal with many people, including leaders, customers, and technical geeks. Architects have no responsibilities, but they need to promote the technical progress of the entire team, make critical decisions under pressure, and implement them to the end. This requires the architect to have a certain level of courage and appeal, so as to eliminate the impact of some personal emotions in the work process, so as to ensure smooth work. In fact, even if you are not an architect, I believe you will understand it in your daily life. In the face of an infectious person, he cries at your grief, and hurts you; in the face of the words of a brave person, you will not listen to his words; otherwise, you will face a step by step, how dare you believe his words and work with him again!
Broad knowledge fields
The responsibilities of architects are somewhat special, and they need to be innovative. Although there are many ready-made architectures, they are different in specific industries and cannot be applied. At this time, you need professional architecture knowledge, rich business domain knowledge, and broaden your horizons. In this way, we can jump out of the architecture and business, view the facts from the perspective, and then perfectly combine the theoretical architecture with the actual business. In my opinion, architects should not only study architecture and business knowledge, but also look farther at this point. "Everything is learned in the world", perhaps inspired by something unrelated to software.
Excellent technical skills and rich programming experience
The broad knowledge field is the requirement of breadth, because no breadth is the foundation. However, with the breadth, there must be depth. People have limited energy, but at least need to be proficient in 1 ~ Two technologies. If you have depth, You can grasp the details and ensure that your design is not impractical. With rich programming experience, we hope to maintain a sense of code, communicate effectively with developers, and understand the team's situation. Of course, this does not require you to become a technical expert, as long as you can maintain the feeling of code. Because there may be a lot of excellent technical options, it is not necessary to adapt to the lack of team.
Multidimensional Thinking and analysis capabilities
Once the customer requirements and technical team feedback are collected, the architect is required to analyze the data and develop feasible solutions. Developing a feasible architecture requires you to consider not only from the customer's perspective, but also from the development and machine aspects. This requires you to have certain abstract thinking and multi-dimensional analysis capabilities. Only with such capabilities can architects see the entire system and take control of the overall situation. How can we develop these capabilities? The first thing is experience, your own, or others. This is the most important thing. Innovation is exciting, but the lessons learned by our predecessors are more secure. In addition, I believe that everyone has heard the sentence "Listen to your speech and read ten years of books", so we can see how important experience is; second, we need to learn.
When we have these conditions, we can choose to become an architect. At this time, we should know what the software architect should do, what it should not do, that is, the scope of responsibility of the software architect.
Due to the huge differences in software soil at home and abroad, it is suitable for some foreign theories that may not be implemented in China, while some domestic materials are often used directly based on foreign materials, this also directly caused foreign software architects to become unacceptable in China. Today, the content of this article is based on some training materials, coupled with your own thinking, summed up the scope of responsibilities of software architects suitable for national conditions.
Requirement sorting analysis
Some people think that the architect is involved after the requirement specification is completed, but I think the architect should be involved from the very beginning of the project. There are many reasons: first, the first-hand information loss is the least, so architects can better grasp the needs. Second, analysts often do not dig deeper into the needs when communicating with customers, because there are many hidden demands that customers are not aware of themselves, architects can find these requirements by relying on sensitive software to reduce future variables. Third, analysts often leave the development team and blindly accept the customer's needs. Architects can clearly grasp what the existing R & D team can do and cannot do, predict risks in advance, and reduce the probability of project failure.
System Decomposition
After collecting the information, the architect needs to transform user requirements into software requirements, and supplement non-business requirements, such as robustness and scalability. How to distinguish and resolve user and software requirements, and how to effectively grasp the differences between user and software requirements is the core of system decomposition. This is the most challenging part of the architect, and only the architect is involved in the work.
Technology Selection
This step determines the architecture, development model, and dependency options of the project based on the software requirements. For example, whether the multi-layer architecture or distributed architecture is used, whether the waterfall model or RUP is used, whether MySQL or sqlserver is used, whether the enterprise database needs to be used, and whether the ORM needs to be used. However, architects should provide different solutions for the Technical Selection of the project, and provide detailed instructions for different solutions to describe the advantages, disadvantages, and feasibility of each solution. These documents are provided for the project manager or lead to decide the final technical selection.
System Design
Based on the software requirements and technology selection, the architect and the software engineer need to implement the software requirements in the software detailed design specification. The architect is responsible for decomposing software requirements into sub-projects, subsystems, components and modules, as well as the logical relationships between them to form different logical components, finally, you need to determine the interfaces between subsystems and components. These are the basis for further division of labor. Like system decomposition, system design is an important responsibility to test the capabilities of architects.
Training and guidance
After the software detailed design specification is complete, to ensure the smooth development of the project, the architect needs to provide technical training to the entire team so that everyone in the team can understand their responsibilities and what to do, what should I do. In the project implementation process, architects need to participate in the specific development process and provide effective guidance to each developer to avoid project delays caused by misunderstanding of the system design by team members. In my opinion, this is especially important for many new teams. Because a common problem for beginners in China is that they have a very low eye, they just think that they will do everything. When they get the real design, they are often overwhelmed and timid.
Maintain communication
Communication is an effective guarantee for smooth development of the project. The architect should track the project progress in many aspects, report the project progress to the Project Manager or direct leader in a timely manner, and communicate with the technical developers about the problems encountered, you also need to communicate with the user about demand changes.
The above are the main responsibilities of architects in the project development process. Compared with some training guidance, I think architects need to be more deeply involved in the project.
On the Quality and responsibilities of software architects