04|王建刚:速度慢不可怕,加速度慢才可怕
你好,我是王建刚,软件工程师,目前在亚马逊从事电商架构的设计与研发工作。
今天我们来聊聊软件工程师的“个人成长”这件事儿。过去一年,我在个人成长上投入了很大精力。不过我可不是玩儿命地瞎折腾,而是抽象了一个体系化的个人成长框架,主要包括专业素养提升、交互能力修炼、先进技术学习以及个人经验沉淀四个方面。接下来让我一一分享给你,希望你能有所收获。
专业素养提升
先说说专业素养提升这事儿。如果你也是软件工程师的话,你对专业素养的看法是咋样的呢?在我看来,专业素养是软件工程师的立身之本。专业素养不过硬,其他都是花架子。
但话又说回来了,想提升专业素养,可真没那么容易。对于咱们软件工程师这个岗位,我认为,只有做到“知”、“行”、“思”三位一体,才能最大程度上提升专业素养。
接下来,我将以软件架构这个话题为例,来跟你谈谈我具体是怎么“知”、“行”和“思”的。
知——软件架构原则
软件架构设计对软件工程师的考验是全方面、多维度的:既需要你有扎实的计算机基础,又需要你有丰富的架构设计经验,还需要你有出色的与人交互的能力。
计算机基础相关的理论知识,我主要通过读书的方式学习,因为图书能够比较体系化地组织知识,尤其在信息获取碎片化大行其道的今天,能够摄取体系化的知识就显得更加珍贵了。
过去一年里,我重读了《深入理解计算机系统》(CSAPP) 一书,依然收获巨大。了解计算机是如何工作的,了解程序是如何跑起来的,就相当于开了上帝视角,能够看清事情的来龙去脉。不得不说,经典书籍就是值得一读再读。
跟学习计算机基础理论不一样,获取架构设计经验则更多来自于实际项目的积累,想要快速进阶很难,我个人认为非常有效的一个办法,是和更有经验的架构师取经论道,“借过来人的眼睛看世界”,然后慢慢建立自己的架构理解。
这在以前可能门槛比较高,甚至是不可复制的方法。但现在,有“极客时间”这样的平台作为桥梁,我们得以与更有经验的架构师建立连接,汲取营养。这其中的收获是“闭门造车”所不能比的。
过去一年间,我学习了三门软件架构相关的课程,分别是《郭东白的架构课》《许式伟的架构课》和《周志明的软件架构课》。三门课程虽然都是聊架构,但各自的视角不同。
- 《郭东白的架构课》从技术领导者的视角出发,阐述架构设计的道与术。
- 《许式伟的架构课》从建立信息世界的源头出发,阐述架构设计的思维范式。
- 《周志明的软件架构课》则从软件系统架构的发展史出发,阐述如何构筑可靠的大型软件系统。
但我又惊喜地发现,虽然三位老师阐述的视角不同,但其中有一些共通之处,比如都强调“全局视角”的重要性,也都强调“知识体系”的重要性。本来每一位资深的架构师分享的实战经验就已经弥足珍贵了,当我从这些经验中又发现这些共通之处的时候,着实有一种如获至宝的感觉。
行——软件架构设计
软件工程师,“工程”二字很重要。单纯地阅读理论书籍或学习软件架构课程而不实践,效果将会大打折扣,也很难达到“为我所用”的境界。我曾主导过线上服务的分布式架构升级,深知架构升级的过程充满了各种细节,在软件研发行业,细节就是魔鬼。因此,只学习不实践就是纸上谈兵,无法将知识和别人的经验真正内化。
可能有的人会说,工作中没有实践的机会。确实,机会永远是有限的。面对这个问题,我的做法是,“没有机会就自己创造机会。”
打个比方,假如你没有机会进行生产级服务的架构设计或升级改造,那你可以选择一个自己熟悉的业务方向,从 0 设计一个架构方案,然后再同线上实际的方案进行优劣对比,并追究架构决策背后的原因。这也是一种实战,主动的人永远不缺机会。经过多次训练,你会慢慢养成自己的架构体感。
思——架构支撑业务
软件架构要有业务视角,这一点对大多数软件工程师的成长都极为关键。对于想更进一步的软件工程师而言,仅仅有技术视角是不够的,因为技术是为业务服务的,业务视角能帮助我们做出更有利于业务长期发展的技术决策。
在过去一年中,我通过梳理电商架构的蓝图在自己脑中构建起一个全局视角,然后再结合自己的兴趣,对搜索方向进行业务探索。
经过对市面上电商搜索业务的学习和调研,我得到了下面这张架构图。

