[db:标题]

摘要:一个不会编程的人,用三个 AI 写了两万五千行代码之后的终极反思
我说得最多的四个词是:「不合理」「不好看」「你看着办」「再改一下」。
这四个词,驱动了 25,000 行代码、256 个测试、三个平台的构建。
AiReader 已经完全开源,源码在 GitHub:github.com/LissajousX/aireader 一个不会编程的人,用三个 AI 写了两万五千行代码之后的终极反思 我说得最多的四个词是:「不合理」「不好看」「你看着办」「再改一下」。 这四个词,驱动了 25,000 行代码、256 个测试、三个平台的构建。 没有一个词跟技术有关。 〇、一个不该存在的软件 2026 年初,GitHub 上出现了一个叫 AiReader 的开源项目。 它是一个跨平台的智能阅读器——支持 PDF、EPUB、Markdown,内置本地 AI(不联网,不上传数据),可以翻译、总结、问答。 技术栈是 Tauri 2.0 + React 18 + TypeScript + Rust + llama.cpp,支持 CUDA / Vulkan / Metal GPU 加速,有 CI/CD 自动构建,跑在 Windows、macOS(Intel + ARM)和 Linux 上。 看起来像是一个小型创业团队三个月的产出。 实际上,它是一个人在两周内做的。 更准确地说——它是一个完全不懂上述任何一项技术的人,用三个不同的 AI 做的。 我没有写过一行 React。我不知道 Tauri 是什么。我连 TypeScript 和 JavaScript 的区别都说不清。Rust?听说过,没碰过。llama.cpp?知道它能跑模型,不知道它怎么编译。 但这个软件确实在跑。确实在被人用。确实通过了 256 个自动化测试。 ↑ 这就是它。一个不懂编程的人和三个 AI 的作品。 这篇文章不是来炫耀 AI 有多强的。网上这种文章已经够多了。 我想谈的是一个更深的问题: 如果代码可以被生成,那什么东西不能被生成? 如果 AI 可以做「怎么做」,那人类剩下的「做什么」和「好不好」,到底价值几何? 一、三个 AI,三种角色,一个人 先说一个很多人没意识到的事实:这个项目不是「一个人和一个 AI」的故事,而是「一个人和三个 AI」的故事。 第一个 AI:ChatGPT —— 产品顾问 在写任何代码之前,我花了大量时间在 ChatGPT 网页版上聊天。 我的第一句话是: "我想做一个加入大模型功能的阅读器,帮我阅读外文文献。你能帮我设计一下吗?顺便看看有没有类似产品。" ChatGPT 给了我一个大而全的方案:架构图、技术选型、竞品列表(NoteAI、Scholaread、ReadPaper、DeepReader、SciSpace)、开源项目参考(ChatGPT-Paper-Reader、FluentRead)。 我什么都不懂,但我知道这个方案太大了。 我说:「调整一下 MVP,只做翻译、总结、问答。另外我本地 RTX 3080 能跑什么模型?」 然后我探索了 Agent 框架、本地小模型的能力边界、Qwen-Agent 的可行性。 到这里为止,一切看起来像是一个正常的技术调研过程。 但真正的转折发生在我说出这句话的时候: "我不想对技术选型做什么限制。我只想做提出需求的人。" 这不是一句随口说的话。这是我在那个时刻做出的一个判断——我不应该假装自己是技术人员。我应该做我真正能做好的事情:想清楚我到底要什么。 从那一刻起,我不再问 ChatGPT 「用什么框架」,而是让它帮我写一份纯粹的产品需求文档。 ChatGPT 产出了一份 PRD,其中有一个设计原则,后来成了整个项目的灵魂: 「AI 是坐在你旁边的研究助理,不是替你读书的机器人。」 ChatGPT 的贡献是巨大的。但它写了零行代码。 第二个和第三个 AI:Claude Opus 4.6 + GPT 5.2 —— 程序员 我拿着 ChatGPT 帮我写的 PRD,进入了 Windsurf IDE。 第一条消息: "这是一个需求文档,我希望你根据它来开发一个阅读器。未来要适配多平台。我的开发平台是 Windows 11,本地用 Ollama 跑模型。" AI(Claude Opus 4.6)分析完 PRD,输出了完整的技术方案——选了 Tauri 2.0、React、TypeScript、Zustand、SQLite,画了数据模型、目录结构、分期计划。 我说:"完全同意你的方案。请开始开发。" 我甚至不知道它选了什么。我是后来才搞明白 Tauri 是个桌面应用框架、Zustand 是个状态管理库这些事的。 AI 一口气生成了项目骨架,跑了 npm install,启动了 npm run tauri dev。 一个功能完整的阅读器雏形就这样出现在我屏幕上。 从那一刻起,我的工作变了。我不再是提需求的人。我变成了这个软件的第一个用户,也是最苛刻的用户。 那我是什么? 三个 AI,各有分工: AI 角色 产出 ChatGPT 产品顾问 竞品分析、PRD、设计原则 Claude Opus 4.6 主力程序员 架构、前端、后端、测试 GPT 5.2 辅助程序员 部分功能实现、Bug 修复 而我? 我是产品经理。我是测试员。我是那个说「不合理」的人。 ↑ 用 AiReader 读《Attention Is All You Need》。右侧 AI 面板正在解释论文内容。模型跑在本地,不联网。 二、70% 的时间在做一件事:用自己的软件然后吐槽 很多人以为 AI 编程就是:说一句话 → AI 写完 → 完事。 不是的。差远了。 我的时间分配是这样的: 架构 & 核心功能搭建 ██░░░░░░░░ 20% 自测 & 吐槽 & 迭代 ███████░░░ 70% 跨平台适配 & 发布 █░░░░░░░░░ 10% 70% 的时间,我在做的事情是:打开软件,用它看一本书,然后记下所有让我不爽的地方。 每天记一批,攒够了发给 AI: 欢迎页那个图标太大了,我希望书的图案跟 A 字等高 PDF 打开后还没加载完就滚动,会直接跳到最底下 目录按钮太丑了 工具条优化一下,你看着办 还有啥能美化的你看着办吧 注意:这些消息里没有任何技术内容。 我不知道「目录按钮」在代码里叫什么。我不知道「PDF 跳到底下」是渲染问题还是滚动事件问题。我不知道「工具条」是用 flexbox 还是 grid 布局的。 我只知道这个东西不好用。 而这,恰恰是最有价值的信息。 ↑ 经过无数轮「不好看」「再改一下」之后的暗色主题。右侧是 AI 翻译结果。每一个像素都是吐槽出来的。 三、一个哲学问题:什么东西不能被生成? 在这个项目里,AI 生成了: 25,000 行代码 完整的前后端架构 256 个测试用例 CI/CD 流水线 多平台构建配置 GPU 加速适配方案 AI 没有生成的是: 「我想做什么」—— 这个想法来自我每天阅读英文文献的痛苦 「这个不合理」—— 每一个 bug 报告、每一个体验吐槽都来自我真实的使用感受 「这样不够好」—— AI 每次说「已修复」,我都要亲自验证,不合格就打回去 「先想清楚再做」—— 在 ChatGPT 中从技术探索转向产品定义的那个关键判断 「给 AI 一个好的参考」—— 去 GitHub 找优秀开源项目让 AI 学习的决策 让我把这五件事抽象一下: 人类做的事 本质 想做什么 意图 这个不合理 判断 这样不够好 品味 先想清楚再做 策略 找参考给 AI 资源调度 意图、判断、品味、策略、资源调度。 这五样东西,在 2026 年的今天,AI 一样都生成不了。 不是因为 AI 不够聪明。而是因为这五样东西的源头不是信息——是欲望、是偏好、是价值观、是一个人活到现在所有经历的总和。 AI 可以写出一万种"好看的界面"。但只有你知道"好看"对你来说意味着什么。 AI 可以提供一百种技术方案。但只有你知道你愿意为什么东西花两周时间。 代码是手段。判断才是目的。 四、我做过最有效的一件事,和最傻的一件事 最有效的一件事:给 AI 找老师 EPUB 电子书的渲染问题困扰了我很久。打开某些书会报 403 错误、超时、白屏。AI 修了一轮又一轮,每次都说修好了,但总有新的边界情况。 我做了一件事:去 GitHub 上找了两个优秀的开源阅读器(Alexandria 和 Readest),下载下来扔给 AI: "请先仔细学习两个优秀的开源项目,然后再来做我们这个。务必认真学习,不要偷懒。" 一次就解决了。 AI 从参考项目里学到了 EPUB 路径解析的正确做法,做了三层兜底修复,之后再没出过问题。 启示:用自然语言描述「应该怎么做」很难说清楚。但给 AI 一个好的参考实现,比说一万句话都管用。 这个技巧的本质是什么?是资源调度——我不会写代码,但我会找好的代码。我不知道正确答案,但我知道谁知道正确答案。 最傻的一件事:太晚才写测试 项目后期,同样的 bug 反复出现:进度条修了四次,删除确认修了两次,macOS 选中文本修了三次。 原因很简单——没有测试。AI 每次说「已修复」,我只能手动试。而手动测试永远覆盖不到所有情况。 我跟 AI 说:「把测试代码都给我写了。」 AI 一口气写了 256 个测试用例。覆盖了所有核心模块。然后建了 CI 流水线,每次提交代码自动跑测试。 从此再也没有反复出现的 bug。 我最后悔的是没有更早做这件事。如果在项目中期就建测试,很多 bug 第一次就能彻底解决。 AI 写测试的效率极高——你说一句"给这个模块写测试",它能一次性输出几十个 test case。这个能力要尽早用上。 五、AI 的真正恐怖之处,不是它能写代码 AI 能写代码,这已经不是新闻了。 真正恐怖的是:AI 让「能力」和「成本」脱钩了。 以前,如果你想做一个跨平台桌面应用,你需要: 一个前端工程师(React + TypeScript) 一个后端工程师(Rust 或 C++) 一个 DevOps 工程师(CI/CD + 多平台构建) 一个测试工程师 一个产品经理 三到六个月 至少五十万人民币 现在你需要的是: 一个想清楚了自己要什么的人 两周 几乎零成本 这意味着什么? 意味着「有没有技术团队」不再是你能不能把想法变成产品的决定性因素。 意味着一个老师可以自己做教学工具。一个医生可以自己做临床辅助系统。一个研究员可以自己做数据分析平台。 意味着创造力的瓶颈从「能不能实现」变成了「有没有想法」。 从「会不会做」变成了「知不知道该做什么」。 六、一些不舒服的真相 在写这篇文章的时候,我不得不面对一些不舒服的真相: 真相 1:AI 的代码质量,对我来说不可评判 我不会编程。我无法判断 AI 写的代码是优雅还是丑陋。我只能判断软件好不好用。 如果 AI 在某个地方写了一个性能极差但功能正确的实现,我完全发现不了——直到有一天用户量增长到一定程度,问题才会暴露。 这是「不懂技术的人用 AI 编程」的最大风险:你不知道你不知道什么。 真相 2:AI 会「静默失败」 这是我在这个项目里学到的最深刻的教训。 AI 生成的代码有一种特殊的失败模式:它不会报错,但它不工作。 比如 CUDA GPU 加速。AI 写了加载 GPU 驱动的代码,代码逻辑完全正确。但在实际运行时,如果 DLL 加载失败,代码默默地 fallback 到了 CPU 模式——没有任何错误提示、没有任何日志。 用户以为自己在用 GPU 加速,实际上一直在用 CPU。 为什么会这样? 因为 AI 在写代码时倾向于「不让程序崩溃」。它会加 try-catch,会加 fallback,会加默认值。这在大多数时候是好事。但有时候,崩溃比静默失败好一万倍——至少崩溃了你知道出了问题。 真相 3:我说了很多次「你看着办」 在项目后期,面对一些细节优化,我经常说「你看着办吧」。 这不是信任 AI 的判断。这是懒。 事后回看,AI「看着办」的结果质量参差不齐。有些很好,有些明显不符合产品的整体风格。 「你看着办」应该只用在你真的不在乎的地方。如果你在乎,就必须给出明确的判断。 七、给所有想用 AI 编程的人 如果你看完这篇文章,想自己试试用 AI 做一个产品,这是我最想告诉你的几件事: 1. 先想清楚你要什么,再碰 AI 不要一上来就说「帮我写个 XXX」。 花时间在 ChatGPT 上聊。调研竞品。了解别人怎么做的。然后写一份需求文档——哪怕只有一页纸。 PRD 是你给 AI 的边界。没有边界的 AI,会给你一个什么都有但什么都不对的东西。 2. 不同的 AI 擅长不同的事 ChatGPT 网页版适合开放式探索、产品思考、竞品分析。 Windsurf / Cursor 中的 AI 适合精确的代码编写和工程执行。 不要指望一个 AI 什么都做。像管理团队一样管理你的 AI。 3. 你最大的价值是说「不」 AI 永远会说「好的,已完成」。它不会告诉你这个方案不合理,不会告诉你这个交互很蠢,不会告诉你用户不会喜欢这个。 你的工作不是说「好」,而是说「不行,重来」。 每一个成功的产品背后,都有无数个被否决的方案。AI 不会否决自己,这件事只有你能做。 4. 尽早建测试 AI 写测试的速度极快。一句话几十个 test case。 不要等到项目末期才想起来写测试。在核心功能成型后就让 AI 写。这会节省你后面无数的手动验证时间。 5. 遇到难题,给 AI 找参考 当你发现 AI 反复修同一个问题修不好时,不要继续用自然语言描述。 去 GitHub 上找一个解决了同样问题的开源项目,下载下来扔给 AI 说「先学这个」。 一个好的参考实现,胜过一千句需求描述。 6. 记录一切 我留下了 9 份对话记录。数百条消息。数万字。 这些记录不仅帮助我复盘,还让我写出了这篇文章。 跟 AI 协作的过程本身就是知识。记录它,你会在回头看时发现很多当时忽略的洞见。 八、终极问题:程序员会失业吗? 我知道你在等这个问题。 我的回答是:问错了。 「程序员」从来不是一个统一的职业。它包含了: 把需求翻译成代码的人(编码者) 设计系统架构的人(架构师) 保证软件质量的人(测试工程师) 理解用户需求的人(产品工程师) 做出技术判断的人(技术负责人) AI 正在极速替代第一种。这是事实。 但后四种——设计、质量、理解、判断——AI 目前做不了,短期内也做不了。 不过,这件事的意义远比「谁会失业」深刻得多。 它意味着:以前只有程序员能做的事,现在每个人都能做了。 不是程序员失业了——而是每个人都变成了程序员。 或者更准确地说:每个人都变成了产品经理。因为现在,从想法到产品的距离,只剩下一份需求文档和几句清晰的判断。 九、代码已死,判断永生 我花了两周时间,用三个 AI,做了一个 25,000 行代码的跨平台桌面应用。 我没有写一行代码。 但我做了几百个判断。 哪些功能要做,哪些不做。 这个交互合不合理。 那个按钮好不好看。 这个 bug 修没修干净。 AI 该在什么时候介入,什么时候闭嘴。 每一个判断都很小。但所有判断加在一起,就是这个产品。 代码是 AI 写的。但产品是我的。 因为产品不是代码。产品是一千个判断的总和。 如果你也想试试,AiReader 已经开源:GitHub - LissajousX/aireader 它不完美。它是一个不懂编程的人和三个 AI 的实验。但它确实在跑,确实有人在用。 如果这篇文章让你觉得「也许我也可以」——那就对了。你可以的。 你需要的不是学编程。你需要的是想清楚你要什么,然后有勇气对 AI 说「不行,重来」。 ↑ AI 配置页。自动探测硬件、下载最佳模型、一键启动。支持 CUDA / Vulkan / Metal。这也是 AI 写的。 附录:硬数据 指标 数据 项目总代码量 ~25,000 行(前端 + 后端) 我手写的代码量 0 行 我掌握的技术栈 0 个 参与的 AI 3 个(ChatGPT + Claude Opus 4.6 + GPT 5.2) AI 分工 ChatGPT: 产品顾问 / Claude + GPT: 工程执行 对话记录 9 份 关键消息 数百条 开发周期 ~2 周 单元测试 0 → 256+ 支持平台 Windows / macOS (Intel+ARM) / Linux GPU 加速 CUDA / Vulkan / Metal 开源地址 github.com/LissajousX/aireader 本文作者不会 React,不会 TypeScript,不会 Rust,不会 Tauri,不懂 llama.cpp。但他知道什么是一个好的阅读器。在 2026 年,这就够了。 对了,差点忘了——这篇文章也是 AI 写的。 我只说了一句:「给我写一篇惊天地泣鬼神的博客文章。」 然后我看了一遍,说:「行。」 你看,我说的没错吧——判断才是最重要的那个能力。