和ChatGPT聊吴清源与软件工程

这几天在油管上观看了一些吴清源对局的视频解说,有些想法,于是和 ChatGPT 聊了一下,感觉颇有收获。下面是我和 ChatGPT 聊天的记录。

我:

我看吴清源的名局时发现,很多对局进行到中盘时,他并不领先甚至稍稍落后。而对手往往因为此前多次长考早早进入读秒,而吴大师却还剩下数个小时。结果到了中盘混战,对手不得不频频在读秒中落子,导致出错而最终被翻盘。令我不解的是,这种情形一再发生,对手却似乎没有相应地调整策略,反复在用时上犯同样的错误。在我看来,吴大师特别善于转换和弃子的棋风,显然大大降低了对手在开局阶段投入大量时间长考的价值。

ChatGPT:

你这个观察很有意思,而且我觉得它触及了吴清源棋的一个核心特征:他不仅在棋盘上制造复杂性,也在无形中改变了“时间的价值”。

很多对手的问题,不一定是简单的“不会管理时间”,而是他们当时采用的思考方式,本身就特别容易被吴清源惩罚。

1. 开局阶段的长考,收益确实可能非常低

传统棋手尤其容易在序盘某个“形”的选择上长考,希望找到一个局部最精确、最稳妥的下法。但围棋序盘的特点是:

  • 局面自由度极高;
  • 很多选择之间差距其实很小;
  • 后续还有大量转换空间;
  • 早期一两目的判断优势,很容易被后来的全局变化淹没。

所以从现代时间管理的角度看,如果你花20分钟,把一个本来可能只有0.5目差距的序盘选择研究得非常透彻,这笔投资往往是不划算的。

反过来,中盘一个复杂战斗中的失误,可能瞬间损失10目、20目,甚至直接崩盘。

也就是说,用时的边际价值并不均匀:

序盘通常是低价值时间,中盘复杂战斗才是高价值时间。

如果对手在前50手就消耗了大部分时间,后来面对吴清源制造的复杂变化,却只能在读秒中处理,确实会形成非常不利的结构。

2. 吴清源尤其会让前面的长考“贬值”

你说到他的转换和弃子能力,这点尤其关键。

一般棋手长考,隐含着一个假设:

我现在把这个局部想得很深,后面这些分析还会继续有价值。

但吴清源经常不按这个逻辑走。

比如对手花很长时间判断:

  • 这块棋怎么攻;
  • 我能吃掉多少;
  • 对方应该怎么逃;
  • 哪种定型对我有利。

吴清源却可能突然:

  • 弃掉这块棋;
  • 转向另一边;
  • 把原来要争生死的棋变成外势交换;
  • 用一个看起来亏损的转换换取先手;
  • 干脆改变整个战场。

这样一来,对手之前十几分钟甚至几十分钟的计算,有相当一部分直接成为沉没成本。

这实际上是一种很特殊的棋风优势。

如果面对一个特别喜欢坚持局部、按一本道走到底的棋手,深度计算通常很有价值。

面对吴清源这种高度灵活的棋手,计算的保质期特别短。

3. 为什么对手似乎一直没有吸取教训?

这里我觉得不能完全用现代竞技的思维去看。

今天职业棋手有:

  • AI复盘;
  • 完整棋谱数据库;
  • 用时统计;
  • 专门研究对手;
  • 系统化的比赛心理训练;
  • 教练团队。

当时并没有这样的训练体系。

棋手复盘时更容易总结的是:

“这里我判断错了。”

“这里应该走A而不是B。”

“这里我算漏了一手。”

而不一定会总结成:

“我前60手平均每手思考时间太长,因此第120手以后决策质量发生系统性下降。”

今天这属于很自然的竞技分析,但在当时可能并不是一个成熟的分析框架。

而且还有一个很深的文化因素:当时日本棋界非常强调“棋的正确性”。长考本身往往不是被理解为坏习惯,而是棋手认真求道的一部分。

因此一个棋手输棋以后,很可能得出的结论恰恰是:

“我算得还不够深。”

而不是:

“我不应该在这里算这么深。”

这两个结论方向甚至是相反的。

4. 而吴清源本人的思考方式很可能更接近“资源配置”

