ChenTW

记录理解世界的方法

·

11 次阅读

从“跟 AI 聊几句就能写程序”,到开始理解什么叫软件工程

7 月 24 日,我第一次真正开始接触 AI 自然语言编程。

到今天,满打满算也就二十多天。

这二十多天回头看,做出来多少功能、写了多少代码,反而已经不是我觉得最有意思的事情了。真正让我有点意外的是:我一个原本完全不做程序开发的人,居然在不停地折腾 AI、改程序、部署、出 Bug、再修改的过程中,慢慢自己悟出了一些软件开发和项目管理最基础的逻辑。

而且这些东西,一开始根本没人教我。

都是被项目逼出来的。

一开始,我只是觉得:原来程序真的可以“说出来”

7 月 24 日,我最开始其实没有什么宏大的计划。

只是想做一个能解决自己实际需求的小工具。

那时候我对所谓 AI 编程的理解非常简单:

我把需求告诉 AI,它把代码写出来。

甚至第一次看到一个原本只是脑子里的想法,被 AI 一点点写成可以运行的页面、后台、数据库时,那种感觉是相当震撼的。

以前我一直觉得,软件开发和我之间隔着一道很高的墙。

你得学语言,学框架,学数据库,知道服务器怎么运行,还得掌握一大堆我连名字都叫不出来的东西。

AI 出现以后,这堵墙突然矮了很多。

我不需要先学会怎么写 PHP,才能告诉 AI:

这里应该增加一个按钮。

我也不需要先搞懂 SQL,才能说:

这个数据我希望保存下来,以后可以统计。

我只需要把我要什么、为什么要这样做、实际使用时应该是什么感觉,说清楚。

AI 就能去完成大量过去必须依赖程序员完成的工作。

所以一开始真的很容易上头。

功能越做越多,想法也越来越多。

第一个项目很快教会我:做出来,和能用,是两回事

最早真正持续迭代的是 ChenTW RSS。

从 7 月 24 日确定方向,到 25 日、26 日连续修改,Build 很快就排到了几十个。

一开始我关注的是功能。

RSS 能不能抓。

AI 能不能筛选。

后台能不能运行。

OPML 能不能导入。

栏目能不能分类。

页面能不能在手机上正常显示。

但很快我发现一个问题:

“这个功能已经写出来了”,和“这个东西实际很好用”,根本不是一回事。

可能 RSS 地址 technically 是对的,但真正丢到 Inoreader 里面体验并不好。

可能某个后台功能已经有了,但实际操作起来非常别扭。

可能 PC 页面看起来正常,手机上一打开就完全不是那么回事。

还有很多 Bug,并不是 AI 不会写,而是我一开始根本没有想到实际使用时会发生这种情况。

于是我开始明白:

AI 可以极大降低“实现”的门槛,但它不能替我判断这个产品到底应该是什么样。

产品判断还是我的。

AI 负责的是把我的判断变成程序。

这大概是我第一次真正意识到:自然语言编程并不是“我什么都不用懂了”。

恰恰相反,我开始必须更清楚地知道自己到底要什么。

然后问题来了:AI 太能改了

项目继续往下做,很快出现了第二个问题。

AI 写代码很快。

快到什么程度呢?

快到你一个需求说下去,它可能同时改七八个文件。

如果再说第二个需求,又会继续改。

刚开始看着很爽。

但很快就出事。

我开始搞不清楚:

现在服务器上到底是哪一版?

刚才那个 Bug 是哪个版本修好的?

这个文件为什么被改了?

上一个功能到底有没有正式部署?

AI 说“已经完成”,到底是代码写完了,还是测试完了,还是已经上传到生产环境了?

甚至有时候,解决一个问题的时候,会顺手把原来已经正常的东西改坏。

这时候我第一次真正感受到:

一个软件项目真正可怕的,并不是代码写不出来,而是项目开始失控。

于是我很自然地开始给版本编号。

开始记录 Build。

开始写 Changelog。

开始区分“已经开发”和“已经部署”。

