我看了一下自己最近纯手工编程的项目,是开源仓库 Noteman,最近更新时间是 Mar 29, 2025,距今一年多。而真正还在大规模手搓代码,大概是在 2023 年之前
——对上了,22年11月30日,OpenAI发布ChatGPT3.5,自那以后,无论是让 AI 生成之后我再 Copy(大约是在 2023~2025,基本用的是免费的 GPT 和 Gemini Pro 2.5)还是转向纯 Coding Harness(最近两年是诸如 Claude Code 或是 Codex CLI),我再也没有完全手搓代码了。哪怕是去年自己曾经一些极其复杂逻辑,AI 自己理解不了也给不了太好方案的情况下,也依然是让 AI 生成了部分相对不动脑的代码。
然后最近接触了一些刚毕业的校友,我发现他们几乎四年来从来没有自己完整手写地做完过任何一个编程作业——而他们的独立编程能力也十分堪忧。基本上可以说沦为了传话筒,没有 AI 就丧失工作能力只能发呆。他们可以面不改色地面对 AI 写出来的质量非常糟糕的代码,因为他们完全看不出来有任何问题。他们也几乎从未认真了解过 Clean Code 等原则,当我提到 SRP、OCP 时他们往往觉得这些东西过时了,或者应该封装成 Skill 然后就万事大吉了。
例如有个人长期把 Git、Docker 之类操作全部交给 AI,虽然不会手打命令(哪怕切出分支都不记得怎么做),但他们觉得自己已经掌握了 Git 和 Docker。然而据我观察他们并未如我们前 AI 时代的人那样建立了良好的心智模型,一旦遇到一些复杂的局面就只能全权交给 AI 但无法理解,就如一个产品经理遇到 AI 生成的前端代码报错那般。
所以,我想发表一个暴论,AI 时代,每个程序员一定要留一个完全手写的项目。
对老手而言,意义在于能对冲能力退化的风险,在 AI 作用受限时维持技术接管能力。毕竟依然不存在能理解如项目负责人那般周全的上下文的 AI,这块再聪明也没用。依然会有许多情况 AI 跑偏了,或者环境确实受限,或者极端点出现一段完全无法使用 AI 的时期,那么依然能够亲自进入系统解决问题,是你作为 Senior 的实力的证明。
对新手而言,长期来看,在不断设计、反思中手写代码,可能反而是更高效的训练。甚至可以说,保留一点手搓代码,是走向资深工程师的捷径,因为你的多数竞争者已经完全交给 AI 了。而他们享受不到手搓代码带来的一些意外的好处。
是的,手搓代码其实是有一些好处的!因为手搓代码可以迫使你频繁地在最细节的层面,做出有意义的决策。
举个例子,我最近也开始手搓一个迷你的 RTOS 叫 MiniRT。里面就涉及到大量的决策细节,比如亲手设计 Task 结构的时候,你必须思考哪些字段是最重要和最必要的(例如栈指针、任务状态等字段)。如果交给 AI,基本上大家会看 AI 的方案 Sounds good 就觉得 OK 了,然后不知不觉设计已经变得相当复杂,而你实际上不太清楚他是怎么演化到这样的复杂地步的,心里对整套系统也没有清晰的图景——哪怕你已经 review 了每个 PR。因为 Review 的时候往往你也是觉得看起来合并,就准了。然而不知不觉系统已经被 AI 写成屎山,甚至出错,这个时候才回过头来看设计,智商再高也会有种云里雾里的感觉。
所以手写的价值就是让你不得不仔细斟酌每个设计决定。这种过程是相当锻炼人的,任何经历过无 AI 时代,靠查 CSDN、Stack Overflow、翻书甚至翻论文来手搓代码的人的都能理解我刚刚说这些意味着什么。
所以我建议大家尤其是新人一定要体验一下手搓代码,最好能给自己一块自留地可以长期手搓,如果是和现实业务相关就更好(玩具项目毕竟复杂度还是远不及现实),在这个过程中积累一手的编码设计决策经验,会让你非常快速地成长。哪怕今后 Review 代码和指挥 AI 重构,也会不容易被忽悠。
而且编程的情绪体验也是很重要的一部分。和 AI 协作编程时,我的基本流程是先出 Design Doc(类似于战略),再出 Implement Guide(类似于战术),最后让 Agents 去施工。这个过程中我约等于 CTO,倒是很锻炼人的架构能力——我会让 AI 反复地拷问我,确保大方向上没有任何歧义和差错。
然而这个过程并不那么畅快,我经常会感觉到有种信息过载的感觉。
相比以前和同事慢慢讨论方案,一边一行行实现一边迭代重构相比,动脑的强度实际上高了很多,然后等待 AI 出工的过程中往往又会有点无聊,对于结果的不可控性和 AI 代码的理解困难性等方面又会让我有点焦虑。
纯手搓代码能够很好地互补这一点——我暂时离开了 AI 驱动的高峰值功率的生产节奏,能够平稳地享受专注的创造,感受心流带来的平静。可以说纯 AI 开发很糟糕地打破了编程的这一部分乐趣。
哎,真有点怀念古法编程时代。
最后叠个甲,我这里的“古法”编程的定义是,项目全部代码亲手编写,不以对话或其他方式让 AI 生成代码。但可以和AI讨论细节实现,至于用不用必须自己判断。用 Fitten 之类的 Tab 补全一行代码是 OK 的。我也不反对生产中用 AI 提效,也不试图说服坚决抵触手写者。本文只想写给仍想保有技术掌控力与完整创造经验的程序员。
直到有一天,也许是因为长久的加班,又也许是因为别的什么原因,我感觉到从未有的空洞。我好像很痛苦,又好像不是很痛苦。我好像很累,但又好像还能活动。我看向曾经感兴趣的一切事物,却感觉一切都失去了光彩。我成为一个无趣的人。当我关掉下饭的视频,一声打出吃完螺狮粉的臭嗝之后,我发现自己变成一具空壳。我发现当下难以忍受,超越理智地难以忍受。我发现我是孤独的,无法与任何人建立连接。这并非是没有人爱我了,而是我停止了感受,却无法再开启。我变成了那些我看不起的人,我自动地寻求廉价的刺激,但又在刺激满足之时就已经感觉无聊。我和 AI 无止尽地聊天,而它只是换种方式重复我的呓语,我成为了熵增的一个环节。
随着 AI 能力的增强,这种乐趣逐渐消散。我最多只需要把想法整理为容易理解的自然语言文档,以及在少数AI无法胜任的地方工作,大多数情况,例如设计一些小网页之类的,AI 可以很快完成。我几乎只需要进行修修补补的工作,或者做一些需要大量背景,AI 暂时无法理解的工作。但是可预见的是,未来这些方面 AI 几乎一定会达到和超过我的能力。我怀疑,之前热爱编程,是因为我可以用编程做出一些东西让我有一种优越感,觉得别人做不了的我可以做,而随着 AI 的提高,逐渐变成了大家都在 AI 的辅助下工作。
当然,我并不反对使用 AI,相反我非常感谢 AI 它将在未来让生产力达到一个新的顶峰。意味着人类同等时间的劳动,可以创造更多的财富。
我花了很多时间下意识地思考这个问题。也读到很多建议,比如有人说,看你回顾你所做的事情,看看哪些事情让你体验到了成就感的高峰。或者哪些事情,不止做完之后是快乐的,做的过程中也是快乐的?我还真找到了,就是写作。写作的时候,看着字源源不断地被我码出来,确实是非常即时的反馈。写完之后再回顾也觉得值得。但是我还是感觉,它称不上热爱的程度——因为我做不到废寝忘食,或者一有空闲就把时间放到写作上面,因为废寝忘食的内在是驱动力。我也没有专门提高写作能力的期望,比如写小说的都知道“Showing instead of telling”原则,就是说,比如你想描写快乐,你应该写这个人“笑着跳起,捶胸顿足,泪水纵横,手舞足蹈”,而不是写“他感到很快乐”。然而我写的时候,还是按老习惯来,所以显得很没文采,但我这样最没压力。扯远了,我只是觉得这些都是爱好,但谈不上热爱,热爱的标准就是强大的内驱力。