一个任务从写下到保存,背后其实经过了界面、规则、数据和运行环境。
上一篇我们说,vibe coding 不是许愿。
你可以不从代码开始,但不能不理解逻辑和架构。你可以让 Codex 多写一点代码,但不能把“这个软件到底怎么工作”完全交出去。
那第一步要理解什么?
不是编程语言。
不是框架。
也不是命令行。
第一步是先弄明白:软件到底是什么。
我们从一个最普通的动作开始。
你打开一个待办 App,在输入框里写下:
周五前整理发票
然后点一下“添加”。
你看到页面上多了一条任务。看起来,这件事很简单。
但在软件内部,已经发生了好几件事:
• 页面接收了你输入的文字。 • 软件判断这条任务能不能保存。 • 任务被整理成一条数据。 • 数据被保存到某个地方。 • 页面刷新,让你看到新任务。 • 下次打开时,软件还要把它再读出来。
所以,软件不是一团神秘代码。
它更像一个能接收操作、执行规则、保存数据、持续运行的小系统。
对纯小白来说,可以先记住一个简单模型:
软件 = 界面 + 规则 + 数据 + 运行环境
这四个词,就是我们理解软件的第一张地图。
软件不是一个页面
很多人第一次用 AI 做软件,会先盯着页面。
页面好不好看?
按钮圆不圆?
颜色顺不顺眼?
列表排得整不整齐?
这些当然重要。用户最先看到的就是页面。如果页面乱,用户很快就不想用了。
但页面不是软件的全部。
一个页面可以很漂亮,却完全不保存数据。你点了“添加”,看起来多了一条任务,但刷新页面以后就没了。
一个页面可以能打开,却没有正确规则。你什么都不输入,也能添加一条空白任务。
一个页面可以在你电脑上能跑,却不能让别人访问。你发给朋友一个地址,朋友打开只看到错误。
这就是为什么小白做 vibe coding 时,不能只说:
帮我做一个漂亮的待办页面。
更好的说法是:
帮我做一个能新增、保存、显示、完成待办事项的小应用。任务标题不能为空,添加后刷新页面仍然存在。
这两句话的差别很大。
前一句只在说页面。
后一句开始描述软件。
界面:你和软件打交道的地方
界面,是用户看见和操作的地方。
在待办 App 里,界面可能包括:
• 输入任务的文本框。 • 点击添加的按钮。 • 展示任务的列表。 • 标记完成的勾选框。 • 查看全部、未完成、已完成的筛选按钮。 • 编辑任务的弹窗或页面。
你可以把界面理解成一家店的门面和柜台。
用户从这里进来,在这里点单,在这里看到结果。
所以界面不是可有可无的装饰。它决定用户能不能顺利完成动作。
但是,评价界面时,不要只说“好看”或“不好看”。
对一个待办 App 来说,更重要的问题是:
• 我从哪里输入任务? • 我怎么知道任务添加成功了? • 我怎么标记完成? • 我怎么找到已完成任务? • 我误删以后有没有机会确认? • 手机上手指点起来会不会太小?
这些问题都不需要你会写代码。
你只要像真实用户一样试用,就能发现很多问题。
这也是小白和 Codex 协作时最容易上手的部分:先从界面和操作反馈开始。
但别停在这里。
界面只是第一层。
规则:软件怎么判断事情能不能做
规则,是软件做事的逻辑。
你可以把它理解成:
当用户做了某个动作,软件应该怎么判断、怎么处理。
待办 App 看起来简单,但规则一点都不少。
比如:
• 标题为空时,能不能添加? • 标题太长时,要不要限制? • 一条任务完成以后,还能不能编辑? • 删除任务时,要不要二次确认? • 截止日期已经过去,要不要变红? • 已完成任务默认显示还是隐藏? • 搜索时,要不要同时搜备注?
这些不是代码细节。
这些是软件的使用规则。
如果规则没有说清楚,Codex 也能继续写。它会根据自己的判断做默认选择。
但默认选择不一定符合你的习惯。
比如你说“删除任务”,Codex 可能直接删除。可你真正想要的是先弹出一个确认,避免手滑。
再比如你说“完成任务”,Codex 可能让任务从列表里消失。可你真正想要的是它留在列表里,只是变成灰色,方便你回顾今天做了什么。
这就是为什么第 0 篇反复强调:vibe coding 可以少看代码,但不能不看逻辑。
你不需要知道代码里用了哪个函数。
但你要知道软件应该按什么规则处理事情。
数据:软件要记住什么
数据,是软件需要记住的内容。
对待办 App 来说,一条任务看起来只是一行字:
周五前整理发票
但软件真正要保存的,通常不止这一行字。
它可能还要保存:
• 任务标题。 • 备注。 • 截止日期。 • 优先级。 • 是否完成。 • 创建时间。 • 更新时间。 • 属于哪个用户。
这些东西合在一起,才是一条完整的任务记录。
如果没有数据保存,页面再好看,也只是临时纸片。
你打开页面,写了几条任务,看着很开心。结果刷新一下,全没了。
这就不是一个真正可用的待办应用。
小白怎么判断数据有没有真的保存?
可以用几个很朴素的问题:
• 我添加任务后,刷新页面还在吗? • 我关掉浏览器再打开,还在吗? • 我修改标题后,旧标题会不会又冒出来? • 我标记完成后,下次打开还是完成状态吗? • 如果换到手机上,能不能看到同一条任务?
这些问题很简单,但非常重要。
很多 AI 生成的演示页面,第一眼看起来像应用,实际只是“看起来有数据”。只要刷新页面,刚才的内容就没了。
所以你以后和 Codex 说需求时,不要只说:
页面上有一个任务列表。
要补一句:
任务需要被保存,刷新页面后仍然存在。
这一句,会把“页面展示”推进到“软件记住”。
运行环境:软件在哪里活着
运行环境,是软件真正被打开、执行和访问的地方。
这个词听起来有点技术,但可以先用一句话理解:
软件不是写出来就会自动活着,它必须运行在某个地方。
一个待办应用可能运行在你的电脑浏览器里。
也可能运行在手机浏览器里。
它的数据可能存在浏览器本地。
也可能存在一台服务器的数据库里。
如果只是你自己电脑上能打开,那叫本地运行。
如果别人也能通过网址访问,那就需要发布到网上。
如果电脑和手机都要看到同一份数据,那就需要它们连接到同一个数据来源。
这就是为什么很多小白会遇到一个困惑:
明明 Codex 已经帮我做出来了,为什么只有我电脑上能看?
因为“能在本地运行”和“能让别人访问”不是一回事。
前者说明软件在你的电脑上活着。
后者说明它被放到了一个别人也能访问的环境里。
后面讲发布上线时,我们会再展开这件事。现在先记住一点:
软件要能用,不只要有代码,还要有运行的地方。
一条待办从输入到保存,经历了什么
现在,我们把四个部分合起来看。
还是那条任务:
周五前整理发票
完整旅程大概是这样:
第一步,你在界面输入任务。
输入框接收了文字,按钮等待你点击。
第二步,你点击“添加”。
界面把这个动作交给程序处理。
第三步,规则开始检查。
标题是不是空的?有没有超过长度?截止日期格式对不对?
第四步,程序把它整理成数据。
这条任务可能会变成一条记录:标题是什么,是否完成,什么时候创建,属于谁。
第五步,数据被保存。
可能保存在浏览器本地,也可能发送到服务端,再写进数据库。
第六步,界面更新。
你在列表里看到刚刚添加的任务。
第七步,下次打开时再读取。
软件从保存位置把任务取出来,重新显示到页面上。
这就是一个很小的软件闭环。
你不需要看懂每一行代码,也可以用这条旅程检查一个软件是不是靠谱:
• 界面有没有接住操作? • 规则有没有正确判断? • 数据有没有真的保存? • 环境能不能稳定运行?
如果这四件事都通了,一个小应用才算开始“活起来”。
为什么这对 vibe coding 很重要
因为 Codex 很擅长写代码,也很擅长快速生成页面。
但你给它的问题越模糊,它越容易做出一个“看起来像”的东西。
你说:
做一个待办页面。
它可能给你一个漂亮列表。
你说:
做一个待办应用。用户可以新增任务,标题不能为空;任务要保存,刷新后仍然存在;已完成任务可以筛选;第一版先在本地浏览器运行。
这时,Codex 得到的就不只是页面要求,而是一个软件要求。
所以,以后你描述需求时,可以先问自己四个问题:
第一,用户要看到什么?
这是界面。
第二,软件要按什么规则处理?
这是逻辑。
第三,哪些数据要保存?
这是数据。
第四,它要在哪里运行,给谁访问?
这是运行环境。
你会发现,这四个问题一问出来,你和 Codex 的对话会立刻变得更清楚。
你不再只是说“帮我做个东西”。
你开始像一个小产品负责人一样,说清楚这个软件要怎么工作。
结尾:先看懂软件,再谈写代码
软件不是一团神秘代码。
也不是一张漂亮页面。
它更像一个小系统:
• 界面负责让你操作。 • 规则负责让它做出判断。 • 数据负责让它记住。 • 环境负责让它运行。
代码很重要,但代码不是理解软件的唯一入口。
对小白来说,更好的起点是先看懂这四件事。
以后当你让 Codex 帮你做一个功能时,不妨先用这四句话描述:
• 用户要看到什么? • 软件要按什么规则处理? • 哪些数据要保存? • 它要在哪里运行、给谁访问?
这就是你进入软件开发世界的第一张地图。
当界面、规则、数据和环境变多、变复杂,就会自然出现更多分工:有人负责想清楚需求,有人负责设计界面,有人负责处理数据,有人负责测试,有人负责发布和维护。
下一篇,我们就聊聊:
做软件的人到底都在做什么?
夜雨聆风