夜雨聆风学习资料网

ARTICLE · 1135155

AI 到底能不能写产品软件?我用 AI 搓了一个小程序,你们看看怎么样

AI 到底能不能写产品软件?我用 AI 搓了一个小程序,你们看看怎么样
先说我自己的答案:能,但它不是"代替你写代码",而是"把你从打字员变成产品经理"。

这句话不是喊口号,是我做完下面这个小程序之后,最真实的一点体会。

一、两个身份,一个痛点

先交代一下背景,否则后面的话你不一定信。

我是一名非典型程序员:写过不少代码,但主业不是写小程序代码,是写嵌入式代码的。日常和 Xilinx Zynq、FPGA 原型验证平台、嵌入式工具链打交道——写驱动、写工具、和硬件寄存器较劲。说得直白一点:我懂软件,但不懂小程序;更不懂互联网那一套前端 + 后端。

我也是一名非严肃跑者:跑马拉松,也跑越野,成绩平平,重在参与。不是那种周周拉练、月月参赛的严肃跑者,但一年到头也会报好几场比赛。

于是就有了一个很典型的痛点:

想报一场比赛,得先关注一堆赛事公众号,等着它们推文。

在朋友圈或跑群里刷到一篇规程,点进去读完,然后拿备忘录记下报名时间和开赛时间——到了报名那天,要么忘了,要么找不到那篇推文了。

这类 App 其实早就有,但大多太重了:要注册、要登录、要绑手机号,一打开先弹一堆弹窗,想找一场比赛得先学会整套操作。我想要的只是一个"看看最近有什么比赛"的工具,不是另一个需要我花时间伺候的 App。

至于跑完的比赛,更没有地方沉淀。你跑过哪些城市、拿过哪些成绩、哪年是 PB,全靠记忆。

这恰好是我要的东西:需求真实存在,但规模小到大厂看不上——正好拿来做一个 AI 实验。

先说明白:它首先是一次试验,但它也确实是个能用的产品。这两件事不冲突。

我不是要创业,也没打算靠它赚钱。我只是想知道:在 AI 的帮助下,"有想法但不会做"这件事,到底还算不算一个障碍?需求是真需求(我自己就在用),所以它做出来就是能用的东西;但做它的动机,一半是解决自己的痛点,一半是纯粹好奇。

需求明确、规模不大、我有全部领域知识、我不需要它赚钱。—— 这正是检验"AI 到底能不能写软件"的最好靶子。

二、先看一眼它长什么样

小程序叫「跑马助理」,定位一句话:

面向国内马拉松 / 越野 / 铁人三项跑者的赛事助手。

打开就是四个页面:

「赛事」是主视图,一屏就是一张张赛事卡片:赛事名、状态胶囊(报名中 / 报名未开始 / 筹备中 / 报名截止 / 比赛中 / 已结束)、日期、城市、项目组别。

想筛什么,拉一下筛选抽屉:赛事状态 / 地区 / 时间三个维度,地区覆盖全国 34 个省级行政区。

这里有个细节值得说一下。时间档位不是我想当然写的,是迭代了几轮才定下来的。最早有一档叫「本周末」,用了几次发现完全不好用——周六早上打开,本周末的比赛已经开跑了;周日晚上打开,「本周末」指的是下个周末。最后一刀砍掉,改成了「一周内」(今天起 7 天),语义终于清晰。

这种"用起来别扭",是我自己作为用户才会最先发现的。专业开发团队做需求评审时,大概率会通过「本周末」这个设定;只有真的每周都拿它找比赛的人,才知道它别扭在哪。

三、功能清单:不为炫技,只为解决问题

下面这张表是我按「解决什么问题」整理的,不是功能罗列。

1. 赛事三视图:列表 / 日历 / 地图

同一个赛事库,三种看法:

视图
解决什么问题
怎么看
列表
「近期有什么比赛?」
按时间排序,多维筛选
日历
「我休息的那几天有比赛吗?」
月历,日期格显示当天场次;可按比赛时间或报名时间两个维度看
地图
「附近有什么比赛?」
打点,同城散开,点开看卡片

日历那个「双维度」是我坚持加的:你真正做报名决策时,看的是报名时间;安排行程时,看的才是比赛时间。这两个时间点往往差好几个月,只有一个维度是不够用的。

地图页这里也有个迭代痕迹:一开始筛选器是照搬列表页的胶囊样式,结果地图顶栏浮在浅色底图上,白字胶囊整条看不见。改成了白底深字 + 选中深绿反白。这不是设计规范问题,是"跑到真机上才看得见"的问题。

2. 赛事详情 + 同天赛事 / 附近赛事

点进一场比赛,除了基本信息,页面底部还有三个可以左右切换的栏目:

• 赛事资讯—— 这场比赛的公众号推文

• 同天赛事—— 同一天还在哪办赛(如果这场没录比赛日期,这一栏自动藏起来)

• 附近赛事—— 距这场 200 公里内的其它比赛,按距离由近到远(这场没坐标就不显示)

