Master Plan for becoming a Software Architect : Roadmap of a Software Architect

软件架构师成长之路: Master Plan for becoming a Software Architect

Roadmap of a Software Architect


Software Architects are senior level actors in software development team. It takes time and experience to become the one. The skills and knowledge that you need to accumulate are cross-functional. Besides having challenges first of all in technical sphere, this position also demands from architects to have a well-established social skills. Before starting to look at master plan for becoming a software architect, let us have a glance at typical types of software architects:

  • 解决方案架构师/软件架构师(Solution Architect/Software Architect) —— 低级架构师,通常由之前或现在的高级软件工程师担任,负责与业务人员沟通产品的技术设计和架构,开发人员通常都可胜任。
  • 企业级架构师(Enterprise Architect) —— 高级架构师,把控产品“大局”,但很少关注细节。这个职位大多出现在非常复杂的大型软件产品中,有时甚至直接汇报给CTO。
  • 领域架构师(Domain Architect)—— 这是比较流行的软件架构师类型,在很多公司都可以看到。这个职位的目的是成为特定用例或技术栈的架构师。例如:云架构师负责特定的云供应商,数据架构师负责数据库的操作、设计、协调,移动架构师负责软件产品的移动版本等……
  • 业务架构师(Functional Architect) —— 这类架构师主要负责业务方面,对技术世界了解较少,大多是经验丰富的业务分析师,设计并领导软件产品的业务逻辑。

  • Solution Architect/Software Architect— low-level architect that is usually previous or active senior software engineer. He/She is in charge of technical design and architecture of a product with link to business people. Often leads developers.
  • Enterprise Architect — high-level architect that has overall “Big Picture” of a product with less information in details. This position mostly appears in very big complicated software products even sometimes just right after CTO.
  • Domain Architect — this is a popular form of software architects that are seen in multiple companies. The purpose of this position is to be an architect of specific use case, tech stack. For Example: cloud architects are responsible for a given cloud supplier. Data Architects are in charge of database operations, design, coordinations. Mobile Architects are taking care of mobile version of a software product. This counting can be very long…
  • Functional Architect —this type of architects are mainly in charge of business side, being less informed about technical world. Mostly this people are experienced business analysts that design and lead business logic of a software product.


We can extend this list further, since each company might have different name for a specific position. The roles and responsibilities of above given software architecture positions can vary from company to company but essence is the same. Take a look at following graph to have a better understanding in which relation different architect roles stand in respect to technical/business skills and knowledge.

Master Plan

One thing should be till now crystal clear: Software Architects are Super Senior Developers (usually…) except those who really come from business background. I tried to list different topic areas out, in which software architects should be comfortable:

Introduction To Algorithms is the perfect allrounder book to master DTs and Algos.

数据结构和算法 —— 基本的编程原理对软件架构师来说应该不成问题,包括数组、队列、栈、链表、不同类型的树、图等数据结构,软件架构师不仅应该熟悉,而且应该能够识别出在什么时候应该使用哪个数据结构。优秀的软件架构师应该知道不同的算法,如搜索、排序、递归、动态规划等。在日常生活中,没有架构师会从头开始编写“合并排序”算法,或者发明新的数据结构。

1.Data Structures and Algorithms — the very basic fundamentals of programming should be no problem for Software Architects. DTs such as Arrays, Queues, Stacks, LinkedLists, different types of Trees, Graphs should not only be familiar to a Software Architect, but he/she also should be able to recognise right moment where to use which DT. Well established Software Architect should know different algorithmic techniques like Searching, Sorting, Recursion, Dynamic Programming etc. In daily life, no architect writes for example “Merge Sort” algorithm from scratch, or discovers a new data structure. But knowing basics help them to make a right technical decision in especially pull request reviews.

技术栈 —— 无论是后端还是前端,软件架构师必须非常了解当前使用的技术栈。学习特定编程语言的语法是最简单的方法,但需要时间积累经验。不同的库和框架也是值得了解的宝贵资产。

2.Tech Stack — whether it is backend or frontend, Software Architect must know currently used tech stack very well. Learning syntax of a specific programming language is the easiest think. But gaining experience is what it takes time. Different libraries and frameworks that software product bases are also valuable assets to know.

简洁的编码 —— 让软件系统工作并不是软件架构师的最终目标。每次评审代码时,他/她首先想到的问题是: 我能使这段代码更高效吗? 我能让代码占用更少内存吗? 简洁的代码标准是否被正确应用? 我可以使用不同的OOP技术吗? 《代码整洁之道》无疑可以帮助我们提高重构技能。

3.Clean Coding — getting a software system to work is not the ultimate goal what Software Architect targets. Every time Software Architect makes a code review first questions that come to his/her mind are: 1. Can I make this code more performant? Can I make this code to take up less memory? Do clean code standards are applied correctly? Can I make use of different OOP techniques? Bonus: Clean Code will definitely help you improve your refactoring skills.

