打开你的 GitHub。来,数一数:有 README 的仓库、写着 initial commit 的整洁提交、也许还有第二个叫 wip 的提交,接着……什么也没有。没有第三次提交。没有一个不是你的用户。没有一个素未谋面的人提过 issue。
我等你。
我自己数出来是九个。九块小墓碑:一个短链接服务,一个习惯追踪器;因为不喜欢第一个的样子,又做了两个不同的笔记应用;还有一个“面向 X 的 Twitter”——那是在一个我本该睡觉的星期里做的。每个项目都从某个周六开始,带着一种明确而强烈的兴奋:这次就是它了。又都死在某个周三:真正难的部分终于出现。
这片坟场是我亲手建的。大多数人也是。而我想在“公开构建、每周末发布、作品集就是你的简历”这套布道刚开始时,说一句没人愿意说的话:
没人关心你的业余项目。一个人也没有。至于为什么,那套算术比你想的还难看。
先别急着走。这不是一篇末日帖。仍然有且只有一种业余项目,值得你投入每一个小时;而正是这套算术,会告诉你该选哪一种。
第一次提交前,我们会对自己说的三个谎言
你不会毫无理由地做一个业余项目。你做它,是因为相信以下三件事之一:
- 它能让我学到东西。(“我终于要学 Rust / Kubernetes / 那个框架了。”)
- 它能帮我找到工作。(“招聘者看到这个,就会知道我是认真的。”)
- 它能替我赚钱。(“也许这次能做成一门生意。”)
这三种动机都是真的。但它们通常的实践方式,从算术上注定要失败。我们逐个说,因为这种失败很有启发性——它会直接指向唯一能活下来的那个版本。
先说谎言二,因为它是承重墙:根本没人读你的代码
先拆掉大家最愿意相信的那一个。
招聘者在招聘史上从没有克隆过你的仓库。他们不会读你的代码。他们不会在半夜跑一遍 git log,看着你整洁的提交记录想:啊,一个匠人。 简历眼动研究显示,第一次浏览平均只持续六七秒;而你的 GitHub 链接即使被点开,也只是看个人主页、绿色方格,再往下滚一下。就这些。
真正刺痛人的部分,而且是新的部分,在这里:从 AI 能在一个下午搭出精致、已部署、外观不错的业余项目那天起,“我做过一个业余项目”的信号价值就降到了零。 不是变低,是零。因为作品集原本要证明的东西——“这个人能把想法做成运行中的应用”——现在一个有干劲的青少年午饭时对着聊天窗口就能做到。你无法用刚刚变得免费、人人可得的东西,来传递稀缺性。
所以简历的算术是:N 个精致仓库 ×(如今谁都能免费生成的信号)= 0。多加仓库,只是在乘零。结果还是零。你无法靠数量挽回一个已经坍塌的价值。
谎言三:用户的算术更残酷
“可它也许能成为一门生意。”
好。数数你的用户。不是注册数——而是在第七天回来、又做了一次那件事的人数。十个业余项目里,有九个的精确答案是:一个。你自己。
10 个业余项目 × 每个 0 个真实用户 = 0。 AI 时代设下的陷阱在这里:它让构建变得免费,却没有对这个零做任何事。产品最难的部分从来不是写代码,而是让一个陌生人关心、回来,并在它坏掉时让你难受。AI 把容易的 20%——敲代码——压缩到近乎不存在;留下不可能的 80%——分发、留存、信任——依旧和过去一样不可能。于是现代坟场比以往填得更快:造墓碑变便宜了,埋它仍要付出唯一无法生成的东西——另一个人的注意力。
谎言一里,唯一藏着幸存者
“好吧,但至少我学到了东西。”
真的学到了吗?诚实一点,究竟学到了什么。
如果你顺着教程的形状走,把早已做过的认证和 CRUD 再接一遍,部署、截图,然后继续下一个——你产出的是产物:一个存在的东西。而产物,如今也是免费的。你学到了语法、参数顺序、咒语。那是记忆;而记忆是最先被 AI 吃掉的部分,没有它你反而会过得更好。
“我学到了东西”里还藏着完全不同的另一件事,但它只会在一个明确条件下出现:
业余项目会产生产出。只有当一个真实用户能够伤到你时,业余项目才会产生判断力。产出已经免费。判断力才是全部的游戏。
你不会因构建而获得判断力。你得把东西交付给一个可能流失、抱怨、退款,并在凌晨两点提一个愤怒 bug 的人——然后承受后果。那才是锻炉。此前的一切,只是一篇写了你名字的教程。
唯一值得那九块墓碑的项目
我有一个仓库不在坟场里。有一个我真正交付出去、被陌生付费用户实际使用的东西。
它教会我的事,任何教程都教不了,因为它害得一个真人过了个糟糕的夜晚。我有一条写入路径,请求尚未真的把那一行数据持久化,就先确认了成功。 演示里、测试里、我的机器上——完美无缺。后来某一天,一次重试恰好在错误时刻发生:确认已经发出,保存却没有落地;一个付费客户被锁在自己的账户外,而系统里甚至没有他做过那件事的记录。 先确认、后持久化(ack-before-persist)。我至今都能感到那一下。
没有课程教过我这个。再搭第十个业余项目也不会教。那是我以缓慢、昂贵、难堪的方式换来的,因为玻璃另一边有一个真实的人,会被我的错误伤到;而他确实被伤到了。这一道伤疤,胜过另外九个仓库加起来;它也是 GitHub 上唯一值得撑起整场面试的一行。
这才是“每个周末发布”海报不会写的算术:九个零用户项目,让我学到九次“什么也没有”。一个拥有一个真实用户的项目,教会了我如今围绕整个职业生涯构建的东西。
请弄清楚我真正想说的:不是“别做东西”
我不是那个劝你停止创造的人。我一直在做东西。我整天让 AI 生成产出——它写了我大部分代码,我绝不会回到从前。构建本身很快乐;只为了这份快乐去做,也完全不需要辩护。
我想说得更窄一点,也更让人松一口气:
别再把做业余项目当成一种策略。它们从来不是稀缺品;AI 让它们变免费那天起,“我做过十个”就不再对任何人有意义,除了你自己。 剩下的策略,是那个乏味、可怕、没人愿意截图的策略:
- 做一件东西。
- 把它放到一个能伤到你的真实陌生人面前——一个会流失、抱怨,或者要求退款的人。
- 让它活下去。 在凌晨两点维护它。亲自感受一次先确认、后持久化。
一件已经交付、持续维护、且有真人依赖的东西,能教会你——顺带也能展示给面试官——比一百个充满绿色方格的周末更多的东西。不是因为它更令人印象深刻,而是因为只有在那里,判断力才真正被铸造出来。
这也是我采用这套构建方式的原因
再往上一层,还是同一套算术。
我在做一个 agent 平台。此刻整个行业的诱惑,是赞美那个作者——那个负责生成的东西。看它发布得多快!一个下午十个业余项目!但一个能无限产出的作者,产出的只是无限多未经祝福的 diff。GitHub 坟场正是这种东西:一堆生成出来、从未被判断、从未被交付到足以伤人的现实里的东西。数量从来不是重点。数量现在免费了。
所以我绝不让写代码的东西,成为批准代码的东西。一个作者生成 diff;另一个独立的怀疑者,唯一职责是尝试弄坏它,而不是欣赏它;而合并按钮前还有一个人,他能看见模型看不到的爆炸半径。这种分工——作者、怀疑者、人类——正是 xenition 的全部形状,也是坟场给出的同一堂课:生成一个东西是免费的,而且永远会免费;判断它能不能在真实用户面前活下来,才是全部工作。 产出很便宜。判断才是产品。
你的 GitHub 坟场不是你懒惰的证据。它说明你一直在为那个免费的东西优化。停下来。做一件能伤到你的东西,然后坚持下去。
**给评论区一个诚实的问题:*你的 GitHub 里现在有多少块墓碑?而哪一个*你真正交付给陌生人的项目,教会了你其他项目都没教会的东西?我想听听那个活下来的项目。👇
(如果这篇文章让你少一点内疚地关掉了几个死掉的标签页,点个 ❤️ 和 🔖 会帮它抵达下一个在周六盯着自己坟场的人。)