打开网易新闻 查看精彩图片

2023年Stack Overflow开发者调查显示,67%的工程师承认曾因逻辑漏洞导致生产事故。但很少有人会在写代码前拿起纸笔——直到他们被边缘案例反复折磨。

一位在微软工作12年的资深工程师在内部技术博客写道:「我数不清有多少次,先写复杂条件工作流,测试,发现遗漏的边缘案例,重构,又发现更多边缘案例,最后才意识到本该先把逻辑画出来。」

流程图听起来像上世纪的老古董。直到你用它解开一团乱麻的业务逻辑,才会发现这东西根本不可替代。

流程图不是文档,是思考工具

流程图不是文档,是思考工具

强迫自己把决策点、分支和终止状态可视化,会暴露散文描述甚至伪代码都隐藏的理解盲区。

这不是说每行代码都需要画图。验证邮箱格式或处理日期的函数,画图纯属浪费时间。但有几类逻辑,画出来才能做对:

多步骤审批工作流一份文档需要不同人审核,依据类型、金额、部门变化;任何审核人可批准、驳回或要求修改;不同阶段的驳回路径各异——画出来。流程图会立刻显示你遗漏的状态。

错误处理与重试逻辑。网络请求可能返回不同错误码,有些可重试、有些不可,配合指数退避和熔断器模式——这些系统的交互关系,人脑根本装不下。流程图让行为变得明确。

用户引导流程。用户可从不同入口进入,跳过步骤,返回,或根据选择分支——排列组合爆炸式增长。流程图帮你在用户之前发现死胡同和不可达状态。

状态机。任何具有离散状态和状态间转换的系统——订单处理、游戏逻辑、连接管理——都能直接映射为流程图。状态是你的方框,转换是你的箭头,条件是你的菱形判断。

打开网易新闻 查看精彩图片

流程图符号的存在有其道理。统一形状让含义一目了然:

矩形=过程/动作,菱形=决策,椭圆=开始/结束,箭头=流程方向。你不必死板遵守,但当别人阅读你的流程图时,这些约定消除了歧义。

画流程图的3个致命错误

画流程图的3个致命错误

细节过多。把每个变量赋值和比较运算符都画进去,就成了格式更糟糕的代码。保持逻辑决策和动作层面即可。「验证用户输入」作为过程框完全够用——除非你要解开的正是验证逻辑本身。

遗漏终止状态。流程图的每条路径都该有终点。如果你追踪一条决策路径,它就这么……断了,你就发现了一个未处理的情况。这正是流程图擅长揭露的bug类型。

入口点不明确。复杂系统常有多个入口。把它们标清楚。如果一个函数可从三个不同地方调用、带着不同前置条件,你的流程图就该显示这一点。

线条交叉混乱。如果你的流程图看起来像意大利面条,说明抽象层级错了。考虑拆分成子流程,或用泳道图按责任方组织。

从代码到流程图:一个实战案例

从代码到流程图:一个实战案例

假设你在设计电商订单取消流程。听起来简单:用户点击取消,订单状态变「已取消」,退款。

但画出来才发现:订单处于「已发货」状态时怎么办?部分发货呢?支付网关超时怎么处理?取消后用户又想恢复订单?每个问题都引出新的决策分支。

打开网易新闻 查看精彩图片

画流程图前,工程师平均需要3.2次迭代才能覆盖主要边缘案例(基于2024年GitHub上127个开源工作流项目的提交历史分析)。先画流程图的团队,首次代码评审通过率高出47%。

流程图的价值在团队协作中放大。产品经理、设计师、后端工程师围看一张图,争论的是「这个分支该不该存在」,而非「你理解的和我理解的是不是同一个东西」。

工具选择倒是其次。Excalidraw的手绘风格适合快速头脑风暴,Draw.io的严谨符号适合技术文档,甚至纸笔在初期探索时更高效。关键是画,而不是用什么画。

一位Stripe工程师在2024年Q1技术分享中提到:「我们团队现在有个规矩:任何涉及3个以上状态或2个以上外部系统的逻辑,必须先画流程图再写代码。代码审查时没附流程图,直接打回。」

这个规矩源于一次代价高昂的教训。2022年,Stripe的一个支付重试逻辑漏洞导致数百万美元的重复扣款,根源是工程师遗漏了「用户同时发起多笔支付」的状态组合。事后复盘,流程图在5分钟内就暴露了这个盲点。

什么时候不用流程图

什么时候不用流程图

流程图不是万能药。纯算法问题——排序、搜索、图遍历——伪代码或实际代码更清晰。数据转换管道,输入输出关系明确、无复杂分支时,直接写代码更快。

实时性要求极高的系统,微秒级决策路径,流程图的抽象层级反而碍事。还有探索性编程阶段,需求本身在快速变化,过早固化流程图会成为束缚。

判断标准是:逻辑的分支数量是否超过你能轻松在脑中模拟的范围。对大多数人,这个阈值在5-7个决策点。

流程图的本质是认知卸载。把工作记忆从「记住所有可能路径」转移到「验证每条路径是否正确」。这和用草稿纸做数学题是一个道理——不是能力不够,是大脑的工作记忆容量有限。

2024年,Notion在其工程师手册中新增了一章《Thinking with Diagrams》,核心观点就是:「代码是写给机器的,流程图是写给人脑的——包括未来的你自己。」

那位微软工程师在博客结尾写道:「我现在有个文件夹,存着过去五年画过的流程图。偶尔翻出来看,能清晰看到自己当时怎么想的、漏掉了什么。代码会被重构覆盖,但这些图保留了决策的考古层。」