OOP —— 面向对象编程帮助我们可以构建更灵活、高效、可读性高的软件系统。有经验的软件架构师会经常使用这些技术(如果技术堆栈合适……)。

4.OOP — Object Oriented Programming offers great possibilities to make software system more flexible, effective and readable. Experienced Software Architects are using those techniques regularly. (if tech stack suitable…)

软件设计模式 —— 说到面向对象,不应该忘记不同的设计模式的重要性,它们首先是由GoF[2]收集和引入的。了解这些设计模式肯定会帮助我们更好的利用软件系统的面向对象设计。

5. Software Design Patterns — speaking of OOP, we should not forget the importance of different Design Patterns that where firstly gathered and introduced by GoF. Knowing these Design Patterns will for sure help you make your software system better use of object oriented design. Bonus: take a look at this book for more information.

从R.C.Martins的著作《架构整洁之道》( Clean Architecture )中可以学到如下原则。

Bonus: following principles can be acquired from R.C.Martins famous book: Clean Architecture.

S.O.L.I.D.原则 —— 这一组件原则是软件组件设计中需要考虑的基本技术。有经验的软件架构师如果掌握了这些原则,可以很快识别出代码中的违规行为。

高内聚/低耦合原则 —— REP、CRP、ADP等原则对于软件架构师来说非常重要,尤其是在构建、整合/解耦插件时,这些技术可以处理更高级的设计。

6. S.O.L.I.D. Principles — these component principles are fundamental techniques that need to be taken into account in software component design. Experienced Software Architect will quickly recognise violations in code, if he/she mastered these principles.

7. Cohesion/Coupling Principles — Principles like REP, CRP, ADP etc. are vital principles for a Software Architect especially when constructing, bundling plugins together/apart. So these techniques copes with more high-level design.

Software Architecture in Practice

系统设计 —— 有很多软件体系架构模式,如:主从、客户端-服务器、微服务、MVC、单向体系架构等,需要根据不同的前后端项目做出选择。当然不太可能有人能够掌握所有这些模式,但是根据项目的不同,软件架构师应该精通底层设计,领域驱动设计可以作为最基本的出发点。

8. System Design — There are plenty of Software Architecture patterns like: Master-Slave, Client-Server, Microservices, Model-View-Controller, Unidirectional Architecture depending on backend or frontend projects. Of course it is impossible to know all of them. But depending on a project, Software Architect should be master of underlying design. The very basics starting point is Domain Driven Design. Bonus: take a look at this book for more theory.

文档 —— 这是软件架构师日常工作中的重要环节。绘制不同的UML图,ARC42文档是这个职位不可避免的工作。这方面有很多工具,如:

9. Documentation — this is a vital point in Software Architects daily work. Drawing different UML Diagrams, ARC42 documentation is inevitable part of this position. There are plenty of tools such as:

  • — free and easy-to-use tool
  • plantUml — plugin for IDEs like Eclipse, Intellij. Very useful and my favourite tool, drawing through scripting.
  • yEd — handy tool, available as a desktop app.
  • MS Visio — rich functionalities, but not Free!

证书 —— 对于软件架构师来说,没有太多的认证选择,但国际软件架构资格认证委员会(iSAQB®)提供了Certified Professional for Software Architecture(CPSA®)认证计划,该认证得到全球认可。

10. Certificates —There not much certification alternatives for Software Architects that are globally renown but nevertheless, there is the International Software Architecture Qualification Board (iSAQB®) that offers the Certified Professional for Software Architecture (CPSA®) certification scheme. CPSA® certifications are globally recognised.



So becoming a Software Architect takes time and effort, as you can see from above list. But it is pretty doable :).

If you are interested in more Software Architecture topics take a look at below list.

Relevant Articles:

  1. Software Architecture Patterns for Front-End Development
  2. Software Architecture Cheat Sheet for Daily Usage
  3. How to apply Component Cohesion Principles to Spring Boot Application
  4. How to apply SOLID Software Design Principles to Spring Boot Application

[1] Master Plan for becoming a Software Architect:
[2] Design Patterns:
[4] PlantUML:
[5] yEd:
[6] MS Visio:
[7] Software Architecture Patterns for Front-End Development:
[8] Software Architecture Cheat Sheet for Daily Usage:
[9] How to apply Component Cohesion Principles to Spring Boot Application:
[10] How to apply SOLID Software Design Principles to Spring Boot Application:

System Architecture — System Design Materials[1]




