乐于分享
好东西不私藏

软件架构师的修炼之路:从理论到实战的六个核心能力

软件架构师的修炼之路:从理论到实战的六个核心能力

你不需要样样精通,但必须要有实战的经验。从别人那里看来的、听来的、书上看到的理论知识,在没有实际上手之前,都只是空感。

运营能力:最容易被忽略的一环

在所有的技能里面,运营是最容易被忽略的。不少架构师会觉得交付了设计之后就收工了;有些比较负责任的,会一直监督整个开发过程,但开发发布了,也会觉得已经结束了。

实际上,从你的设计、开发到上线,这些都只是前期。从系统上线那一刻起,一直到它生命周期的终点之前,你都应该为这个系统负责。设计只是开始,而不是结束。

实战经验:学校教不了的功课

你在学校里面学到的东西是远远不够的。就算读了研究生、读了博士,离开学校来到业界的第一天开始,每天都会有新东西出现,每天也在不断淘汰旧的东西。

真正的好东西,是可以给生产力带来质的飞跃的——以前类似需求做不好的东西,新技术能够让你一步到位。但有些自认为打着新技术旗号的东西,其实是在重复造轮子,很容易被分辨出来。它只给你带来一些不同的体验,但那个体验并没有非常明显的真正变化。

如何辨别它们,是架构师很重要的职责。

技术选型:三年法则

我个人的做法是:让一个新技术沉淀三年。如果它在三年里面能够进入主流、形成一个稳定的生态圈,那它就是好东西,这个时候你就可以上手去用了。

举个例子:我刚刚上线了一个电商品牌,是在微信小程序上面的。从前端到后端的所有技术栈里面,除了 PostgreSQL 之外,其余全部都是最近十年内发布的新技术。我选用它们也是在它们发布了三到四年之后才开始上手。

等这几年除了能够看它是不是会成为一个成熟的技术之外,还有一个好处——可以避开它早期会经历的那些大规模改动和升级。

就拿 React 来说,早期的 class 组件设计,到 functional components 设计,再到 16.8 版本推出 React Hooks 的设计,每一次都是颠覆性的改动。除非你个人特别喜欢折腾这些东西,否则真的没有必要浪费时间在那些大改动上。等它稳定了、语法稳定了、功能稳定了、生态圈稳定了,这个时候再入场,就是最合适的。

行业认知:设计要走在需求前面

以一个物联网广告系统为例:终端会时不时跟云端的主服务交换数据,比如下载新的广告图片和视频。

最初的设计中,云端有一个虚拟对象来同步和管理这个终端——很像镜像对象和终端的关系,是一对一的。但因为身处广告行业,有很多特殊情况需要考虑:

  • 一对多场景:很多个屏幕会同时同步播放一样的内容,营造铺天盖地的广告效果。一个虚拟对象需要控制一组多个实体终端。
  • 多对多场景:广告行业受到政府和相关机构的监管,因为终端安装在现实世界中,政府部门也要对这些终端进行控制和管理。从云端账号的角度来说,关系变成了一对多——很多个不同的管理者对同一个终端进行管理。

虽然在项目前期,这些需求还没有被提出来,但在设计的时候,只要你稍微了解一下行业情况,就知道系统在发展过程中肯定需要不断升级、不断加入各种功能来满足更多客户需求。所以在一开始就应该把它设计成多对多的架构,那么在之后的改动中,很多东西不需要重构,只需在现有基础上新增一些表达。

洞察力:别让客户牵着走

亨利·福特说过一句名言:

"If I had asked people what they wanted, they would have said faster horses."

如果一开始造车的人按照客户的要求来造,他们只会造出更快的马,而不是汽车。千万别依赖你的客户告诉你该做什么。 如果他们很清楚自己的问题要怎么解决,就不会来找你了。

大部分情况下,客户向你描述的都是他们直接面对的表层问题。你应该先挖掘问题的根源,然后找到解决根源的方法,最后再说服他们采用你的方案。

沟通能力:架构师的隐藏技能

一般情况下,架构师需要对话四类人:

  1. 项目负责人 - 项目成功时功劳最大,出问题时也第一个被问责
  2. 公司高层 - 视公司规模和项目重要性,可能一直上升到 CTO 层面
  3. 客户方负责人 - 一般在项目开始时对接,项目结束时露面验收
  4. 最终用户 - 企业级产品是客户方的员工,消费级产品则是外部用户

他们的角色定位不同、支持背景不同,而且非常重要的一点——你能在他们面前发言的时间和机会也非常不同。通常来说,汇报级别越高,时间越少,内容就需要越浓缩。

所以架构师必须学会提炼重点——少废话,把对方关心的信息快速准确地传达过去。而且比起产品经理,架构师还有一个额外的挑战:你要表达的信息基本上都会掺杂大量的技术类专业内容,但你的听众很多都不是内行。所以你不能闷头堆砌专业术语,要有引导的技巧,站在对方的角度去理解,让对方听得懂你说的话。

总结

真正的知识是不会过期的。无论是运营经验、技术判断力、行业洞察、需求分析还是沟通能力,这些能力不是从书本上能直接获取的,而是在日复一日的实战中慢慢沉淀出来的。架构师的成长没有捷径,但方向很明确——设计只是开始,责任贯穿始终,永远保持对行业和技术的好奇心。