Pay attention to “IT veteran brother”, Empower procedural life! Index of previous articles in this series:
- Why must programmers understand architecture?
- What exactly is architecture? Do you know?
- What are the architectures and how do I choose?
- What do architects do? Do you know?
Architect, the main direction for our programmers to upgrade, it is not like some skills can be acquired by signing up for a training course. Being competent in architecture requires many skills, both hard and soft. As the saying goes: Eat not fat. From programmer to architect cannot be accomplished overnight. It is a progressive and steadily improving process, with skills to be mastered at each stage and a sequence between multiple skills. If you want to make the transition to becoming an architect as quickly as possible, you must consciously build these skills into your daily work.
1. Hard skills
Unlike lines like product and management, which rely more on generic skills, moving from the technical line to product or management is relatively easy to get started. But it is difficult to transform from a product or management to the architecture, the architect must start from the development of post, in the work constantly improve their professional skills and the accumulation of practice experience, starting from a module, to a subsystem, and then to the whole system, finally to multiple systems, it is a process of gradual increase hard skills, can also be seen as building architect hard skill “of” point, line and plane.
1.1
Veteran brother, I was a development engineer when I started my career. Together with several other graduates, I was assigned to the automatic test platform project team. The whole system was designed by senior colleagues in the department, and we were responsible for developing several modules of a subsystem. At this stage, I mainly focused on the granularity of functions, classes and modules. In order to do a good job, I would study the programming language C/C++, and be familiar with the use of Visual C++ MFC, Socket and other code libraries. We also held weekly code review meetings where we invited colleagues to review the code we’d written, and as a young person, receiving positive or negative reviews was a huge boost to me. After the experience in this stage, my programming skills have been greatly improved, and I have formed a more standard coding habit, and mastered how to design a function, class and module.
This project lasted about two years, and in the following six months, I also did some systematic promotion and training related things. Then, we started the automatic test script using the scripting language Python as the automatic test script. In this project, I was in charge of pre-studying the Python script interpretation engine and developing the test agent subsystem. This project experience enabled me to jump to the granularity of subsystem. I need to consider what responsibilities this subsystem has in the overall system and how it interacts with other subsystems or systems under test. At the same time, I was also responsible for the subsystem design, determining which modules it was composed of and which classes were contained within each module.
This stage let me have the ability and confidence to build a single subsystem, in the midst of the later work I also use different types of programming languages to build too many, many different types of subsystem, but is actually in strengthening the ability to build a single point, associated skill tree include: operating systems, programming languages, the application container, development framework, multithreading, and so on.
1.2 line
For a slightly larger system, it is inevitable to be divided into several subsystems, subsystems or with the external system between the need to connect communication, which is equivalent to connecting two isolated points, namely connecting points into a line. This process is different from the skills required to develop individual subsystems and requires network programming knowledge and skills. When I first started working as a veteran brother, Web application had not become the mainstream application form, browser/server (B/S) architecture had not emerged, and HTTP protocol had not been widely used. At that time, client/server (C/S) architecture was the most popular, and IP/TCP was the main communication protocol. It was at this stage that I accumulated the knowledge and skills related to network programming.
As early as we want to develop client or server programs, we need to be familiar with Socket network programming, including binding monitoring ports, accepting connection requests, concurrent processing requests, etc., and write all by ourselves from scratch. These experiences are very helpful for me to understand network communication mechanism later. In order to meet the interaction requirements between subsystems, we need to customize special application-layer protocols based on IP/TCP, including the two-layer structure of packet header and message style. Although it is simpler than HTTP, FTP, SMTP and other protocols, this experience gives me a deep understanding of the implementation principle of APPLICATION layer protocols like HTTP. In addition, we also need to consider the subcontracting and grouping of the packet when the packet content is too long, the packet loss and retransmission when the network is abnormal, and the codec of the packet content.
Therefore, any programmer who is interested in moving up the technical line should acquire this skill. In recent 15 years of technical working career, veteran elder brother I back and forth countless now network solution, there are many complex problems are related to interactive communication system, with the aid of various network caught the cobwebs analysis tools, the root cause of the positioning problem is not the correct use of network protocol, so I’m glad I have the experience in the past work.
With the rapid development of the Internet, Web application has become the main application form, while HTTP, a more humanized network communication protocol, has become the most popular interaction protocol. From the development of client/server (C/S) applied to the development of browser/server (B/S) in the process of application, veteran elder brother I spend time learning the HTTP protocol, to understand its operation principle and control mechanism, especially the protocol header for each field, including the request method, coding format, timeout mechanism, the cache mechanism, etc. Dr. Roy Thomas Fielding was most impressed by his paper Architectural Styles and the Design of Network-based Software on REST Architectures, or “Architectural Style and Web-based Software Architecture Design”, gave me a new understanding of HTTP that will be useful for understanding service-oriented Architectures in the age of cloud computing.
In addition to IP/TCP and HTTP, I think we also need to master the protocol related to Message Queue. This type of protocol is more suitable for building event-driven systems, supporting not only synchronous but also asynchronous. I ever responsible for a system of mobile Internet, including the subsystem is responsible for maintaining all kinds of mobile terminal type and equipment information, partners need from this subsystem for the latest information in a timely manner, at first we use HTTP protocol polling pull way, but with the increase of the number of partners and information update frequency, This message synchronization mechanism ran into a bottleneck, which we elegantly resolved by introducing message queue middleware.
1.3 surface
Start with points and lines, and as you build more and more lines, you end up with a plane, a distributed system, that we programmers must pass through on our way to being an architect. At first we only use the Internet to search information, then our instant messaging and social networking has also moved to the Internet, and then shopping travel things can also be done through the Internet, such as clothing, food and live with us now do all the things are starting to be Internet, this is equivalent to the more complicated virtual world by building more and more large. The complexity of the software system we developed was limited. It was divided into several subsystems at most, and the number of external systems that needed to interact with each other was also limited. However, as businesses become more and more diversified, the complexity of a single system also increases dramatically, and the external systems associated with it also become a network of criss-crossing, which is what we call “surface”. Maintaining complexity in such a complex network and ensuring that the system still meets quality attributes such as ease of use, performance, reliability, stability, and security requires programmers to develop skills related to distributed systems.
When I was engaged in the research and development of mobile Internet-related systems, I encountered a more complex scene. At that time, we had to build an ecosystem similar to Apple’s App Store. The system we were responsible for was composed of six or seven subsystems, and it also needed to interact with the systems of many upstream and downstream partners. If docking with each external system is based on a different standard, the complexity associated with docking will eventually spiral out of control as the number of connected systems increases. In addition, typical business scenarios such as application subscription and purchase require the collaboration of multiple systems, which involves distributed transactions, and how to ensure data consistency is a great challenge. According to conventional logic, as the complexity of the system increases, the probability of system failure will increase. However, for users, they still expect the system to provide 7*24 hours of service without service timeout or failure. This is the challenge brought by “surface”.
From that stage on, I had the opportunity to learn and practice distributed architecture. At the beginning, SOA was service-oriented architecture, that is, Web Service, SOAP and other technical standards. At that time, the technology stack was heavy and complicated, but distributed system was a new challenge to the whole industry at that time. The solution was developed by traditional software giants such as Compaq, HP, IBM, Lotus, Microsoft and SAP. It standardizes each service in a distributed system through Web Services Description Language (WSDL), and standardizes the interaction between services through simple Object Access Protocol (SOAP). From a certain point of view, the larger the collaboration, the greater the reliance on uniform standards and specifications.
However, few traditional software giants have practical experience in the front line of the Internet. Unlike BAT, they have such a real feeling about the challenges of Internet distributed system. Alibaba incubated Dubbo, which is lighter than Web Service and SOAP in practice, and it also relies on the theory of SERVICE-ORIENTED architecture SOA. It’s just more grounded online. This work experience has enabled me to have a systematic understanding of distributed architecture. Although distributed technology has evolved from service-oriented architecture SOA to MicroService in recent years, and technical middleware has changed from Dubbo to Spring Cloud, I can still apply this knowledge system to understand new technologies.
2. Soft skills
What is the difference between hard and soft skills? Veteran brother, I think a person depends on which craft to make a living, then the skills related to this craft are hard skills, and the skills supporting hard skills to produce greater value are soft skills. This is similar to the requirements of “T” type talents, which requires not only enough exquisite and top-notch main skills, but also a variety of comprehensive skills. I’m sure no one would disagree that hard skills are important, but many people fail to recognize the importance of soft skills. For technical personnel, from development to architecture, from architecture to CTO, or from development to product or management, no matter promotion or transformation, we all enhance the proportion of soft skills while strengthening hard skills, or even the original hard skills become soft skills, while the original auxiliary soft skills become hard skills. Next, I’ll talk about what soft skills are important based on my own experience developing transformational architectures:
- Communication: Relative to the developer, the architect’s job determine his butt more upstream and downstream customers, the requirement of communication skills will be a lot higher, after all, the thinking mode of different roles and position Angle of each are not identical, the architect must understand the different ways to communicate with these roles interact, empathy, to excavate the real demand, Then use your expertise to balance the needs of all parties and ultimately produce an architecture solution that all parties are satisfied with.
- Writing: As a developer, my main output was code. There are occasional technical documents, but they are usually for your own use or to make up for product instructions. After the transition to architecture, I paid less attention to code writing. In order to make all stakeholders understand and approve my architecture scheme, except for oral explanation, I mainly relied on technical writing, and the documents I wrote to others were completely different from pure records.
- Design: no matter oral communication or document communication, no matter how good your language or writing skills are, they can not be matched with design legends. The information contained in legends is multi-dimensional and more intuitive and easy to understand. I usually draw a design before writing a technical document. The process of drawing a design is to straighten out the process of thinking, and then organize the text or language on this basis becomes easier and easier, just like looking at the picture and speaking.
- Presentation: Power and Non-authority Influence. Architects rely on non-authority influence to carry out their work. There is no hierarchy between the architect and the various stakeholders, and in order for your team and partners to accept and implement your architectural solution, you must rely on your expertise to convince them. In the past school education or growth process, I lacked the accumulation of this aspect. In order to successfully transform into an architect, I deliberately trained and improved my ability in this aspect.
To sum up, we need to improve our input, design, and output skills in order to do a good job on this new platform as an architect. We used to get information from the outside world mainly by reading documents, but now we need to strengthen three-dimensional and multi-directional communication. In terms of output, in the past our output form is too single, now we have to master the text, speech and other multimedia methods. Of course, the core is architectural design expertise, which is the center of input and output.
3. Knowledge system
Today, I will share my guide to becoming an architect, including the map of hard and soft skills to master at each stage (as shown in the picture), and the text outline can be seen in the article: Is there a shortcut to becoming an architect? If you are interested in this topic, be sure to check it out first!
Adhere to the original is not easy, if you feel valuable, please move your hands to guide the “👍” button below, so that more partners can see, veteran brother will be more motivated to adhere to sharing. In addition, I will share my experience in career planning, job interviews, skills improvement and influence building in the future. Please follow this column or “IT veteran brother”!
Soft skills – popular articles :(initial public account)
- How to build influence on the road “code”? (new)
- 2020 is here. Has your 2019 been dried and sealed? (new)
- “Fancy” layoffs go a long way, you know?
- Encounter redundancy, how to spend psychological crisis?
- Programmers “seek to keep” strategy revealed
Hard Skills – Popular Articles:
- How to design a beautiful Web API? (hot)
- Performance Tuning programmers must Master X Y Z (Hot)
- How to break down monolithic applications into microservices? 【 the 】
- How to break down monolithic applications into microservices? 【 the 】
- Spring: HTTP Request Processing flow and mechanism [1]