System Design Tips and Introduction (中文, Youtube)[2]
The System Design Primer (中文/英文, Github)[3]
Intro to Architecture and Systems Design Interviews (英文, Youtube)[4]
Designing Data-Intensive Applications: The Big Ideas Behind Reliable, Scalable, and Maintainable Systems (中文版《数据密集型应用系统设计》, Book)[5][6]
system design interview questions (英文, Github)[7]
System Design Interview – Step By Step Guide (英文, Youtube)[8]
Distributed Systems (英文, Book)[9]
Distributed systems for fun and profit (英文, Book)[10]
6.824: Distributed Systems (英文, Course)[11]
Concurrent and Distributed Systems (英文, Course)[12]
15-440: Distributed Systems Syllabus (英文, Course)[13]
CS244b: Distributed Systems (英文, Course)[14]
CSE 490H: Distributed Systems (英文, Course)[15]
Apache Hadoop (Open source, Github)[16]
SeaweedFS (Open source, Github)[17]
MinIO (Open source, Github)[18]
TiDB (Open source, Github)[19]
etcd (Open source, Github)[20]
Apache ZooKeeper (Open source, Github)[21]
Apache Spark (Open source, Github)[22]
Apache Flink (Open source, Github)[23]
Ray (Open source, Github)[24]
Notes on Distributed Systems for Young Bloods (英文, Blog)[25]
Distributed systems theory for the distributed systems engineer (英文, Blog)[26]
分布式系统 (中文, Blog)[27]
Distributed Systems Reading Group (英文, Paper)[28]
awesome-distributed-systems (英文, Github)[29]
Grokking the System Design Interview (英文, Course)[30]
Tech Dummies Narendra L (英文, Youtube)[31]
Design video sharing platform (英文, Blog)[32]
System Design Basics (英文, Youtube)[33]
code karle (英文, Youtube)[34]
System Design Introduction For Interview (英文, Youtube)[35]
Distributed Systems (英文, Youtube)[36]
System Design (中文, Gitbook)[37]
CS6213 Special Topics in Distributed Computing (英文, Course)[38]

基本问题: 时间问题,一致性问题,容错技术,共识算法,并发控制
CAP theorem (英文, Wikipedia)[39]
PACELC theorem (英文, Wikipedia)[40]
Consensus (英文, Wikipedia)[41]

生产系统: MapReduce, Spark, GFS, Dynamo和Cosmos
MapReduce (英文, Wikipedia)[42]
Apache Spark (英文, Wikipedia)[43]
Google File System (英文, Wikipedia)[44]
Dynamo (英文, Wikipedia)[45]
Cosmos (英文, Wikipedia)[46]

存储与检索(Storage and Retrieval)
批处理/流处理(Batch processing/stream processing)

[1] System Architecture — System Design Materials:
[2] System Design Tips and Introduction:
[3] The System Design Primer:
[4] Intro to Architecture and Systems Design Interviews:
[5] Designing Data-Intensive Applications: The Big Ideas Behind Reliable, Scalable, and Maintainable Systems:
[6] 数据密集型应用系统设计:
[7] system design interview questions:
[8] System Design Interview – Step By Step Guide:
[9] Distributed Systems:
[10] Distributed systems for fun and profit:
[11] 6.824: Distributed Systems:
[12] Concurrent and Distributed Systems:
[13] 15-440: Distributed Systems Syllabus:
[14] CS244b: Distributed Systems:
[15] CSE 490H: Distributed Systems:
[16] Apache Hadoop:
[17] SeaweedFS:
[18] MinIO:
[19] TiDB:
[20] etcd:
[21] Apache ZooKeeper:
[22] Apache Spark:
[23] Apache Flink:
[24] Ray:
[25] Notes on Distributed Systems for Young Bloods:
[26] Distributed systems theory for the distributed systems engineer:
[27] 分布式系统:
[28] Distributed Systems Reading Group:
[29] awesome-distributed-systems:
[30] Grokking the System Design Interview:
[31] Tech Dummies Narendra L:
[32] Design video sharing platform:
[33] System Design Basics:
[34] code karle:
[35] System Design Introduction For Interview:
[36] Distributed Systems:
[37] System Design:
[38] CS6213 Special Topics in Distributed Computing:
[39] CAP theorem:
[40] PACELC theorem:
[41] Consensus:
[42] MapReduce:
[43] Apache Spark:
[44] Google File System:
[45] Dynamo:
[46] Cosmos:


System Architecture — System Design Materials

Confucius told us “If a worker wants his work well done, he must first sharpen his tools.”

Now, I would to share my learning materials. I also hope you can share your learning materials so that we can grow together.

  • 0
  • 0
  • 打赏
  • 0


  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
©️2022 CSDN 皮肤主题:大白 设计师:CSDN官方博客 返回首页




¥2 ¥4 ¥6 ¥10 ¥20
余额支付 (余额:-- )



钱包余额 0