开始要求每次修改必须知道到底动了哪些文件。

后来又引入 Git。

现在回头看,这些东西对真正的软件开发人员来说可能都属于常识。

但我当时不知道。

我只是觉得:

不这样搞,我自己已经管不过来了。

再后来,我开始给 AI 立“基本法”

功能越来越多以后,又遇到了一个更麻烦的问题。

AI 没有长期记忆。

或者更准确地说,它每一次工作时能够掌握的项目背景都是有限的。

一个新聊天开始以后,它可能根本不知道为什么这里以前要这么设计。

更危险的是,它可能看着现有代码觉得:

这个地方好像可以“优化”。

然后一优化,把我前面花了很多时间才确定下来的核心业务逻辑改掉了。

这对我刺激很大。

所以我后来开始不断要求项目建立一些不能随便动的文件。

项目规则。

核心逻辑。

技术基线。

当前状态。

变更记录。

我当时甚至开玩笑把其中一些东西叫“宪法”或者“基本法”。

后来正式文档当然不会真的这么写,但这个比喻我一直觉得很准确。

因为我要解决的问题就是:

AI 可以自由开发,但有些东西不能因为换了一个聊天、换了一个模型、换了一个执行器,就重新解释一遍。

项目必须有自己的记忆。

这时候,我的开发方式已经慢慢从:

我告诉 AI 一个需求,AI 去修改代码。

变成了:

先确认现有规则是什么,再判断这个需求会不会影响基础逻辑,然后决定改哪些地方,最后记录这次变更。

这个变化其实非常大。

只是当时我自己没有意识到。

我甚至开始规定:先别动代码

后来我又形成了一个现在看来很有意思的习惯。

很多需求,我不会再让 Codex 一上来就开发。

而是先说:

第一阶段,只读审计。

你先告诉我现在项目是什么状态。

准备改哪些文件。

会影响哪些逻辑。

有没有和现有规则冲突。

不要修改。

等方案确定以后,再正式开发。

为什么会形成这个习惯?

还是被坑出来的。

因为 AI 最大的问题之一,就是太勤快。

你只是想讨论一下,它已经帮你改完了。

但真正的工程项目里,有些问题首先需要判断“该不该改”,而不是“怎么改”。

这件事情让我后来突然想到了施工管理。

施工现场也不可能谁觉得这里应该改一下,就直接拿机器上去干。

先有设计。

设计有变更。

变更有依据。

施工以后还要验收。

出了问题,要知道是谁什么时候改的。

软件开发其实也是一样。

代码就像实体工程。

Git 像施工留痕。

Build 像版本节点。

项目文档像图纸和技术交底。

Changelog 像施工日志。

测试和生产验证就是验收。

而项目里面那些不能随便变化的基础规则,其实就像设计规范。

我老板是搞工程管理的,我天天接触的也是项目管理。结果没想到,我最后居然是拿施工管理的思维,把软件开发这件事情给理解了。

到了 8 月,我已经不满足于让一个 AI 干活了

后来项目越来越多。

RSS、知乎推荐流、ResearChen、小程序、一些小工具……

一个很现实的问题又出现了:

如果所有事情都依赖同一个聊天窗口,那么这个聊天窗口本身就变成了项目风险。

上下文越来越长。

信息越来越多。

换窗口以后又要重新交接。

于是我开始折腾“双执行器”。

一个负责真正开发。

另一个负责理解项目状态、检查、归档、交接。

我甚至花了不少时间研究:一个 Agent 怎么把信息可靠地交给另一个 Agent;一个已有线程到底能不能真正被另一个系统接管;resume 和重新复制上下文,本质上到底有什么区别。

有些实验成功了。

有些最后证明没有必要继续折腾。

但这件事让我开始意识到一个更深的问题:

未来的软件开发,可能根本就不是“一个人使用一个 AI 写代码”。

而是一个人管理多个 AI,让不同 AI 分别承担规划、开发、审核、测试甚至资料管理。

