AI 编程越来越厉害了,我要怎么提升自己的系统架构能力?
现在 AI 写代码真的是越来越厉害了,一些小的模块让 AI 写,又快又好。慢慢的,对程序员写代码的能力要求会降低,但是对系统架构能力反而会要求更高。而且这部分能力不会轻易被 AI 取代,因为 AI 还不能像人类一样看到一个复杂项目的全貌,无法完整理解项目的业务上下文和约束条件,所以需要人去把任务拆分,一次只执行一个小任务。
那么问题来了,新人要怎么才能提升系统设计能力呢?
作为一个过来人,我觉得提升系统设计能力这事,可能有没有 AI 都差不多,都离不开多看、多练和多复盘。AI 的好处就是可以更方便地帮你查资料,以及更容易地理解项目,但它不能代替你去动手实践。
什么是系统设计?
在讨论如何提升系统架构能力之前,需要先搞清楚:什么是系统设计?
想想看,如果你做一个简单的网页,或者一个小脚本,需要系统架构吗?基本上是不需要的,因为足够简单,有没有架构都能写出来。那如果是要做一个 ChatGPT 这样的应用呢?那是一定要有很好的系统设计的,因为太复杂了!而且一个人也是做不出来的,需要很多人甚至很多团队协作才能完成。
但即使是 ChatGPT 这么复杂的系统,在开发团队工作的每一个人,工作职责并没有非常复杂。比如有的人只负责实现模型的 API 封装、部署,有的人只负责 Canvas 这样的文本编辑组件,有的人只做 iOS 客户端上的某个功能。一个复杂的系统,通过系统设计,把复杂系统层层分拆,变成了一个个小的模块,最终这些模块组合在一起就可以运行起来,让用户可以稳定地使用 ChatGPT 的服务。
所以系统设计,就是把一个复杂的系统拆解成容易理解、容易实现、容易维护的小模块,再清晰地定义好这些模块之间如何相互协作、相互沟通的过程。
通俗点讲,就好像你盖一栋大楼,系统设计就是设计图纸。图纸上详细说明了楼的结构,比如地基、钢筋框架、墙体、管道和电线,明确告诉施工人员每一部分怎么盖,哪些部分先盖,哪些后盖,哪些部件之间是如何连接起来的。
如何做系统设计?
系统设计这件事看起来很神秘,系统架构师似乎都是传奇般的存在,但做系统设计这事也没你想的那么复杂,因为绝大部分系统设计都有成熟的方案可以参考。作为架构师,可以灵活应用成熟的架构模式,一般是不需要去发明新的架构模式的。
但系统设计也没有那么容易,否则人人都是架构师了。系统设计难在哪呢?
• 要充分理解需求和团队:我把理解需求和团队放在了第一位,因为系统设计是为需求服务的,你不理解需求做出来的设计那可能都是错的;同时系统设计要和组织架构匹配,毕竟你的系统设计出来,还是需要团队去实施的。如果你就两三个人整几百个微服务显然是有问题的,反过来你几百个人的团队还是单体应用也可能是有问题的。
• 要面对不确定性:系统设计不像写代码是一个确定性很强的事,代码模块的输入和输出都是固定的,只要去实现算法就好了。但是系统设计面对的是不确定性:需求不确定、未来的发展不确定、技术选型的影响不确定。你需要在这种不确定中做出相对稳健的决策。
• 要权衡取舍:在系统设计中,几乎不可能有绝对完美的方案,通常都是在多个选项之间权衡。例如要兼顾性能和成本、扩展性和开发复杂度、安全性和用户体验等等。这就要求设计者能做出合理的决策,并理解每个选择背后的得失。举个例子,选择微服务架构可能带来更好的扩展性,但也会增加运维复杂度和网络开销。
• 要沟通说服:系统架构不仅仅是给自己看的,更重要的是要让团队的所有成员都理解你的设计,甚至是非技术人员也能大致明白整体结构。这需要架构师具备良好的文档编写和表达能力,用清晰的语言、图表、流程来传递设计意图。不仅如此,在做系统设计时,并不是你做个设计别人就能认同的,你需要去说服别人认同你的设计,有时候也必须做出一些妥协。
当然到了 AI 时代,有些地方还是有些改善的。比如你资源不够就可以用 AI 凑,不善于表达就让 AI 帮你写原型写文档,不知道如何取舍就用 AI 分别实现一套 POC(概念验证),再对比看效果。
新人如何提升系统设计能力?
系统设计并没有快速通道,更多的是长期积累的过程,这个时间通常是以年计的。总结下来关键是三点:"多看"、"多练"和"多复盘"。
"多看":积累架构模式
就是学习经典的架构案例,知道有哪些架构设计的方法。网上有很多系统设计面试题和分析,都是很好的学习素材。另外还可以看开源项目,看看复杂的开源项目是怎么运行的,多关注:
• 这些系统是如何拆分功能模块的?
• 模块之间又是如何通信的?
• 为什么他们选择了某种特定的技术或架构方案?
• 在实际中遇到了哪些挑战,又是如何解决的?比如微博是怎么 8 明星并发出轨的?
推荐一些学习资源:
• System Design Interview Alex Xu 写的这本系统架构设计面试书,系统地介绍了常见的架构模式
• High Scalability 网站,收录了大量真实系统的架构案例 highscalability[.]com
• 开源项目如 Kubernetes、Kafka、Elasticsearch 的架构文档
"多练":从模仿到创新
除了理论学习,更重要的是主动去练习。系统设计这种事,哪怕你像 AI 一样训练了所有公开的系统设计方案,但你不试试仍然不会知道它们在不同的应用场景下的优缺点是什么。就像微服务从来不是个技术问题,而是一个和组织架构相关的问题。
新人的话,最好是从模仿开始,先照葫芦画瓢,然后再去按照自己的思路去改进。
一些你可以练习的方式:
1. 架构还原练习:选择一个你熟悉的系统或产品,试着去拆分架构,画出架构图;写下每个模块的功能定义,明确模块之间如何通信;再去找懂这个系统的人请教对比。
2. 对比学习:去看看类似功能的开源系统,看设计方案有什么不同,各自的优缺点是什么。比如对比 Redis 和 Memcached 的架构差异。
3. 设计先行:在做一个相对复杂的功能时,先去做一下设计再开始写代码。哪怕是个人项目,也要画架构图、写设计文档。
4. AI 辅助验证:尽可能把要实现的模块,用自然语言描述清楚,让 AI(推荐 Claude、Gemini、DeepSeek 等模型)去实现,看结果和你期望的差距在哪里。如果不是你想要的,去反复调整你的描述或者继续分拆,直到 AI 能实现你想要的效果。这个过程其实是在训练你的模块化思维。
5. 重构现有系统:去重构现有系统,在稳定性、代码重用、性能这些方面去改进。重构的过程会让你深刻理解原有设计的问题。
6. Side Project 实战:去做 side project,先尝试基于开源项目二次开发,再尝试从头搭建一套相对复杂一点的系统。比如做一个简化版的分布式消息队列、一个迷你版的容器编排系统。
只有在真实项目中踩坑、解决问题,你才真正能理解系统设计中各种取舍的意义。
"多复盘":从经验中提炼智慧
每次做完项目或者完成一段设计后,都要回顾总结一下过程:
• 当初做决策的依据是什么?这些决策后来验证效果如何?
• 如果再做一次,哪些地方会做不同的选择?
• 遇到的困难和挑战是什么?分别是如何克服的?
• 是不是有更好的技术或架构选择当时被忽略了?
• 团队成员的反馈如何?他们是否理解并接受了你的设计?如果不接受,原因是什么?
复盘是让你从具体实践中提炼出通用方法论的重要环节。只有反复总结和不断优化,你的系统设计能力才能逐渐提高。
AI 时代更要用好 AI 帮你提升系统设计水平
在学习系统设计的过程中,AI 虽然无法替代你完整地设计架构,但可以成为你提升能力的重要工具,助你快速成长:
• 快速查资料与案例:让 AI 帮你迅速搜集和整理系统设计的案例与最佳实践,大大节省学习成本。比如你可以问 AI:"给我解释一下 Circuit Breaker 模式在微服务中的应用场景"。
• 辅助实践:你可以把自己设计的模块先让 AI 尝试实现,以检验你的设计思路是否清晰合理,从反馈中不断优化设计。这就像有了一个永远在线的结对编程伙伴。
• 辅助沟通:你可以先把复杂的设计和思路告诉 AI,由 AI 帮助你简化表达,生成易于团队沟通和理解的文档。甚至可以让 AI 帮你生成架构图的描述文本。
• 辅助决策:当你在不同架构方案间犹豫时,让 AI 帮你分析每种方案的优劣势和适用场景,帮助你快速做出选择。AI 可以快速给你列出各种方案的 trade-off。
• 模拟场景:你可以让 AI 模拟不同的故障场景,帮你思考系统的容错设计。比如"如果数据库挂了,我的系统会怎样?"
架构设计能力的提升关键还是在人,而 AI 则能帮助你更高效地学习、更快速地试错和迭代,加速你成为合格系统架构师的步伐。
写在最后
原本只是打算简单写写的,不小心还是扯多了。没办法,系统设计这种事是真的没什么捷径好走,只有坚持学习。当然方法得当还是能加速一点。
在 AI 时代,架构师的价值不是被削弱了,而是被放大了。因为 AI 让实现变得更容易,所以设计的好坏会更加明显地影响最终结果。一个好的架构设计,配合 AI 的实现能力,可以让你的生产力提升十倍甚至百倍。
希望你早日掌握好架构设计,不用担心被 AI 替代,反而可以利用系统设计能力让 AI 更好地为你效力。毕竟,AI 再厉害,也需要有人告诉它要造什么样的房子,不是吗?
点击图片查看原图