「附近赛事」是我个人最喜欢的一个。你去外地跑马,落地了才发现「原来同周末隔壁城市也有一场」,这种感觉挺好的。

3. 完赛记录 + 证书 + 一键出图

这是整个小程序里我自己用得最多的部分。

跑完一场比赛,记录一下:项目、成绩、名次,再把完赛证书拍张照传上去(纯图片保存,不识别、不上传解析,单张小于 2MB,每人每年上限 12 张)。

所有记录汇成一条垂直时间轴,一年一年往下排。想要分享,点一下「生成时间轴图片」:

一张竖版海报,含比赛卡片、证书缩略图、统计数字(跑过的马 / 跑过的城)、地图点位、页脚一句随机寄语、底部小程序码。生成完走微信原生图片预览,长按可以保存 / 转发 / 收藏。

这份"跑者档案"是我做这个项目最原始的动力。比赛年年跑,但除了相册里的奖牌照片,什么都没留下来。

顺便交代一个取舍:证书我一开始是想做成"自动识别"的(拍照就能读出成绩、名次,自动关联到赛事)。后来砍掉了,改成纯图片保存 + 手动关联。原因不是技术做不到,而是机器识别完,用户还是要核对、要确认、要修正——识别错一个成绩,比让他自己填十秒钟更让人恼火。这个功能留着以后再说,但当前版本不值得。

4. 报名提醒 + 站内信

赛事状态有变化(开放报名 / 报名截止 / 改期 / 取消 / 开赛)时,通知你一声。

这里我把两个概念拆得很清楚,因为混在一起就是坑:

• 收藏:纯关系,只表示"我关注这场"。状态变了,消息中心里给你一条站内信。不弹授权框,不消耗任何额度。

• 报名提醒:你主动约的一次触达,选一个绝对时刻(默认报名开始当天 09:00),点一次授权换一次额度,到点提醒你。

为什么要拆?因为「收藏」是低频的随手动作,「提醒」是需要授权的正式承诺。以前把两者焊在一颗按钮上,结果是——大部分人收藏了,但从来没授权过推送,于是永远收不到任何消息,还以为是 bug。

5. 赛事线索:用户提交,我来收录

这个功能解决的是"信息源头"问题。

比赛信息最权威的来源就是组委会公众号发的竞赛规程。所以「提交赛事」入口只接受微信公众号文章链接,你在公众号文章页点右上角「···」→ 复制链接,粘进来就行。

后端会去读这篇推文,自动把关键信息一条条摘出来:报名时间、比赛项目、报名费、发枪时间、赛事等级、参赛规模、路线、是否抽签……然后进我的后台待收录列表,我核对一眼确认上架。

同一篇文章,从不同入口分享出来,链接尾巴上会带一串不一样的小字符。所以入库前会先把这串尾巴去掉,同一篇推文只会产生一条线索,不会重复。

四、AI 到底帮我做了什么?(干货部分)

好了,前面都是产品介绍。如果你是从业者,你关心的是这一段。

先给一个诚实的定位:

AI 真正强的三件事

① 把"想法"翻译成"能跑的代码",中间不需要我打字。

我的工作方式是:我描述行为,它写实现。

举两个真实例子。

一个是我要给小程序加「附近赛事」,按距离由近到远排。我提的需求是:

列出距当前赛事 200 公里内的赛事,直线距离、由近到远、只列未来的。当前赛事没有位置信息就不显示这一栏。

它给出的实现里用到了云数据库的地理查询。跑起来报了一条错:

Class constructor Point cannot be invoked without 'new'

翻译成人话:位置信息这类特殊数据,系统只接受一种固定的写法,它一开始写错了。这类坑在文档里不显眼,得翻半天才找得到。它是自己定位到根因的,一次改好。

这个错误的定位速度,比我翻文档快。

第二个例子更典型。小程序里有个页面,昵称输入框空着的时候,点它没有光标、也不弹微信昵称建议。我第一反应是能点到的地方太小了,让它把点击区域撑大点。它照做了,结果——

文字整个消失了。

它给出的解释让我印象很深。这个项目全局定了一条规矩:盒子先定尺寸,往里塞内容——就像先做好一个固定大小的相框,再把照片塞进去。在这个规矩下,把"点击区域"撑大,挤的是里面的文字,而不是外面的框。一个原本高 48 的输入框,被硬塞了 36 的点击区之后,留给文字的空间算出来是负数,直接被压成 0——文字连同提示语,一点显示的地方都没有了。

正确解法是:把框本身加高来获得点击区域,再让文字在这一行里垂直居中,而不是靠加点击区去挤。

说句实话:这个道理我自己是懂的。但我大概率会先试两轮、跑起来肉眼看、再回头反思。它一次就把因果链说清楚了,而且主动把"为什么上一轮的改法是错的"一并写进注释。

② 把"重复劳动"吞掉。

