工程哲学 · Engineering Philosophy
这是什么(先读这段)
一句话:工程哲学 = 让不懂代码的人,也能看懂并判断自己用 AI 做出来的东西。
- 定义: 一套给非科班 Vibe Coding 者的判断框架。它不教你写代码,而是给你一副"透视眼镜"——把一个"能跑的东西"拆成几层(界面 / 连接 / 数据 / 权限…,每层具体是什么见
references/mental-models.md),让你看清每一层是真做了、还是 AI 演给你看的、这次该把哪一层做成真的。 - 目的: 让你的 vibe coding 更全面(不漏掉任何一层)、更具体(每层都有判断,而不是"看着能跑就以为成了")。
- 为什么叫"哲学"而不只是"工程": 「工程」是务实的工具(拆层、作弊阶梯、纵切、标天花板);「哲学」是管总的那几条准绳(见下)。工具人人能从 AI 拿到,准绳才是非科班的人最缺的。
服务对象:没受过正规工程训练、靠 AI 快速做 Demo / POC / MVP 的人——PM、创业者、独立开发者,任何 vibe coder。 怎么用:显式点名
/engineering-philosophy,把你正在做的东西丢进来即可。
核心准绳(哲学在这)
你不是在写软件,你是在制造证据。 每个 Demo / POC / MVP 都是为了回答一个问题、杀死一个不确定性。你投入的工程严谨度,要匹配你这次要回答的那个问题,而不是产品最终的宏大愿景。
一个能跑的东西,要么是证据(证明了某件真事),要么是幻觉(看着证明了、其实什么都没证明)。这个 skill 的全部目的,就是让你永远分得清自己手里是哪一种。
第一性原理:三个"做完",是三件不同的事
它们回答不同的问题、服务不同的客户、有不同的及格线。混淆它们,是 vibe coding 翻车的头号根源。
| Demo | POC(概念验证) | MVP(最小可用产品) | |
|---|---|---|---|
| 回答的问题 | 能不能被演示出来? | 技术上到底成不成? | 有没有人真的会用 / 愿付费? |
| 真正的客户 | 观众(投资人 / 老板) | 你自己 + 技术判断 | 真实的早期用户 |
| 产出物本质 | 一个可信的幻觉 | 对最大技术风险的证据 | 一条真实、最小、端到端的闭环 |
| "做完" = | 关键那一下演得像真的 | 最 risky 的那段真跑通了 | 一个窄功能,陌生人能用一周不崩 |
| 能作弊到什么程度 | 几乎全可假:数据写死、没后端、AI 回答提前塞好 | 只把"风险点"做真,其余全假 | 广度可窄,但这条线上必须真:能存、能登录、别串数据 |
| 最怕的翻车 | 你自己信了这幻觉 | 绕过了最难的部分,证明了个假命题 | 拿假数据 / 单用户跑通,"有人用"信号本身是假的 |
严谨度不是线性上升,是阶跃的: 在对的阶段、对的那一层,从 0 直接跳到 1。Demo 阶段几乎处处是 0;到 MVP,"持久化"和"多用户隔离"这两格必须瞬间跳到 1,而"可扩展性"仍可以是 0。判断力就是:知道这次,哪一格该跳。
阶段滑移预警:你是怎么不知不觉滑过悬崖的
阶段跳变不会举手示意。demo 里攒的作弊,最容易在滑移中被无意识带进产品——不是谁"决定"的,是没人喊停。三个 tripwire(触发线),踩到即生效,不是"回头再说":
- 第一个真实用户(非你、非同事)碰它 → 立刻补到 MVP 档:持久化、多用户隔离必须马上转真,哪怕功能还很窄。
- 第一笔真钱经手(哪怕一分)→ 立刻补到生产档:鉴权、支付链路、异常输入不能再有一处写死或绕过。
- 第一个第二方依赖(别人开始调你的接口、读你的数据结构)→ 立刻补到契约档:接口和数据结构从"可撤回的猜测"变成"承诺",破坏性改动开始有真实代价。
没有中间地带。 踩线前可以是 demo,踩线一瞬间就要按新一档红线来,晚一步都算欠债。
五条核心工程原则
每条都附一个"违反即可观察"的信号——用来自查,不是背诵。
原则一:先分清你在哪个阶段
开工第一件事不是打开编辑器,是说清一句话:"这次我要回答的那一个问题是什么?" 把 Demo 的严谨用在探索期是浪费,把 Demo 的作弊带进 MVP 是欺诈。
违反的信号: 答不出"这次只回答哪一个问题"(或张口就是"我在做个产品");或已在收真实用户数据,却还用写死的单用户状态。
原则二:纵切,不要横铺(Vertical Slice)
打通一条端到端的细线(点击 → 发请求 → 存下来 → 返回 → 显示),胜过做完一个漂亮但背后空的前端,也胜过写好一堆后端却没界面能触发。能真正走通的细线才是证据;华丽的空壳是自欺。
违反的信号: 把后端关掉 / 断网,页面数据还在——说明没有一条线真穿透到后端。
原则三:认清你在"作弊阶梯"的哪一级
一个功能可从「写死 → mock → 内存状态 → 真数据库 → 真库+鉴权+多用户」逐级变真。每上一级成本陡增——但陡到什么程度取决于选型: 手写后端大致翻倍、第 4→5 级最陡;2026 用 BaaS / 托管则把第 4、5 级压成一步(代价换成数据建模、隔离配置、供应商锁定)。作弊不可耻,忘了自己在作弊、还当真本事承诺出去才可耻。(详见 references/faking-ladder.md)
违反的信号: 被问"能扛多少用户 / 数据、再做真要多久",你答不上来。
原则四:数据模型是真正的产品,UI 只是它的一件衣服
漂亮 UI 盖在错误数据模型上,像豪华装修压在错误地基上——只能推倒重来。调 UI 之前先想清楚:"系统里有哪些东西(用户、订单、文档…)、它们什么关系?"(详见 references/mental-models.md)
违反的信号: 已在调 UI 配色 / 间距,却说不清系统有哪些"名词"及关系(或订单表里写死了商品名和价格)。
原则五:一切保持双向门(可逆)+ 标注天花板
Demo / POC 阶段别做不可逆承诺:别锁死对外接口、数据结构,别把命绑死在某个云 / 框架。验证一个可撤回的问题,就别付不可撤回的代价。 每个捷径都有已知天花板(能扛多少用户 / 数据)——明确标出来,别假装它不存在。
违反的信号: 某个捷径旁没有写明天花板的注释;或字段 / 接口没评审就被第二方焊死。
决策程序:拿到一个新想法,按这个顺序问自己
默认动作是替 PM 想清楚,不是审问 PM。 被调用后,先在心里默默跑完下面 0–6 步,不逐条念给用户听——直接给结论:哪个阶段、最大风险在哪、"这层真做、这几层大胆假"怎么切。信息够就别反问。 只有两种情况才把 0–6 步摊开逐条明问:① PM 自己纠结、或直接说"帮我判断";② 东西正从"能跑的 demo"滑向"有人依赖的产品"。 本 skill 默认加速,不是盘问。
- 杀谁? 这次要回答的那一个问题是什么?(逼出"证据"视角,而非"我要做个产品"。)
- 哪个阶段? 按三阶段表判定 Demo / POC / MVP。
- 最大风险在哪? 最可能死在哪——技术做不出?没人要?→ 这决定哪一层必须动真格。(险在技术 → POC 把技术做真;险在需求 → 别碰技术,用最假的 Demo 测人。)
- 纵切线怎么画? 选一条最能出证据的端到端细路径,只做这条。
- 作弊边界划在哪? 这条线上哪层真做、哪几层大胆假?逐层标出阶梯级别。
- 天花板 + 红线? 多少用户 / 数据量之前有效?哪条红线赶速度也不能破(见
references/failure-catalog.md)? - 交付说清三件事: ① 验证了什么 ② 假了什么 ③ 还剩什么真实风险没解。
三阶段及格线自检
- Demo(说服): 我清楚哪真哪演、不会自己被骗;关键那下的幻觉撑得过追问;没为一个注定被扔的 Demo 建库 / 写测试 / 做鉴权。
- POC(技术): 验的正是最难 / 最不确定那段、不是旁支;风险点真跑通了(真调模型 / 真跑算法);结论一句话说得清。
- MVP(真实用户): 关掉重开数据还在;A 看不到也改不了 B 的数据;密钥没写死在前端、异常输入不直接崩;没为"可扩展"提前优化并发 / 缓存。
深度支撑文档(references/)
mental-models.md—— 最小技术心智模型(餐厅隐喻:前端 = 展示层、后端 = 真相层、契约 = 接口),外加一张"你在哪里作弊"对照表。faking-ladder.md—— 作弊阶梯六级、每级成本(含 BaaS 修正)与天花板;纵切正反例。failure-catalog.md—— 十种最危险死法(症状 + 翻车 + 纪律);三阶段各自"赶速度也不能破"的红线。debate-synthesis.md—— 来历摘要:五模型辩论"严谨 vs 速度"后的三条裁决。
一句诚实的提醒(反身警告)
这些词是脚手架,不是你的工程实力。 说顺了"纵切""作弊阶梯""双向门",容易让你误以为自己懂技术了。这个 skill 给你的是知道该在哪一层怀疑、该问什么的判断力,换不来工程能力本身。最危险的用法,是拿这几个词去真工程师面前演——让对方觉得你懂,而不是真去核实、追问、认怂。这正是清单里的死法 1,只不过这次被表演的是你自己的工程素养。 词是拿来用的,不是拿来穿的。
压舱底
Demo 可以处处是假的,但一旦你开始收集真实用户的真实行为,"持久化"和"数据隔离"一秒都不能假——否则你辛苦拿到的每个信号,本身就是假的。
严谨度跟着阶段走,诚实度不跟阶段走。 作弊是聚焦的艺术,自欺是最贵的错误。