写软件这件事,正在分成两条路。一条是"养"——从一个想法的胚芽开始,不断迭代,试试这个,戳一下培养皿加点葡萄糖,没反应,再换点百里酚蓝看看菌落还活着没,不行就重来。另一条是"设计"——先画流程图,把每个分叉都摆清楚,再让机器去执行。

Tomer Tunguz 把前者叫做 vibe-coding,也就是"养软件"。它更像生物实验:你丢进去一个初始条件,观察它怎么长,长歪了就调整环境,再观察。最有经验的那批人不会只养一皿,而是同时开四五个培养皿并行测试,最后挑出细菌进化得最合心意的那一皿。

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

设计派的做法:先要一张流程图

AI 时代里,"设计软件"被重新定义成了状态机设计——说白了就是一张能跑通的流程图。举个具体的例子:一封邮件进来,有三个选项,归档、加进 CRM、或者升级给真人处理。如果选择加进 CRM,那还得判断这家公司处在什么阶段。每一个分叉都要有明确的出口。

和 AI 一起设计状态机时,有个动作很关键:直接问它要流程图。AI 会很乐意把结构图交出来。把每一个分叉连同对应的正确结果列进一张表里,漏洞会自己跳出来。再加上形式化验证,就能证明这段软件会按预期运行。

Boris Cherny 解释过这背后的原因。养软件是有机的,可以随手就编;状态机是机械的、工业化的、刚性的,适合那些必须万无一失的核心系统。

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

软件工程又多出两种哲学

软件工程一路走来,攒下了不少流派:测试驱动开发、结对编程、快速行动打破常规。测试驱动开发由 Kent Beck 在 2002 年的《Test-Driven Development: By Example》里推广开来,核心是先写自动化测试用例,再写刚好能通过测试的最小生产代码。结对编程是极限编程的核心实践,两个开发者共用一台工作站,一个人敲代码,另一个人实时审查并规划方向。"快速行动打破常规"则是 Facebook 早期的内部口号,扎克伯格把它当作一种宣言——接受附带 bug 作为换取开发速度的代价,这个口号在 2014 年被"快速行动,稳定基建"取代。

在这个新时代,这份清单上又多了两条。一条是养软件,一条是设计软件。它们不是互相取代的关系,而是各自有各自的适用场景:需要快速试错、方向还不清楚的时候,养;需要绝对可靠、逻辑必须闭环的时候,设计。

选择哪一种,取决于你要解决的问题是"还不知道答案长什么样",还是"答案已经清楚,只是不能出错"。