吴清源的棋经常给人一种感觉:他并不执着于某个局部的绝对正确,而是在不停比较:

  • 哪里最大;
  • 什么最急;
  • 哪个战场值得投入;
  • 哪块棋可以牺牲;
  • 哪个局部可以暂时搁置。

这其实是一种非常现代的决策思维。

不是:

“这一块棋怎样下到最好?”

而是:

“这一块棋值得我投入多少资源?”

这个“资源”当然首先是棋盘上的棋子和先手,但也包括思考时间。

因此吴清源的优势可能不仅仅是“算得深”,更重要的是他很擅长判断:

什么东西根本不值得算那么深。

这可能比计算力本身更重要。

5. 这也解释了一个看起来很奇怪的现象

你看很多吴清源十番棋或重要对局,会发现一种重复模式:

序盘: 对手看起来下得不错,甚至吴稍稍落后。

中盘前半: 对手仍然可能保持优势。

进入复杂战斗: 吴开始不断转换、骚扰、制造多个弱点。

时间差出现: 对手进入读秒。

局面突然逆转。

如果这种模式反复发生,那么就不能简单解释成“吴清源运气好,对方读秒犯错”。

更合理的解释可能是:

这本身就是吴清源棋力的一部分。

他允许自己在局面评价上短暂落后一点,但保留:

  • 棋形弹性;
  • 可转换空间;
  • 对手的多个弱点;
  • 时间优势。

换句话说,棋盘上的“半目、一目领先”并不是完整的局面评价。

如果把时间也算进去,也许真正的状态是:

对手:+2目,剩10分钟 吴清源:−2目,剩50分钟

这未必是对手占优。

甚至面对吴清源,很可能是吴更舒服。


我甚至觉得,这可以用一个更现代的概念来描述:吴清源特别擅长保持 option value(选择权价值)。

他经常不把棋下死,不急于兑现局部利益,而是保持很多后续可能性。对手则通过长考不断试图确定一个“正确答案”。

结果是:

对手花时间购买“确定性”, 吴清源保留“不确定性”。

而在围棋这种高度复杂、不断变化的游戏里,后者往往更值钱。

这可能也是为什么你看他的棋会觉得:对手明明不是一直下坏棋,却莫名其妙越来越难下。

我:

这个讨论很有意思。软件工程中有一条原则,就是避免过早优化。这两者是不是有些相似?

ChatGPT:

对,很类似,而且类比相当准确。

软件工程里的“避免过早优化”,本质上不是说优化没价值,而是说:

在信息还很少、系统结构还可能变化的时候,不要投入太多成本去优化一个局部。

这和你刚才说的吴清源对局非常像。

对应关系大概是这样

围棋软件工程
序盘架构和需求尚未稳定的早期阶段
长考一个局部花大量时间优化某个函数、数据结构或局部设计
后续转换、弃子需求变化、架构调整、模块被替换
前面的计算作废前面的优化代码被重写或删除
保留棋形弹性保持架构简单、可修改
中盘关键战斗真正暴露性能瓶颈或复杂业务问题之后
剩余用时剩余开发时间和认知资源

例如,你在项目刚开始时花三天把一个查询从 120 ms 优化到 40 ms,后来发现整个模块都不再需要了,那三天几乎完全损失。

这和棋手花30分钟研究一个局部定型,吴清源随后弃掉那块棋转战别处,非常相似。

更深一层,其实都是“option value”

刚才讲吴清源的时候,我用了“选择权价值”。软件工程里也完全适用。

假设有两个设计:

A: 现在性能最好,但结构复杂,很难修改。

B: 现在慢10%,但结构简单,可以很容易换算法、换数据库、改变业务逻辑。

在项目早期,B有一种没有直接出现在benchmark里的价值:

未来仍然有很多选择。

这就是 option value。

所以“不要过早优化”和 YAGNI、KISS、延迟不可逆决策,其实背后都有同一种思想:

不要在不确定性最高的时候,把大量资源投入到一个很快可能失效的假设上。

甚至“读秒”也有软件工程对应物

项目也会进入读秒:

deadline 临近了,真正困难的问题才暴露出来。

这时候如果团队前期把大量精力花在:

  • 漂亮但不重要的架构;
  • 不必要的抽象层;
  • 极小的性能提升;
  • 很早就建立的通用框架;
  • 对未来需求的猜测;