这个项目一共 23 个页面、18 个后端服务、14 张数据表。如果全靠自己手写,光是页面骨架、服务样板、格式化和检查逻辑,就够我写两个月。

现在这些是它的活。我只需要决定"这一页要有什么、这个字段该叫什么"。

换句话说:它替我省下的不是打字的时间,是"跨过陌生领域"的时间。我不需要先去学一遍小程序怎么做、再学一遍后端怎么写,才能动手。它把学习成本也一并吞掉了。

③ 当我的"第二双眼睛"。

它有个我很依赖的习惯:改完主动回读、主动找自相矛盾的地方。

有个例子:我做「同天赛事」这一栏的时候,它给三个栏目各自起了名字来记状态。结果发现——如果页码、到底加载完没有,这些信息三个栏目共用一份,就会串台(切到「同天赛事」,显示的却是「赛事资讯」的页码)。它自己把三个栏目彻底分开,各管各的。

这种"改 A 的时候顺手想一下 B 会不会受影响",是资深工程师的直觉。它现在有。

AI 真正弱的三件事

① 它不知道"用起来别扭"。

前面说的「本周末」档位,就是它不会主动砍的。因为从逻辑上挑不出错:本周末就是本周六到本周日,没毛病。

问题在于——周六早上用一次你就知道有多蠢了。这需要"我是这个产品的用户"。

② 它不知道"业务上该不该这么做"。

证书要不要自动识别成绩,是纯粹的产品判断,AI 给不了。它能告诉你"识别准确率大概 95%",但判断不了"剩下那 5% 要用户自己核对的麻烦,比让他手填还大"。

③ 关键的"最后一公里",还得人来验收。

AI 写的代码会有静默错误——不报错、不崩溃,但行为是错的。

这个项目里有好几个典型:

• 往数据库里存东西的时候,漏填了"这条记录是谁的"。结果记录确实存进去了、也提示成功,但凡是按"我的记录"去查的地方,一条都查不到——表现为"我明明关注了,重新进来又变回未关注",而且重复检测也失效,每点一次就往库里多塞一条垃圾。

• 从服务端取数据时,一部分筛选条件放在了本地做,但服务端只返回了前 300 条——第 301 条以后的赛事被悄悄丢掉了,不报错。

• 一次改动只改了样式,忘了改页面结构——不报错、不告警,页面看起来"什么都没变"。

这些错误的共同点是:所有测试都能通过,只有真实用户能撞见。

所以我给自己的规矩是:AI 写代码,我验证行为。每个功能我都真机跑一遍,用我自己跑马的经验去撞它。

一个更重要的发现

用了这么久,我最大的体会不是"AI 能替代程序员",而是——

AI 把"实现"的成本压到接近零,"判断"的成本反而被放大了。

因为实现变便宜了,你会做出更多东西,也就需要做更多判断:

• 这个功能该不该有?

• 这个字段要不要存?

• 这次改动会不会影响别的页面?

• 这个报错是真有问题,还是环境闹脾气?

这些判断,AI 会给你答案,但不会替你负责。

我现在的做法是:让它先把方案和理由讲清楚,我确认方向;确认完,它一次做到底。方向对了,实现交给它;方向错了,写得再快也是白搭。

五、结论

回到标题的问题。

AI 到底能不能写软件?

我的答案是:能写出"能跑的软件",但写不出"值得用的产品"。

这两者的差距,就是人的价值所在。

AI 负责
我负责
实现
写代码、查文档、定位报错
——
判断
给方案 + 给理由
拍板
验收
自检、回读、找矛盾
真机跑一遍,用真实场景撞
审美
执行
决定"别扭不别扭"
意义
——
决定"做不做"

如果要用一句话总结这次试验的体会:

AI 让"不会写代码的人"能做出软件,让"会写代码的人"能做出更多软件。但它替代不了"知道该做什么"的那个人。

那个人,得是你。

六、最后,请你们看看怎么样

说回这个项目。

「跑马助理」现在已经上线了,功能也齐了:赛事三视图、详情页、同天 / 附近赛事、完赛记录时间轴、证书管理、一键出图、报名提醒、赛事线索提交。

跑马助理

我一个人,加上一个 AI,就这么把一个想法做了出来。

说实话,我自己是有点意外的。不是因为功能有多复杂,而是因为——按以前的方式,这件事我根本不会开始。不是不想做,是"要学的东西太多、要写的东西太多",光想想就劝退了。

如果你也有一个搁置很久的小想法,一直卡在"我不会做",我建议你也试一次。反正只是做个试验,试试又不亏。

我知道它不是完美的。所以标题里那句"你们看看怎么样",是真心问的,不是客套。

如果你也是跑者,或者你只是对"AI 写软件"这件事好奇,都欢迎告诉我:

• 功能上缺什么?(比如你希望有什么筛选维度、什么提醒方式)

• 哪里用起来别扭?(我最想听的就是这个)

• 有什么你一直想做、但市面上没有的工具?

评论区或者后台留言都能收到。

相关学习资料