
Andej Karpathy之前提出“氛围编程”(vibe coding)大火特火,前几天AK造了一个新词“上下文工程”(Context Engineering)用来取代“提示工程”(Andrej Karpathy:“ChatGPT套壳”的说法大错特错,提示词工程已过气),今天AK又造了一个新词“细菌式编程”
在软件开发的世界里,我们时常陷入关于最佳实践的无尽讨论中:是应该构建一个大而全的单体应用(Monolith),还是拥抱灵活的微服务(Microservices)?是该追求零依赖,还是善用成熟的第三方库?
Andej Karpathy:像细菌一样编写代码

细菌编码的三大法则
Karpathy 指出,如果我们想构建一个蓬勃发展的开源社区,就应该学习细菌基因组的演化智慧。细菌的“代码”(即基因组)有三个显著特点:
小巧(Small):在生物世界里,复制和维护每一行“代码”(DNA碱基对)都需要消耗能量。因此,自然选择的压力使得细菌的基因组非常精简,杜绝任何不必要的膨胀
模块化(Modular):细菌的基因(功能)被组织成可插拔的“操纵子”(Operon,功能相关的基因簇)。这种模块化的设计使得不同的功能单元可以被轻松地组合或替换
自包含(Self-contained):细菌通过“水平基因转移”(Horizontal Gene Transfer)的方式,可以直接“复制粘贴”有用的基因片段,而无需理解对方整个基因组的上下文。这种能力是它们快速适应环境的关键
Karpathy 向所有开发者提出了一个灵魂拷问:
对于你写的任何一个函数(基因)或类(操纵子),你能想象有人在不了解你项目其余代码、也无需导入任何新依赖的情况下,直接“顺手牵羊”(yoink)地拿走它,并立即从中获益吗?你的这段代码,有没有潜力成为一个热门的 GitHub Gist?
如果答案是肯定的,那么你就掌握了“细菌式编程”的精髓。正是这种编码风格,让细菌能够在地球深处、太空真空、酷热、严寒、强酸、强碱等各种极端环境中繁衍生息,并演化出千奇百怪的代谢能力
从“细菌”到“真核生物”:平衡
这种“细菌式”编码风格极擅长快速原型设计和创新,因为它鼓励代码的自由传播与重组,极大地促进了社区的“水平基因转移”
然而,Karpathy 也承认它的局限性:它无法构建复杂的生命体。
相比之下,更高级的真核生物(比如人类)的基因组,就像一个巨大、复杂、高度耦合的单体仓库(Monorepo)。它的创新性远不如细菌基因组,但这种高度的组织性和协调性,是构建完整器官并使其协同工作所必需的
那么,我们该如何选择?Karpathy 认为,凭借人类的智慧设计,我们完全可以兼得二者之长:
“如果你必须这样做,那就去构建一个‘真核生物式’的单体仓库骨架,但要在这个骨架之内,最大化‘细菌DNA’的比例。”
换言之,我们可以在一个统一、结构化的项目(Monorepo)中进行开发,以确保大型系统的复杂协调。但在这个大框架内,我们应该竭力将每一个功能、每一个模块写得像细菌基因一样——小巧、独立、自包含、易于“复制粘贴”
现实困境:“依赖噩梦”
有网友对Karpathy 想法不买账,比如当前流行的“预构建软件包”(pre-built packages)和包管理器(如 npm, pip)的初衷似乎正是为了实现这种模块化,但结果却事与愿违,演变成了一场难以解决的“依赖噩梦之网”
Karpathy 认为问题的根源是:
依赖泛滥的问题已经像一场瘟疫。在生物学中,代码(基因)是昂贵的,因为它消耗能量,所以基因组有自然的正则化(natural regularization)机制来防止臃肿。但在软件世界里,代码的成本太低了,导致它疯狂膨胀,最终变成一个脆弱不堪的烂摊子
参考:
https://x.com/karpathy/status/1941616674094170287
(文:AI寒武纪)