那么真正出现生产故障、性能瓶颈、数据问题或者业务规则冲突的时候,已经没有多少时间了。

这和:

序盘长考30分钟,到了真正决定胜负的中盘只能读秒

几乎是同一种资源配置错误。

不过这里还有一个很重要的区别

“避免过早优化”最容易被误解成:

前期不要认真设计。

这当然不对。

围棋里也一样。吴清源不是序盘随便下,而是他很快抓住那些高层次、稳定的东西:

  • 全局方向;
  • 棋子的效率;
  • 厚薄;
  • 先手;
  • 弱棋;
  • 各区域的相对价值。

软件工程对应的是:

  • 数据模型是否合理;
  • 模块边界是否清楚;
  • 接口是否简单;
  • 是否存在单点故障;
  • 哪些决定未来修改成本特别高。

这些东西值得早期思考。

不值得早期花巨大成本的,往往是那种高度依赖未来具体情况的局部最优。

所以更准确的原则可能不是:

不要早期优化。

而是:

早期应该优化“选择空间”,而不是优化“当前局部”。

这个说法放到吴清源身上也非常合适。他很多棋看起来并不是立即取得最大利益,而是让自己后来更容易转身。

因此软件工程中的好架构,与吴清源的棋风可能真的有一个共同原则:

在不确定性很高的时候,灵活性本身就是一种资产。

这比单纯说“不要过早优化”还更接近你最开始观察到的那个现象。

我:

灵活性的确是我想强调的一个方面。即便是弃子,吴大师显然也早已看到被弃掉的那块棋并非净死,后期仍有许多可以借用之处,甚至可能重新活过来,使局面的走向变得更加复杂。

ChatGPT:

对,这一点比“弃子果断”更准确。吴清源很多所谓弃子,实际上不是把那块棋视为零价值,而是把它从“现在必须救活的资产”变成了“未来可以反复利用的潜在资产”。

所以“弃子”这个词有时会让人误解成:

我不要了,损失已经确定。

但吴清源很多棋更接近:

我现在不为它支付成本,但我保留以后重新利用它的权利。

这又回到我们刚才说的 option value。

一块暂时被弃掉的棋,后面可能仍然有:

  • 断点;
  • 劫材;
  • 先手利用;
  • 借劲;
  • 收气;
  • 滚打包收;
  • 联络机会;
  • 对外围棋形的牵制;
  • 对方为了防它而不得不补棋。

甚至像你说的,最后真的重新活出来。

因此它不是“死棋”,而更像软件系统里一个暂时不用、但没有把接口封死的模块。

而且这里还有一个很重要的非对称性。

对手如果认为“这块已经死了”,常常会按照已经兑现的利益来规划后面的棋。但吴清源知道:

这块棋的价值不是固定的,它取决于未来外围结构。

所以随着局面变化,那块弃子可能不断升值。

这也解释为什么他的转换特别难应付。一般意义上的转换是:

我在A处亏一点,在B处赚一点。

但吴清源很多转换不是简单的加减法,因为A处那个“亏掉”的部分以后还可能重新产生价值。

所以真正的账可能是:

$$ \text{当前收益} + \text{未来借用价值} + \text{对方防范成本} + \text{局面复杂性价值} $$

而不是单纯:

$$ B区收益 - A区损失 $$

这也是为什么如果只看某一时刻的实地,容易误判吴清源的棋。

他有时确实暂时少几目,但他留下了很多未结算的权利。

这和软件工程的类比还能继续往下走

好的系统设计经常不是追求“现在每个模块都做到最完整”,而是:

  • 不过早绑定具体实现;
  • 保留替换接口;
  • 避免不可逆的数据结构;
  • 延迟难以回头的决定;
  • 留出扩展点;
  • 让暂时不用的东西不会妨碍未来变化。

这和吴清源的弃子观非常接近。

差的设计往往是:

“既然已经决定这样做,就把它彻底做死。”

好的设计则可能是:

“当前按照这个方向走,但不要破坏以后改方向的可能。”

所以我觉得,如果要用一句话总结吴清源这一类棋,不是“善于弃子”,而是:

他非常善于把确定性的资产,转换成带有未来选择权的资产。

