"任何新增都会稀释其余一切。" Anything added dilutes everything else.
它讲的是取舍,不是美德
"Responsive is better than fast" 只有做交互产品的团队说得出口。公司价值观页那种"客户至上 / 成长型思维"换成任何一家公司都成立,所以没人引用——可引用性来自具体性。
箴言体的功能是降低引用成本
设计原则写成长文档没人读,更无法在争论现场当武器。凝成一句短句后,才能被直接扔进 PR 评论:"这违反 anything added dilutes everything else。"
只给判断,不给论证——这是特性不是缺陷
箴言不解释自己。它假设你在实践里撞过墙,撞过的人一读就懂,没撞过的人读了也没用。代价是容易被当教条挥舞。
故意容许内部矛盾
Zen of Python 里 "Simple is better than complex" 和 "Practicality beats purity" 会打架;GitHub 这份里 "Approachable is better than simple" 和 "Anything added dilutes" 也会。不求形式自洽,求在具体情境里用得上。
Zen of X 与「某某定律」是两个物种
Zen of X:成组、项目内部人写、带审美判断、规范性。Law / Principle(Conway / Postel / Unix philosophy):多为单条、外部观察者提出、描述性。混着引用会出事。
Responsive is better than fast
有响应胜过快
这是两回事:fast 是总耗时短,responsive 是立刻给反馈。转圈的进度条并没让任务更快,但用户不会以为它死了。这条排在第一位,是因为它最容易被工程师误读成同义反复。
It's not fully shipped until it's fast
不够快就不算真正上线
反对"先上再优化性能"。性能不是后续迭代项,是"发布"这个词定义的一部分。和第 1 条不重复:第 1 条讲感知,这条讲实际耗时,而且把它划进了 Definition of Done。
Anything added dilutes everything else
任何新增都会稀释其余一切
全篇被引用最多的一条。锋利处不在"加东西有成本"——那是废话——而在加东西会让已经做好的东西变弱,因为用户注意力是零和的。新功能不是从零开始积累价值,是从存量里抽血。
Practicality beats purity
实用胜过纯粹
整句直接借自 Zen of Python(那边原文是 Although practicality beats purity)。架构漂亮但用户用不上,不算赢。这条是留给架构洁癖者的刹车。
Approachable is better than simple
让人敢上手胜过简单
simple 说的是结构少,approachable 说的是心理门槛低。一个功能极少但找不到入口的产品,是 simple 而不 approachable。这条隐含着对"极简主义"的一记回马枪:极简常常是设计师的自我满足。
Mind your words, they are important
措辞要讲究,它很重要
文案是产品的一部分,不是上线前找人润色的装饰层。按钮上那个词决定用户敢不敢点——"删除"和"移除"在用户脑子里是两种不可逆程度。
Speak like a human
说人话
别把系统内部术语端到用户面前。"Webhook 配置失败" 是说给自己听的,"我们没能通知到你的 Slack" 才是说给人听的。判据很简单:这句话你会对着同事的脸说出来吗。
Half measures are as bad as nothing at all
做一半等于没做
"as bad as" 是刻意的强等号,不是"不如"。半成品功能比不做更糟:它占了位置、要维护、还给了用户错误预期,而这三样都会在你想砍掉它的时候变成阻力。
Encourage flow
别打断心流
少弹窗、少二次确认、少强制跳转。每一个"你确定吗"都是设计者把自己的不确定转嫁给了用户。原文用的是 encourage(鼓励)而不是 protect,方向是主动铺路,不只是别添乱。
Non-blocking is better than blocking
不阻塞胜过阻塞
第 9 条的工程实现版。界面不该等后端:乐观更新、后台提交、失败再回滚,而不是转圈锁死整个页面。GitHub 自己最典型的实践是 issue 评论——你点完就出现了,请求还在飞。
Favor focus over features
宁要专注,不要功能
第 3 条的行动版。那条讲机制(为什么加会稀释),这条讲取舍(所以别加)。成对出现是有用的:争论现场先用第 3 条讲道理,再用这条下结论。
Avoid administrative distraction
别让人分心做管理杂事
权限、配置、审批、成员管理这类"元工作"要压到最小。用户是来干活的,不是来管理干活这件事的。这条对 B2B 产品尤其毒:企业版功能清单几乎全是 administrative distraction。
Design for failure
按会出错来设计
失败态是主流程的一部分,不是异常分支。网断了、请求挂了、数据脏了、第三方超时了——界面长什么样,要在画 happy path 的同一张稿子里想清楚,而不是留给工程师临场发挥。
Keep it logically awesome
让它在逻辑上依然漂亮
刻意含混的收尾,GitHub 式的俏皮。通常读作:别为了炫效果牺牲内在自洽——酷可以,但要讲得通。放在最后是有意的:前 13 条都是硬判断,这条给整份清单留了一个不把自己当法典的出口。
这 14 条不是 14 个独立观点。至少有三组是成对写的,拆开单读会觉得啰嗦,合起来读才看得见它在防哪种具体的错误。
把 The Zen of GitHub 放回它所属的谱系里看,才知道它继承了什么、又变异了什么。下面这张表的关键一列是"谁写的"——内部人写的和外部观察者总结的,是两种完全不同的文本,不该混着引用。
| 信条 | 年份 / 作者 | 条数 | 谁写的 | 约束什么 | 体裁 |
|---|---|---|---|---|---|
| Zen of Python | 1999 · Tim Peters | 19 | 语言核心圈内部人 | 语言与代码的审美 | 判断句,半开玩笑 |
| Zen of GitHub | ~2012 · Kyle Neath | 14 | 公司设计负责人 | 产品与交互决策 | 判断句,认真的 |
| Zen of Go | 2020 · Dave Cheney | 11 | 社区名人,非官方 | 工程实践细节 | 祈使句,近乎规范 |
| Rails Doctrine | 2016 · DHH | 9 | 框架创造者本人 | 框架的价值取向 | 宣言,每条一篇长文 |
| Unix philosophy | 1978 · Doug McIlroy | 4(常压缩为 3) | 系统作者事后总结 | 程序间的组合方式 | 描述性,近乎法则 |
体裁源头。GitHub 那份的 "Practicality beats purity" 是整句搬过来的。这里有两个细节值得注意:第 14 条 "unless you're Dutch" 是在开 Guido van Rossum 的玩笑(荷兰人),说明作者自己都没把它当法典;PEP 20 正文只有 19 条,而文档里说有 20 条——第 20 条留白,官方从未补上。Tim Peters 本人说这是半开玩笑写的。
最像"规范"的一份,也因此最不像禅。它明确讨论 goroutine、package、benchmark 这些具体机制,可执行性最强,但也最容易过期——语言一变,第 6 条第 4 条就要重写。相比之下 GitHub 那 14 条十几年不用改,代价是它不告诉你怎么做。抽象度和保质期是一对交换。
严格说这不是箴言体,是宣言体。每条背后都有一整篇长论述,读起来是"为什么我们这样选",而不是"你该这样做"。它是解释性的,Zen 是断言性的。第 3 条 omakase 和第 6 条 sharp knives 尤其能看出差别——这两句离开上下文根本无法引用,而 "Speak like a human" 可以裸着扔进任何一场争论。
McIlroy 原文四条:(i) Make each program do one thing well. To do a new job, build afresh rather than complicate old programs by adding new features. (ii) Expect the output of every program to become the input to another, as yet unknown, program. (iii) Design and build software, even operating systems, to be tried early, ideally within weeks. Don't hesitate to throw away the clumsy parts and rebuild them. (iv) Use tools in preference to unskilled help to lighten a programming task.
它跟前三份不是一个物种。Zen of X 是内部人写给自己人的规范性文本("应该这样");Unix philosophy 是事后对一个已经成功的系统做的描述性总结("它之所以成,是因为这样")。同族的还有 Conway's Law、Postel's Law、Rule of Least Power——都是单条、外部视角、可证伪。
把它们混着引用的典型翻车:拿 Postel's Law("接收时宽容")当设计准则,结果做出一个谁都猜不透行为的 API——而它原本只是对 TCP/IP 为什么能活下来的一句观察。
先说"zen"这个词在这里到底什么意思。不是禅宗教义,而是技术圈已成惯例的一个文体名 = "(某项目的)设计箴言集"。词源链是:梵语 dhyāna(禅那,静虑)→ 汉语「禅」→ 日语「禅」zen → 英语 Zen。英语拼作 zen 而不是 chan,正因为借的是日语读音——20 世纪经日本禅宗西传,铃木大拙的著作加上 1950-60 年代 beat generation 的推广。在英语里它的语义早已漂移成"极简、直觉、不靠繁复论证的风格",还形容词化了(be zen about sth = 对某事很淡然)。
三个文体特征。①短句、对仗、可背诵;②只给判断不给论证——要求读者在实践中自己撞到才理解;③故意容许内部矛盾。第三点最反直觉:Zen of Python 里 "Simple is better than complex" 和 "Practicality beats purity" 摆在一起会打架,GitHub 这份里 "Approachable is better than simple" 和 "Anything added dilutes everything else" 也会——你为了让新用户敢上手加的那个引导层,正是在稀释其余一切。这恰恰是禅宗式的:不求形式一致,求在具体情境里用得上。
为什么选箴言体而不是长文档。设计原则写成长文没人读,更要命的是无法在决策现场引用。凝成 14 条短句之后,它才能在 code review 和产品争论里被当作共同语言直接抛出来:"这违反 anything added dilutes everything else。"箴言体的功能是降低引用成本,不是显得高深。
代价也很明确。缺上下文,因而极易被当教条挥舞——用 "Half measures are as bad as nothing at all" 去否掉一个合理的 MVP,是这份清单最常见的滥用方式。Tim Peters 自己说 Zen of Python 是半开玩笑写的;GitHub 把第 14 条留成一句刻意含混的 "Keep it logically awesome",大概也是同一种自我提醒:别把自己写的东西当法典。