"卓越工程"这个词,在不同的语境里指向不同的东西。在硅谷,它可能意味着"快速迭代,允许失败";在传统行业,它可能意味着"严格规范,零缺陷";在学术圈,它可能意味着"理论的优雅与严谨"。
但这些表面的差异之下,有一些共通的东西。这些东西不是具体的工具或流程,而是一套关于"如何把事情做好"的底层心智模式。它们适用于写代码、建系统、带团队,也适用于解决日常生活中复杂的非技术问题。
这篇文章想尝试梳理这些共通的东西——那些让工程师从"合格"走向"卓越"的思维习惯。
奥卡姆剃刀原则说:"如无必要,勿增实体。"在工程领域,这意味着在满足需求的前提下,选择最简单的方案。
这听起来很简单,但实践起来极难。因为"简单"往往是事后看起来简单,在决策的那个时刻,我们容易被各种因素干扰:对未来的过度猜测、对技术潮流的盲目追逐、对自己能力的过度自信。
一个真实的例子:团队在做一个新功能,技术负责人提议用一套全新的技术栈。"虽然现在用不上,但将来可以承载更多场景。"结果项目延期了三个月,而那个"将来"一直没有到来。
卓越工程师有一种能力:精确区分"当下必需的"和"将来可能需要的"。他们不抗拒变化,但拒绝为不存在的需求提前支付复杂度成本。
当然,过度简化也是危险的。为了"简单"而牺牲了扩展性和可维护性,那是另一种短路。关键在于找到那条分界线:一个方案,在满足当前需求的前提下,应该尽可能简单,但不应更简单——后者是爱因斯坦对奥卡姆剃刀的补充。
心理学里有一个概念叫"第二序改变":当你困在一个模式里时,在这个模式内部解决问题(第一序改变)往往是无效的;真正有效的,是跳出这个模式,改变规则本身。
工程领域到处都是这样的例子:
卓越工程师的习惯是:当一个问题反复出现时,他们会停下来问"这个问题真的需要这样解决吗",而不是继续用更大的力气做同样的事。
这需要一种能力:从具体问题中抽离出来,看到更宏观的模式。这也是为什么好的工程师往往有跨领域的兴趣——那些看似无关的知识,有时恰恰提供了"第二序改变"的视角。
工程系统是复杂的,而复杂系统最显著的特征是:因果关系在时间和空间上不是紧耦合的。
你改了一行代码,用户感受到变化可能是几周之后(经过测试、发布、灰度、全量)。你为了提升性能加了一个缓存,半年后发现数据不一致的问题开始显现。你为了"更灵活"做了一个抽象,三年后它成了所有人不敢碰的历史包袱。
卓越工程师理解这种"延迟的反馈"。他们不会因为今天没出问题就认为方案是好的,也不会因为今天出了问题就急于下结论。
系统思维的另一个重要面向是存量与流量的概念。代码库是一个存量,每天提交的代码是流入,删除的代码是流出。如果流入大于流出,存量就会增长。而存量增长是有代价的——每增加一行代码,就多一行的维护成本、理解成本、潜在缺陷。
真正优秀的工程决策,往往需要慢下来。在加一个新功能之前,先想想有没有旧代码可以删。在做技术选型之前,先理解团队的上下文,而不是直接套用大厂的方案。
工程本质上是"在约束下做决策"。资源有限、时间有限、人力有限,任何决策都是在多个目标之间的取舍。
卓越工程师不追求"完美"——因为完美在现实世界里不存在。他们追求的是"在给定的约束下,做出当前最优的权衡"。
需要考虑的维度通常包括:
关键在于让取舍变得可见和可讨论。一个决策如果是基于"我觉得这样比较好",那就是一种隐蔽的取舍;如果把它明确说成"我们选择A,是因为我们愿意接受B的代价",那就是一种负责任的决策。
代码是写给机器执行的,但首先是写给人类阅读的。这是计算机科学界的共识,但在实践中常常被遗忘。
卓越工程师写出的代码,不只是"能跑",而且是"被理解"的。变量名传达意图,函数保持单一职责,注释解释"为什么"而不是"怎么做"。代码审查时,他们提出的问题不只是"这里有问题",而是"这里的意图是什么?有没有更清晰的方式?"
沟通能力同样体现在文档和口头表达中。一个卓越工程师能够把一个复杂的技术问题,用不同层次的语言解释给不同背景的人听——给产品经理讲业务影响,给管理者讲资源需求,给同行讲技术细节。
这种能力不是天生的,它是被训练出来的。每一次写文档、每一次技术分享、每一次跨部门沟通,都是一次训练的机会。
技术变化很快。十年前的主流技术栈和现在已经大不相同,而十年后也会如此。
卓越工程师知道这一点。他们不把自己的身份和特定的技术绑定在一起,而是保持一种"开放但不过度追逐"的态度。他们会花时间理解新技术的核心思想,但不会为了追逐潮流而牺牲稳定性。
更重要的是,他们有一种专业上的谦逊。他们知道自己的知识有边界,知道哪些领域自己不擅长,并且愿意在这些领域向他人学习。这种谦逊让代码审查变得友好、让技术决策变得理性、让团队协作变得顺畅。
以上这些,本质上都是个体层面的特质。但卓越工程不只是关于个体,更是关于个体如何嵌入群体。
一个卓越工程师会让周围的人都变得更好:通过清晰的代码树立榜样,通过友善的审查帮助同事,通过系统设计降低整个团队的认知负担。
他们理解:好的工程,不是某个人的英雄主义,而是整个团队在很长一段时间里保持稳定输出。他们愿意花时间写文档,不是为了自己,而是为了让后来者能更快上手;他们愿意重构代码,不是为了炫技,而是为了让维护成本持续降低;他们愿意耐心解释决策背后的原因,而不是直接用权威拍板。
这种"让系统变得更好"的意愿,最终超越了技术本身。它关乎的是:我们共同构建的东西,不只是今天能跑,而是明天、后天,以及更远的未来,依然能被理解、被维护、被改进。
卓越工程不是一种状态,而是一种方向。没有人能宣称"我已经达到了卓越",但每个人都有机会"比昨天做得更好一点"。
那个"更好一点",可能是一次更清晰的重构、一次更周密的测试、一次更友善的审查、一份更完整的文档、一次更开放的讨论。它们看起来不起眼,但日积月累,构成了优秀系统的基础。
工程是一门关于"把想法变成现实"的学科。而卓越工程,是这门学科中最值得追求的部分——它不只是关于技术,更是关于人与系统如何更好地协作。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。