[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"content-there-was-no-path-2026":3,"$fgwnp8s4g2vyq":22},{"id":4,"type":5,"slug":6,"title":7,"date":8,"category":9,"tags":10,"body_markdown":14,"permalink":15,"excerpt_src":15,"media_type":15,"media_title":15,"media_author":15,"media_url":15,"rating":15,"layout":15,"pv":16,"admin_only":16,"created_at":17,"updated_at":17,"deleted_at":15,"status":18,"html":19,"excerpt":20,"cover":21},146,"article","there-was-no-path-2026","世上本没有路，走的人多了也便有了路","2026-07-18 15:00","tech",[11,12,13],"AI","编程","思考","\n大概十来年前，在知乎上看过一个讨论得非常热烈的问题：自然语言编程能否实现？\n\n我记得当时自己的观点是：不能。\n\n核心观点如下：\n\n1. 编程语言的语法掌握是很容易的事，这不是什么门槛\n2. 但编程是一个不断分解细化问题的过程，自然语言对问题的描述是很不清晰的，很难转换为确定性的代码\n\n\u003C!-- more -->\n\n## 未来已来\n\n十来年前讨论这个问题多少还有些科幻色彩，但在今天，AI 已经几乎可以完全自主完成各种编程任务了。有些人只用一句话就生成了整个软件，其中的交互细节、视觉风格、Edge Case 处理，AI 全都做了决定，而且结果看起来还不错。\n\n回顾人类生产软件的流程，细化问题并逐一回答是很重要的一步。一句话的需求背后有漫长的研发过程——需求定义、评审、技术评审、开发、测试——每一步都在把未回答的问题收敛为确定的细节。\n\n这让我重新思考当年的问题：自然语言明明是很不清晰的语言，AI 又跳过了这个需求分解细化的过程，直接按它自己的理解执行，理论上给最终结果带来了不确定性。但为什么实际上又能转换为确定性的代码？\n\n## 现在这条路是怎么走出来的\n\n如果我们仔细拆解 AI 做得很好的那些场景，会发现一个共同点，即它们都是**常见的模式**。\n\n我以前会举一个例子：当我们说“做一个搜索框”，背后实际上有很多细节需要处理：输入框的样式、placeholder 的文案、输入时的交互、防抖、搜索结果的展示、loading 状态、空状态、超时提示等等。\n\n但是，“做一个搜索框”这个模式在 GitHub 上出现了成千上万次，Stack Overflow 上有无数讨论，各种各样的实现、各种 Edge Case（debounce 设多少毫秒、空状态怎么展示、loading 状态如何处理、超时怎么提示），早就被社区反复讨论并形成了共识方案。\n\n当一片空地，被无数人以同样的路径反复走过无数次之后，空地上就形成了一条路。当无数人做过搜索框之后，社区就形成了一个共识：搜索框应该是这样的。\n\n现代大语言模型的训练数据覆盖了海量代码仓库、技术文档、设计规范，因此它学习到了一个典型的搜索框应该长什么样。当你说“做一个搜索框”时，模型并不是在重新思考“防抖应该设多少毫秒”，而是直接拿出了最典型的那一个方案——300ms。\n\n所谓的“细节决策”，对模型来说其实是“预测一个最多人用的可能性”。也就是说，AI 的成功不是因为它真的在推理，而是因为它记住了人类的决策结果是什么样的。\n\n## 世上本没有路\n\n“编程是一个不断分解细化问题的过程”——这句话在今天依然正确。但也必须承认，这样的说法忽略了另一面：绝大多数编程工作并没有什么开创性，而是在重复前人已经走过的路。当一个模式被走了足够多次之后，AI 也可以获取这些共识，直接给出经过验证的结果。\n\n鲁迅说：世上本没有路，走的人多了，也便成了路。\n\n十多年前我关注的是前半句——世上本没有路，所以需要人去不断做决策，去开路。十多年后，我发现后半句同样重要——走的人多了，也便成了路。AI 是那个已有路的人，它最擅长的就是沿着已有的路走下去。\n\n而在未知领域不断去开新路这件事，仍然是我们人类的事，这大概就是人类的价值所在吧。\n",null,0,"2026-08-28 04:37:17","published","\u003Cp>大概十来年前，在知乎上看过一个讨论得非常热烈的问题：自然语言编程能否实现？\u003C\u002Fp>\n\u003Cp>我记得当时自己的观点是：不能。\u003C\u002Fp>\n\u003Cp>核心观点如下：\u003C\u002Fp>\n\u003Col>\n\u003Cli>编程语言的语法掌握是很容易的事，这不是什么门槛\u003C\u002Fli>\n\u003Cli>但编程是一个不断分解细化问题的过程，自然语言对问题的描述是很不清晰的，很难转换为确定性的代码\u003C\u002Fli>\n\u003C\u002Fol>\n\u003Ch2>未来已来\u003C\u002Fh2>\n\u003Cp>十来年前讨论这个问题多少还有些科幻色彩，但在今天，AI 已经几乎可以完全自主完成各种编程任务了。有些人只用一句话就生成了整个软件，其中的交互细节、视觉风格、Edge Case 处理，AI 全都做了决定，而且结果看起来还不错。\u003C\u002Fp>\n\u003Cp>回顾人类生产软件的流程，细化问题并逐一回答是很重要的一步。一句话的需求背后有漫长的研发过程——需求定义、评审、技术评审、开发、测试——每一步都在把未回答的问题收敛为确定的细节。\u003C\u002Fp>\n\u003Cp>这让我重新思考当年的问题：自然语言明明是很不清晰的语言，AI 又跳过了这个需求分解细化的过程，直接按它自己的理解执行，理论上给最终结果带来了不确定性。但为什么实际上又能转换为确定性的代码？\u003C\u002Fp>\n\u003Ch2>现在这条路是怎么走出来的\u003C\u002Fh2>\n\u003Cp>如果我们仔细拆解 AI 做得很好的那些场景，会发现一个共同点，即它们都是\u003Cstrong>常见的模式\u003C\u002Fstrong>。\u003C\u002Fp>\n\u003Cp>我以前会举一个例子：当我们说“做一个搜索框”，背后实际上有很多细节需要处理：输入框的样式、placeholder 的文案、输入时的交互、防抖、搜索结果的展示、loading 状态、空状态、超时提示等等。\u003C\u002Fp>\n\u003Cp>但是，“做一个搜索框”这个模式在 GitHub 上出现了成千上万次，Stack Overflow 上有无数讨论，各种各样的实现、各种 Edge Case（debounce 设多少毫秒、空状态怎么展示、loading 状态如何处理、超时怎么提示），早就被社区反复讨论并形成了共识方案。\u003C\u002Fp>\n\u003Cp>当一片空地，被无数人以同样的路径反复走过无数次之后，空地上就形成了一条路。当无数人做过搜索框之后，社区就形成了一个共识：搜索框应该是这样的。\u003C\u002Fp>\n\u003Cp>现代大语言模型的训练数据覆盖了海量代码仓库、技术文档、设计规范，因此它学习到了一个典型的搜索框应该长什么样。当你说“做一个搜索框”时，模型并不是在重新思考“防抖应该设多少毫秒”，而是直接拿出了最典型的那一个方案——300ms。\u003C\u002Fp>\n\u003Cp>所谓的“细节决策”，对模型来说其实是“预测一个最多人用的可能性”。也就是说，AI 的成功不是因为它真的在推理，而是因为它记住了人类的决策结果是什么样的。\u003C\u002Fp>\n\u003Ch2>世上本没有路\u003C\u002Fh2>\n\u003Cp>“编程是一个不断分解细化问题的过程”——这句话在今天依然正确。但也必须承认，这样的说法忽略了另一面：绝大多数编程工作并没有什么开创性，而是在重复前人已经走过的路。当一个模式被走了足够多次之后，AI 也可以获取这些共识，直接给出经过验证的结果。\u003C\u002Fp>\n\u003Cp>鲁迅说：世上本没有路，走的人多了，也便成了路。\u003C\u002Fp>\n\u003Cp>十多年前我关注的是前半句——世上本没有路，所以需要人去不断做决策，去开路。十多年后，我发现后半句同样重要——走的人多了，也便成了路。AI 是那个已有路的人，它最擅长的就是沿着已有的路走下去。\u003C\u002Fp>\n\u003Cp>而在未知领域不断去开新路这件事，仍然是我们人类的事，这大概就是人类的价值所在吧。\u003C\u002Fp>\n","\u003Cp>大概十来年前，在知乎上看过一个讨论得非常热烈的问题：自然语言编程能否实现？\u003C\u002Fp>\n\u003Cp>我记得当时自己的观点是：不能。\u003C\u002Fp>\n\u003Cp>核心观点如下：\u003C\u002Fp>\n\u003Col>\n\u003Cli>编程语言的语法掌握是很容易的事，这不是什么门槛\u003C\u002Fli>\n\u003Cli>但编程是一个不断分解细化问题的过程，自然语言对问题的描述是很不清晰的，很难转换为确定性的代码\u003C\u002Fli>\n\u003C\u002Fol>\n","",{"total":16,"totalRoots":16,"comments":23,"pv":16},[]]