这个感觉,已经越来越像真正的项目管理了。

直到今天看到 Harness,我才突然知道自己这段时间到底在折腾什么

今天看了一篇关于 DeepSeek Harness 的文章。

文章非常专业,很多术语我其实也看得很累。

但看完以后,我突然觉得有点熟悉。

因为它讲的很多东西,我这二十多天其实已经用一种很原始、很人工的方式在做了。

模型只是其中一部分。

模型外面,还需要有项目规则、工具、上下文、状态、任务流程、测试、记录、权限和不同 Agent 之间的协作。

以前所谓 AI 编程,大家最关心的是:

哪个模型写代码最厉害?

但我现在越来越觉得,未来真正重要的问题可能会变成:

你怎么组织这些模型干活?

模型就像施工队。

施工队当然要有能力。

但一个大型工程最终能不能做好,显然不取决于某一个工人砌墙是不是特别快。

真正决定项目质量的是一整套体系:

设计、计划、材料、施工、资料、变更、成本、验收、责任划分。

AI 软件开发可能也正在走向这个阶段。

二十多天前,我甚至不知道 Git 到底有什么用

这可能是整件事情最让我有成就感的地方。

7 月 24 日的时候,我只是觉得 AI 太神奇了。

原来我只要说话,就可以让它写程序。

到今天,我已经开始在意:

代码是不是唯一事实基线。

Git 工作区是不是 clean。

Build 编号是不是连续。

这次修改有没有影响核心逻辑。

生产环境到底运行哪个版本。

项目文档和实际代码是不是一致。

开发前是不是应该先只读审计。

修改以后有没有经过测试。

不同执行器之间怎么完成可靠交接。

这些东西,我二十多天以前基本都不知道。

而且我并没有专门系统学习过什么《软件工程》。

大部分道理,都是一个 Bug 一个 Bug撞出来的。

一个版本一个版本乱出来的。

一次次 AI 把东西改坏以后逼着我补出来的。

所以现在回头看,我反而觉得这二十多天最大的成果,并不是 RSS 做出来了,不是知乎产品做出来了,也不是小程序跑起来了。

这些当然都挺有意思。

但真正让我觉得有点不可思议的是:

我居然开始建立了一套属于自己的软件项目管理直觉。

而且这套直觉,还是从我原本熟悉的工程管理经验里面自然长出来的。

AI 降低的也许不是编程门槛,而是“参与创造”的门槛

以前我大概不会把自己和“软件开发”联系起来。

因为我不会写代码。

现在我仍然不会像真正的程序员那样写代码。

但我已经越来越不觉得这是什么根本性的障碍了。

因为 AI 以后会越来越擅长写代码。

真正稀缺的可能反而变成:

你到底想解决什么问题?

你能不能把需求说清楚?

你能不能判断 AI 做出来的是不是你真正要的东西?

一个项目变复杂以后,你能不能控制它,而不是被它拖着走?

出现冲突的时候,什么应该坚持,什么可以修改?

怎么让一个今天开始的项目,三个月以后依然还能继续开发?

这些问题,好像已经不是“会不会写代码”能够回答的了。

所以我现在反而觉得,“AI 自然语言编程”这个词可能有点把事情说小了。

它不是简单地让一个不会编程的人也能写程序。

它真正改变的可能是:

过去很多人连参与软件创造的资格都没有,因为代码是门槛;现在代码这个门槛正在迅速降低,于是人的判断、经验、管理能力和对真实需求的理解,开始进入软件开发过程。

对我来说,这才是这二十多天最有意思的事情。

从 7 月 24 日开始,我原本只是想让 AI 帮我做几个工具。

结果做着做着,我开始学会管理版本,管理规则,管理 AI,甚至开始理解为什么一个软件项目必须有自己的制度。

这么看,这二十多天确实还挺不错的。

至少下一次再有人告诉我:

“AI 编程不就是跟 AI 说几句话,让它帮你写代码吗?”

我大概会说:

刚开始的时候,确实是。

做到后面,就不是了。