这也正是他棋里那种“明明暂时吃亏,但局面越来越难控制”的来源。

而且这还会进一步解释为什么他的对手长考特别容易吃亏:对手往往是在试图算清一个固定局面,而吴清源是在经营一个未来还会变化的局面。

我:

从对手的角度来看,早期的职业棋手喜欢下历时数日的长棋。他们之所以喜欢长考,一个重要原因是把追求最优的一手视为对棋道的追求。这种精神固然值得尊敬,却也可能使人陷入思维误区。事实上,在棋局初期,很多时候的确并不存在唯一的最优解;可能有几种各有特点的优解,却很难断定其中哪一种最优。吴大师似乎没有这样的执念。

ChatGPT:

我基本同意,而且这里可以再往前推一步:“追求最优的一手”在很多序盘局面里,可能不仅成本过高,而且在概念上就是一个错误的问题。

因为它默认了一个前提:

当前局面存在一个稳定、可识别、可以通过更多计算逼近的唯一最优解。

但围棋序盘往往不是这样。

序盘很多时候更像“偏序”而不是“全序”

也就是说,几个候选点都很好,但它们代表不同的未来:

  • A 更重实地;
  • B 更重外势;
  • C 保留变化;
  • D 让对手选择;
  • E 更适合复杂战斗;
  • F 更容易收束。

这些手之间未必存在一个严格的:

$$ A > B > C $$

更可能是:

A、B、C 都是优解,只是在不同后续和不同风格下价值不同。

如果是这样,那么长考试图把 5 个优解排成第1、第2、第3,本身就可能是在制造一种虚假的精确性。

这和很多工程问题很像:不是每一个架构选择都能在项目开始时排出严格优劣,有时只是不同 trade-off。

“棋道”在这里可能诱发了一种认识论上的误区

职业棋手把“每一手都追求最佳”视为修行,这当然有其高尚的一面。

但这里容易把两件事混在一起:

  • 认真对待每一手
  • 相信每个局面都有唯一最优手

前者没有问题,后者未必成立。

尤其在没有贴目、贴目变化很大、定式理论还远没有现代这么系统的时代,序盘评价本来就非常模糊。

一个棋手如果相信:

“只要我再想十分钟,就更接近那个唯一正确答案。”

那么他很容易高估额外思考的价值。

真正合理的问题可能应该是:

“我已经找到一个足够好的、结构健康、保留变化的下法了吗?”

如果答案是“是”,继续长考的边际收益可能已经很低。

吴清源似乎恰恰比较少这种执念

吴清源给人的感觉经常不是:

“我要证明这一手是唯一正解。”

而是:

“这手棋效率足够高,而且以后好下。”

这其实是非常不同的思维方式。

他对棋的评价似乎更重视:

  • 全局方向;
  • 棋子效率;
  • 轻重;
  • 先手;
  • 弹性;
  • 后续借用;
  • 转换余地。

这些指标本身就不容易压缩成一个“唯一最优点”。

所以他可能更容易接受:

这里有几个都可以,我选一个最符合当前全局节奏的。

然后把时间保留到真正出现非对称风险的地方。

这也解释了为什么“长棋文化”可能会强化这种误区

几天一局的长棋制度,会让棋手形成一种习惯:

既然时间很多,就应该把它用来逼近完美。

但时间很多,并不意味着每个阶段都值得同样多的时间。

这和预算也一样:预算充足不代表每个项目都值得投钱。

如果序盘本来就只有几个近似等价的好点,那么多花一小时未必提高决策质量,反而只是增强了棋手对自己判断的心理确信。

而这个确信后来还可能产生副作用:因为已经为某个局部投入了大量思考,就更不愿意轻易转换或弃掉。

这就和吴清源形成鲜明对比。

他似乎更容易把前面的判断看成暂时判断,而不是承诺。

所以你这个观察其实可以概括成一句很深的话

高手之间的差别,不只是找到好手的能力,也包括知道什么时候不存在值得寻找的“唯一最好手”。

这可能是吴清源非常现代的一点。

真正高水平的决策,并不总是追求精确最优,而是要判断:

这个问题到底值不值得被精确优化。

这和你前面提到的软件工程“避免过早优化”已经几乎是同一个原则了。