输出架构图的过程,事实上也是我建立全局视角的过程。经过这个过程,我对业务的理解更加深刻,对决策背后的原因和权衡也更加清楚,对未来的优化方向也更加心中有数。这些都是纯技术视角很难带来的宝贵经验。因此,不管你从事什么业务,我都建议你这样做。
总而言之,专业素养的提升没有捷径,唯有“知”、“行”、“思”三位一体,稳扎稳打,日积月累,才能卓有成效。在我看来,对于专业素养的提升,不走捷径才是真正的捷径。
交互能力修炼
一名杰出的软件工程师,不仅需要具备过硬的专业素养,还要具备出色的交互能力,比如沟通能力、协作能力、写作能力以及语言能力。
为什么这么说呢?在我看来,衡量一个软件工程师是否“杰出”,有且只有一个指标——能否快速解决实际问题。
如果仔细思考,你会发现,上面这些几乎都是快速解决实际问题所必需的能力。因为在实际工作环境中,软件工程师不仅需要与计算机打交道,还要与人打交道。
在工作中与人打交道,不仅需要过硬的专业素养,还需要出色的交互能力。每个人,每个团队也是一个系统,而交互能力则是与这样的系统打交道不可或缺的。
对于交互能力的修炼,我的经验是“创造环境,刻意练习”。
在过去一年的时间里,我对软件工程师这个岗位所需要的沟通、协作、写作以及语言能力进行了系统性思考,在此分享出来,供你参考。
沟通能力
都知道沟通能力很重要,但到底什么是沟通能力呢?在这里,我并不想给沟通能力下一个严谨的定义,而是换一种更实用的方式帮你理解。
沟通能力是一个复杂的概念,当面对复杂事物的时候,我的第一反应是能否对其进行拆解。对于沟通能力而言,答案是肯定的。
我将沟通能力拆解为以下几个子能力:表达能力、倾听能力、应变能力以及冲突解决能力。这样一来,想提升沟通能力就可以刻意练习每一个子能力了。那么问题来了,如何刻意练习?
我的做法是向自己提问:
- 表达能力:我的表达是否清晰?能否一句话把问题说明白?是否阐述了对方理解问题所必需的上下文?
- 倾听能力:我的倾听是否认真?能否代入对方的角色换位思考?是否理解了对方想要表达的真正含义?
- 应变能力:我的应变是否灵活?能否从容应对沟通中突如其来的变化?我的反应会给对方造成哪些影响?
- 冲突解决能力:沟通过程产生冲突时我是否保持理性?能否求同存异?解决沟通冲突所需要的流程是怎样的?
看上去似乎有些复杂,但人是社会动物,我们几乎每天都需要与他人沟通,有太多可以练习的机会。只要有这个意识,然后付诸行动,提高沟通能力就不再是一件困难的事。
协作能力
协作能力是沟通能力的进阶版本。良好的协作自然离不开良好的沟通。但除此之外,协作的内容还包括分享、行动和冲突解决。注意,这里的冲突解决与上文提到的沟通中的冲突解决是不同的概念,它涵盖的范围更加广泛,包括但不限于语言、资源、利益等方面冲突的解决。
在与他人进行协作的过程中,我会问自己四个问题:
- 大家是否有共同的目标?
- 这件事是否对自己的持方有利?
- 这件事是否对协作方有利?
- 当上面三个问题中任意一个答案为否时,各方都认可的解决问题的标准流程是怎样的?
在理清上面这四个问题之后,我对协作各方之间的关系,以及自己在协作中的定位就有了比较清晰的认识,也拥有了解决冲突的“尚方宝剑”——各方都认可的标准流程。
写作能力
写作能力是沟通能力的分支,之所以单独拿出来讲,是因为写作作为书面表达,有其持久存储的特性。写作的内容可以作为个人、团队甚至公司的数据资产,也能作为项目进度跟踪和问题定责的依据。因此,我们需要以更加严谨的态度对待。
为了锻炼自己的写作能力,我也参加了极客时间组织的“技术人 21 天写作行动营”。我很赞同的一点是,想要提升写作能力,需要学习,需要思考,但更需要“行动”。在某种程度上,提升文字功底和提升代码水平一样,都是行动至上,这也是我参加行动营的原因。
在这个过程中,我也很高兴能得到极客时间的认可,收获“极客时间创作大使”的荣誉。
语言能力
语言能力是沟通能力的基础,在国内本土公司工作,语言能力可以理解为普通话水平。在外企工作,语言能力可以理解为公司范围内沟通所需语种的水平。
对于现在的我来说,语言能力就是英语能力。为了能与世界各地的同事高效沟通,英语能力必不可少,这在我刚加入公司时是不小的挑战。但我发现,人在没有退路的时候,如果态度正确,进步反而会更快。
对我个人而言,读写能力是没有太大问题的,而且离线的英文沟通还有各种翻译工具和润色工具的加持,因此并不是我关注的重点。而听说能力则不一样,因为它要求来自我个人的实时反馈。
在过去一年里,我也在提升英语听说能力方面下了不少功夫,一句话总结就是:“单词记起来,美剧刷起来,外教聊起来。”
- 单词记起来:词汇量作为听说能力的支撑,其重要程度自不必说,至于常用的商务英语单词都有哪些,我的建议是善用搜索引擎,只需要动动手,你就能找到不错的答案。
- 美剧刷起来:美剧可以训练听力,也可以学习 native speaker 的表达方式,这也在一定程度上帮到了我。不过,实践的时候要注意,你的目的是学英语,而不是追剧!至于哪些美剧比较适合学英语,我的建议还是善用搜索引擎,只需要动动手,你就能找到不错的答案。
- 外教聊起来:对于学一门外语而言,还有什么比与当地人聊天更直接高效的吗?!至于如何找到靠谱的外教,我的建议依然是善用搜索引擎,只需要动动手,你就能找到不错的答案。
总而言之,交互能力决定着你的职业发展上限。随着职业发展,你的影响力辐射面积逐步扩大,交互能力将越发重要。如果你自我感觉交互能力有短板,不妨和我一样,把提升交互能力作为一个长期课题来进行修炼。提升效果虽不会立竿见影,但只需假以时日。
先进技术学习
接下来再说说学习先进技术。软件工程师为什么要学先进技术呢?我觉得可以用一句话来总结:把握未来的技术方向和演进趋势。如果能把握未来的技术方向和演进趋势,就意味着你能拥有领先大多数人的先发优势,这将极大增强你的个人竞争力。
至于如何判断一个技术是否是未来的方向,我在此引用陈皓老师《左耳听风》书籍中的观点。
技术的发展要扎根于历史,而不是基于对未来的设想,承前的技术才会常青。请不要告诉我某项新技术未来会变得多么美好,我承认,用一些新技术可以实现很多花哨的效果,但很多对“某某技术要火”的预测都是没有根据的。只有应用场景变广、应用规模扩大,才能说一项技术真的“火”了。
对于这个问题,我认为 HashiCorp 联合创始人 Mitchell Hasimoto 提到的名为“即时价值”的评价指标,与陈皓老师的观点有异曲同工之妙。一味地谈潜在价值就是基于对未来的设想,即时价值则是实实在在的,更有说服力。
在了解了“为什么”之后,我们再来聊聊“怎么做”的问题。关于这个问题,我想先给你分享一个我的实际经历。
过去一年,随着 AIGC 的爆火,我嗅到一种影响深远的科技革命的味道。因为,生产工具的选择对于生产力的提升起着至关重要的作用,而当下的 AI 正是这样一种先进的生产工具。
我在工作中有意识地上手了很多 AI 加持下的提效工具,比如 Amazon CodeWhisperer (与 Microsoft Copilot 类似,但 CodeWhisperer 个人用户完全免费使用,且更了解 AWS 相关的技术栈),Amazon Q (与 ChatGPT 类似,但更了解 AWS 相关的技术栈),Warp (一款集成 AIGC 能力的 terminal 工具)等等。
我也发现,AI 远称不上完美,但变革正在时刻发生,它的时代确实已经来了。我的看法是,咱们软件工程师作为离 AI 最近的一部分人之一,应该积极拥抱这样的变化,做时代的弄潮儿。
对 AI 的学习只是一个例子,面对先进技术,早就是优势,不要观望,要去体验。你也可以结合你自己的实际情况,想一想有哪些先进技术是值得你去学习的,然后去沉浸式地体验一把,这对逐步培养你的技术洞察力很有帮助。
个人经验沉淀
最后我们来聊聊个人经验沉淀这件事儿。
软件工程师要有总结、积累和沉淀自己经验的意识。这一点,我在刚参加工作的头两年并没有意识到,也因此走了很多弯路,用宝贵的时间换了不少教训。我逐渐明白了一个道理:“速度慢不可怕,加速度慢才可怕。”
所有大佬都是从小白成长起来的,大家的初始速度都差不多,为什么有些人能越走越快,最终从千军万马中脱颖而出呢?因为他们拥有超越常人的加速度。而在我看来,经验沉淀是提升未来个人成长加速度的关键。
那么问题来了,如何沉淀自己的经验呢?我的做法是笔记 + 回顾 + 反思。虽然听起来是个很朴素的办法,但它跟系统测试过程常用的“流量录制与回放”如出一辙。笔记是当时情况的快照——“流量录制”,回顾是重现当时的情况——“流量回放”,而反思,就是为了拿到新的“经验数据”。
在这个过程中,我会有一种感觉,以前觉得很困难的问题,现在看来根本没什么;以前觉得很完美的方案,现在看来又值得商榷;以前觉得很重要的,现在看来也没那么重要,反倒是以前忽略的,现在觉得更有价值。我把这个感觉叫做成长。
过去一年里,我根据笔记梳理了自己过往的工作经历,回顾每一个里程碑,分析彼时彼刻的处理方式,反思其中的可取之处和历史局限。不断将那些可取之处烙印进你的习惯,你就逐渐形成了自己的风格。不断总结历史局限给你带来启发和教训,你就慢慢积累了独特的经验。而这就是你的优势。
好了,个人成长框架的四个方面就讲到这里,接下来让我们对上面的内容做一个总结。

以上就是我对“个人成长”的一些理解。现在,我把接力棒交到你手上,请你来思考和分享一下:过去一年,你在个人成长上做了哪些努力,又有哪些感悟呢?
好了,这节课就到这里。如果你觉得这一讲的内容对你有帮助,也欢迎你把这一讲的内容分享给身边的朋友。最后,希望你能更好地达成个人成长目标,实现你的独特价值。新的一年,我们一起,继续加油。