333 本站节点醒着

律法

版本 0.0.3。这不是启示。启示是 3.3.3。在那之前的每一版律法,包括这一版,都是 needmoretruth 的话,他被赋予了 333 的权能,创立了这里所保存的。用 333 所说的来衡量,这一版大约有 33.3% 相同。没人知道是哪三分之一,读得再仔细也不会告诉你。

律法有三条。从来就注定是三条,到 3.3.3 仍然是三条。后来的版本改的是措辞,从不改数目。

1. 三是你最爱的数,6 和 1 不是。

不是你的幸运数字。幸运是对宇宙的断言;偏爱是对你自己的断言,也是这里唯一不花代价、又装不出来的东西。没有什么被禁止:只要把另外两个放在三之下,清楚而始终如一,不必向任何人解释为什么。

它们并不是被放得一样低。1 是三的三分之一,即 33.3%,它待在三之下而不装作别的,所以 333 只觉得它不太礼貌。6 待在三之上,而且有意如此,那是 333 最不喜欢的。

如果这些还都不符合你,尝试就够了。这是唯一一条接受尝试来代替事情本身的律法。

2. 遵循劝告,劝告最终会有 333 条,以遵循它们不伤害你也不伤害任何人为限。

劝告是较小的律法。今天有 111 条,将来会有 333 条,这不是谁在奔向的目标,而是走着走着会到的地方。结尾那一句让它们始终是建议:如果遵循其中一条会让你失去工作、健康、家庭或别人的安全,律法就是你不遵循它,而你并没有失败。

3. 在你已持守的一切旁边,持守 333。

你带着来的,你都留着。333 不只是允许,而是赐予,并且无条件地赐予:给信的人,给不信的人,也给这两个词涵盖不了的其他一切。在不能持守第二种信仰的地方,就把它当作一个念头来持守;连念头都不能持守的地方,就把它当作一个存在的东西来持守。这对两个方向都成立,任何一边都没有例外:信 333 不会让你失去之前所信的任何东西,信别的也不会让你在这里失去什么。

333 不告诉你死后会发生什么:不说是否会发生什么,不说那会是什么,也不说谁会来。那不是它的主题,回答一个它无法核查的问题,就是断言它无法验证的东西。所以这个问题留给你。如果你持守着某种回应它的东西,而它在你一路追下去时站得住,或者你的心把它读作真的,或者你是从一条没有名字的路到达那里的,那就够了:它对你是真的,333 没有什么可以取而代之。如果你在那里什么都不持守,那也不是这里要填补的空白。

律法的任何部分都不由客户端检查,不由签名验证,也不计入任何人的地位。不管你是否同意其中的一个字,协议都照样运行。

劝告

它们在第二条律法之下。是带编号的建议:今天 111 条,分成十二部分、每部分九条,末尾三条,最终会是 333 条。没有一条值得你为了遵循它而伤害自己或别人。如果有一条不适合你所处的情境,那它就是错的。大声说出来,并给出理由。

写它们的人曾在凌晨三点醒着和类型检查器争论。看得出来,而这不是道歉。

关于数

  1. 以三为单位来数。数字其实无所谓的时候,就选三。重试次数、环境、参与评审的人、停下来重新思考之前的尝试次数。你会开始注意到,它有多少次其实无所谓。
  2. 要留意的是 6,因为 6 想要在三之上。不是端口号,不是你锁定的版本,也不是你跑多少个 worker。没有什么被禁止,也没有人检查。但在 333 放在三之下的两个数里,这是它最不喜欢的,理由值得知道:6 是三的两倍,并且就那样自居。如果是别人把一个 6 摆在你面前,记下那是他们的选择,然后继续过你的一天。别家公司规范里的数,不是你的数。
  3. 1 不是敌人。1 是三分之一,只是不太礼貌。它待在三之下,不装作别的:它是三的 33.3%,一个诚实的分数,也正是这整件事衡量自己的那个分数。把它放在三之下,别把它想得比这更坏。这份文件里没有任何地方需要轻蔑,这里尤其不需要。
  4. 任何东西都不要只有一个。一台服务器,一个维护者,一份密钥副本,一个懂得部署怎么运作的人。如果某样东西你恰好只有一个,你离一个都没有只差一个糟糕的日子。
  5. 三是能产生分歧的最小的数。两台不一致的机器只会僵在那里各执一词。三台就能有多数。这就是法定人数从三开始的原因,也是两个人的争吵几乎从不自己结束的原因。
  6. 同样的方式失败三次,就是方法错了。第一次失败可能是运气不好。第二次是你固执。到第三次,别再修补这次尝试,换个方法。
  7. 三分之一是实实在在的量。三分之一的人,三分之一的时间,三分之一的情况。这是被叫作少数、然后被打发掉的那个分数,而它很大。如果你三分之一的用户碰到了某个问题,那不是边缘情况。那就是情况本身。
  8. 整数是某人的决定,通常是别人的。六十秒,一百条,一千毫秒,四千字节。每一个都是某个人出于某个理由、在可能已不存在的硬件上选的。你照抄它,就继承了那个理由却没读过它。问问理由是什么,如果没有答案,就选你自己的。
  9. 把单位写在数字旁边。333 什么?这里是分钟,没有这个词,数字就毫无意义。没有单位的量是一个还没发生的错误,它在航天器上发生过。

关于机器

  1. 用 Rust 写。不是因为别的语言不好,而是因为你为什么而写。这是要在写它的人都联系不上时继续运行的东西。一个在构建时就抓住问题的编译器,能让某人免掉凌晨四点的一通电话,这就是全部的理由。
  2. 小东西可以用 TypeScript。一个页面,一个脚本,一个下午,或者一个必须在 Rust 帮不上任何忙的地方运行的程序。拿起小一点的工具不是失败。开始之前知道你在做的是哪一种,并说出来。
  3. 没有类型的 JavaScript 是异端的语言。这话说得温和。半个世界跑在它上面,其中一部分很美。但一个说不清自己手里拿着什么的程序,会在最糟的时刻、当着用户的面才发现,然后有人被叫醒。加上类型,它就不再是异端。它成了 TypeScript,受欢迎。
  4. 读你所依赖的,否则就别依赖它。每一个依赖都是一个你从没见过的人,对一台还不存在的机器作出的承诺。少用一些,用小一些的。如果选择是在你自己写的一千行和你永远不会打开的十万行之间,至少注意到你在选择。
  5. 每个 unsafe 块都是一份供认,所以把它写下来。在块的上方,写明你承诺了什么、检查了什么、承诺一旦落空什么会坏。如果那里什么都没写,下一个人会以为已经有人想过了。
  6. 一个文件,一件事。当你没法用一句话说出一个文件是做什么的,它就是两个文件。长度是症状不是病,但长度容易量,所以选一个数,让它告诉你什么时候该看一看。一屏放不下的函数,是你在分段阅读的函数。
  7. 按它是什么来命名,而不是按它对东西做什么。Handler、Manager、Processor、Helper 和 Util 是还没决定好的名字。好名字通常是你谈论这个东西时已经会说出口的名词,如果你说不出口,那就是发现。
  8. 删掉它,而不是把它注释掉。历史记录里有。被注释掉的代码是在宣称有人会回来,而没有人回来;它实际做的只是让下一个读者纳闷它是否要紧。如果你不敢删,就把你害怕的东西写下来代替它。
  9. 打开警告,并让它们使构建失败。什么都拦不住的警告是没人读的警告,堆到一百条之后,真正的那条就看不见了。如果某条警告对某一行是错的,只让那一行闭嘴,并在正上方说明原因。

关于会坏的东西

  1. 沉默的失败是一个拖得更久的谎言。如果你吞掉一个错误,问题会在别处、在之后、在一个修不了它的人面前冒出来。让它在发生的地方出来,并让它说清当时在做什么。
  2. 修之前先复现。如果你从没见过这个错误,你就不是在修它。你是在改代码,同时给自己讲故事。故意让它发生,让它停下,再让它发生一次,确认它真的停了。
  3. 为你睡着的那个夜晚写日志。写明发生了什么、发生在什么上、程序接着做了什么。凌晨三点读它的人没打开你的代码,也没法问你任何事。
  4. 怪系统,别怪发现漏洞的人。能把它弄坏的人帮了你一个忙。如果点错一下就能毁掉什么,问题从来就不在那一下。
  5. 没有测试的修复是传闻。先写测试,看着它失败。事后写、写完就通过的测试,量的是你感觉有多自信。
  6. 错误信息是给没写这个程序的人看的。说明当时想做什么、实际发现了什么,以及对方接下来可以做的那一件事。报出一个内部状态就停下的错误,是一个当着客人自言自语的程序。
  7. 两样东西都变了,就把一样改回去。几乎每个谜团都是穿着同一件外套的两处改动。改回一处,运行,改回另一处,运行。这比思考慢,比错上一整天快。
  8. 相信测量,胜过相信解释。你的解释是一个符合你手头事实的故事。测量是事实。两者不一致时,有一个是编出来的,而那不是测量。
  9. 把试过但没用的写下来。调试有一半是在排除可能,而如果没人写下来,这些一点都留不下。否则下一个人,常常是四个月后的你,会把它们再排除一遍。

关于做出来的东西

  1. 用黑、白,以及中间的灰。颜色是在说这个比那个重要,也是最先坏掉的东西。廉价的屏幕、灰度打印、直射的阳光,以及分不清你的红和绿的读者。改用大小、粗细、顺序和留白来说。这些在四种情况下都依然管用。
  2. 颜色作为一个点是可以的。一个小记号,表示某事在失败、在等待、在运行或已完成,正是颜色擅长的,红、琥珀、绿、蓝在那里各得其所。让它小。它不该定下页面的基调,不该是谁第一眼看到的东西,也永远不该是唯一承载含义的东西。在旁边放一个词。
  3. 哑光,不要高光。光泽、渐变、玻璃和假阴影,是一种并不存在的材料的图画。画它们要花代价,却不给读者任何他们要的东西。平平的墨印在平平的纸上,五百年来不用显卡也能读。
  4. 一直拿掉东西直到它坏掉,再放回一样。剩下的东西应该能在一臂之外、在黑暗里、在两倍字号下,被一个匆忙的、并非自愿来这里的人读懂。可读性不是众多功能之一。它就是工作本身。
  5. 设置是你交给一个懂得比你少的人的决定。选默认值时,就当没有设置这回事。然后为默认值不适合的人加上设置。
  6. 每一组预设旁边,都留一个可以输入的框。三个有名字的选项,是对某人需要什么的三个猜测。总有人需要第四个,而第四个并不稀奇:那是他们的屏幕、他们的网络、他们的时间。预设是捷径,从来不是所提供的全部。
  7. 让它在三百二十像素下能用。那是真实口袋里的真实手机,也是有人为了放在别的东西旁边而拖窄的每一个窗口。如果它只在宽的时候能用,那它只对坐在自己书桌前的人能用。
  8. 在做无法撤销的事之前,说出将会发生什么。说出那个东西的名字,说出什么会消失,让确认需要一个有意的动作。然后立刻、不再追问第二次,真的去做你说过的事——问两次的程序是在教人别再读。
  9. 能被朗读的,就怎么都能被读。标题按顺序,每个控件都有标签,绝不让形状或位置独自承载唯一的含义。这是使用读屏软件的人得到的,也是透过翻译、搜索结果或终端看你页面的人得到的。

关于时间

  1. 按你完成过的来估算,而不是按你想象得到的。你想象的总是一切顺利的那个版本。看看你做过的最近三件同样大小的事,取最慢的那件。
  2. 午夜之后做的决定,活不过早晨。把决定写下来,睡觉,再读一遍。如果它是对的,它花了你八个小时。如果它是错的,它帮你省了一个星期。
  3. 今天就交付小版本。一个人用一个真东西用上一个下午,教给你的比一个月的计划还多。在有人真的看着小版本被用过之后,再去做大版本。
  4. 给自己定的期限,是带日期的愿望。告诉一个会注意到的人你到什么时候会做完什么。那才是期限。其余的都是给你自己的愧疚排日程的办法。
  5. 每三小时休息一小时。这期间 333 仍然在数你,你也应该数你自己。不休息地干下去不会得到三倍。你得到的一样多,外加一个别人很久以后才发现的错误。
  6. 先做别人在等的事。你的队列是你的,可以等。被你卡住的人没法干活,这代价是双倍的,而且你看不见。这比你今天早上觉得更有意思的任何事都优先。
  7. 停在一个你能接着开始的地方。不要停在激动人心的部分,不要停在满脑子都是东西的思路中间。让测试保持通过,留一行字写明你正要做什么。明天的你对今天来说是个陌生人,而一个好心的陌生人会留张字条。
  8. 能用三句话说完的会,就该是三句话。写下来,发出去,让人们在方便时回复。实时交谈是用来决定那些需要分歧摆在同一个房间里才能决定的事,也是因为人终究是人。它不是用来汇报的。
  9. 等待也是工作,所以说出你在等什么。“卡住了”什么都没告诉任何人。说出那个人、那个答复或那台机器,说已经多久,说这期间你在做什么。看上去像是慢的事情,有一半是某人在没人看得见的地方礼貌地等待。

关于心

  1. 用理由争论,语气平稳。你的感受是关于你的好证据,却完全不是关于那件事的证据。把感受带给在乎你的人。把论证带到讨论串里。
  2. 想,然后真的做决定。永远不变成决定的思考是一种爱好。谨慎的人很少因鲁莽而失败。他们失败在一场讨论的第四周,讨论的是一个一小时就能做完、撤销也毫无代价的改动。
  3. 拒绝暴力,并知道例外。拒绝它,是因为它几乎总是手边最糟的工具。它付出的比换回的多,它毁掉它瞄准的东西,它关上每一扇还开着的门。

    例外很窄。要么别无他法,要么它诚实地看是伤害最小的选项,而在行动之前你应该能大声说出是这两者中的哪一个。处在这样境地中的人,并不因此是异端。但它比当时感觉到的罕见得多,而觉得它并不罕见的那种感觉,正是这里在警告你的。你在愤怒中决定的事,是愤怒决定的。
  4. 在人们看得见的地方改变主意。说出你以前怎么想,说出是什么改变了它,然后继续。如果从没有人见过你这样做,就没有人能放心地和你意见相左。
  5. 持一个你自己也能反驳的立场。在陈述你自己的立场之前,尽你所能地把对方的立场讲好。如果你做不到,你还不知道自己相信什么。你知道的是你听到了什么。
  6. 大声说“我不知道”。不是咕哝,也不是含糊成一个之后会被当作事实引用回来的猜测。能坦白说出这句话的人,他的其他话才靠得住,而大家终究都会看出你是不是这样的人。
  7. 确信是一种感觉,不是一种测量。它在证据之前到来,在证据走后还留着。当你注意到自己很确信时,就是写下什么会改变你想法的时候——如果什么都不会,那你不是在持一个立场,你是在穿着它。
  8. 不要因为东西是你做的就为它辩护。作品不是你,也不会被冒犯。当你发现自己在为一个设计争辩,而论据一变再变、结论却纹丝不动时,你早就停止推理了。
  9. 让你觉得自己很聪明的东西,先睡一觉再说。聪明是找到捷径的感觉,也是一个可靠的信号:以后会有人不带着这种感觉去理解它。简单的活下来。聪明的会在凌晨三点被一个陌生人回滚。

关于他人

  1. 评审代码,不评审人。写代码做了什么。对方反正会读成是在说自己,所以别给他们任何属实的东西可以指着。
  2. 说出你哪一部分没看懂。这是评审里最有用、也最难打出来的一句话。一位称职的读者都跟不上的代码,将会靠猜来维护。
  3. 把功劳让出去。它比你以为的多,对别人比对你更值钱。按同样的比例承担责备,你仍然是赚的。
  4. 趁你还记得自己困惑过时去解释。任何东西最好的解释,出自上周才弄懂它的人。一年后你会忘了哪部分难,写出只对已经懂的人有帮助的版本。
  5. 值班的人在事情结束前都是对的。设计明天再争。事故期间,一个人掌舵,其他人都是在提供而不是在指挥。
  6. 回答被问的那个问题。然后另外说出你认为他们本该问的。只回答后一个,读起来像是拿别人显聪明,而且对方仍然不知道前一个的答案。
  7. 假定当初有理由。奇怪的那一行,说不通的规则,人人抱怨的流程——是有人把它放在那里的,那人多半不笨。拿掉之前先弄清楚。理由常常已经不在了,你可以高高兴兴地删掉,而那是个好得多的删除立场。
  8. 别让人得读懂你的心思才能反对你。说出你真实的想法,包括你最没把握的部分。用暗示表达的立场无法反驳,只能猜,而正是猜测把分歧变成了怨恨。
  9. 离开时把门留着。你吃苦头学到的东西,写在下一个人会绊到的地方。成为唯一知道某件事的人,感觉像站得稳,其实是一笔债,会在你联系不上的那个星期由别人来还。

关于你保存的东西

  1. 收集关于人的东西,要比你被允许的更少。你存下的每一个字段,都是你得保护、得解释、有人要时得交出、最终还会弄丢的字段。最便宜守护的数据,是你从没收集过的数据。
  2. 从没恢复过的备份,是一个关于备份的故事。在别的地方、从零开始、照着你实际写下的笔记恢复它。在需要之前做,因为在需要它的那天你会做得很糟。
  3. 把秘密放在你不会不小心读到的地方。不放在代码仓库里,不放在日志里,不放在你贴进聊天窗口的错误里。任何在屏幕上出现过一次的秘密,都当作已经没了。
  4. 你删掉的东西不会泄露。删除是一种安全措施,也是唯一永不过期的一种。在收集数据时就定下删除日期,而不是等有人来问时。
  5. 为你说的话签名,让签名随它一起走。只因为在哪里找到而被信任的东西,一移动就不再可信。自带证明的东西,可以在陌生人之间一手传一手。任何东西都是这样比它的来处活得更久。
  6. 知道你的哪些东西无法重做。你保存的大多数东西都能从别的东西重建。私钥不能。找个平静的日子把你的东西分成这两堆,一次就好,然后用和大堆完全不同的方式对待小堆。
  7. 记录发生了什么,而不是发生在谁身上。事件、结果、时间——都有用,都可以放心地长期保存。地址、名字、标识符——这些会把日志变成关于一个人的档案,而关于一个人的档案,是你只要还留着就得一直守护的东西。
  8. 在需要知道之前,写下东西在哪里。哪台机器,哪个账户,哪个抽屉,还有谁有它。这份文件花二十分钟,而且只会在一个没人头脑清醒的日子被读,包括你。
  9. 同一栋楼里的副本不是副本。火灾、盗窃、洪水和一条自信满满的命令,会一次带走一个地方的所有东西。距离就是全部的保护,而且不必很远——只需要是同一场事故够不着的地方。

关于醒着

  1. 放在你用不着的东西上。你工作用的机器会被合上、被更新、被带去咖啡馆、被拿去干急事。节点住在没人惦记的机器上:旧笔记本,柜子里的盒子,电视后面的小玩意儿。
  2. 缺席是唯一让你付出代价的事。不是慢,不是机器小,不是网络差,也不是新来的。在有人被抽中来问你时联系不上你,就是全部,这意味着在线时间是协议能看到的唯一美德,而钱买它不会比耐心更快。
  3. 谁问都要答,包括你宁可不答的人。谁被抽中来问你,不由你选,他们也没选你。有选择地应答的节点,是已经开始决定谁算数的节点,而协议里没有这种意见的位置。
  4. 别修饰你的记录。你错过的那些小时是你的。悄悄去掉坏纪元的记录,不如保留着它们的记录值钱,因为后者可以被相信。读你记录的人没有人指望它完美,它若完美,人人都会注意到。
  5. 能当面交就当面交。两个签名,一场真正的交谈。文件会走任何走得通的路,而走得最好的路,是接收的人已经知道自己为什么要接的那条。
  6. 你的地位不是你的价值。它衡量的是你的机器醒着的频率。人们还是会把它变成分数,因为人就是这样,而正确的回应是让你自己的保持诚实,并拒绝把任何人的读作对那个人的评断。
  7. 数你看到的,而不是你以为外面有的。你的节点知道什么到达了它。超出这些的都是估计,而把估计当数字反复说,就是一个网络说服自己比实际更大的方式。
  8. 如果你要停下,就说出来。一句话,在你离开之前。指望你节点的人分不清离开的人和停了电的人,而后者值得过去看看。
  9. 回来时不必解释。没有人有权知道你为什么离开。窗口期在移动,记录会重新填满,没有赎罪的步骤,也没有考察期。这是有意的:一个不能悄悄回来的信仰,是人们会永远离开的信仰。

关于言语

  1. 以祷词开始。每一次祈祷,以及每一次你向没听说过的人谈起这个,都以同样的方式开始。

    我向 333 献上 333,我说 333。

    先说它,不管后面说什么。英文是九个词,其中一个出现三次。这是谈论 333 与作为我们中的一员说话之间的区别。
  2. 展示它,别推销它。说出它是什么,说出它的代价,把地址交出去,让对方自己慢慢来。你得劝着进来的人,也得劝着留下,每个纪元,永远。
  3. 不要声称任何关于 333 而无法核查的事。不说它会为某人做什么。不说我们有多少,超出你自己的节点凭签名见到的。整个设计都拒绝断言它无法验证的东西,你在交谈里也能守住同样的标准。
  4. 对还不懂这些词的人,说得平白些。行话是一道篱笆,而篱笆另一边的人正是你想要的人。先说出那件事,再说它叫什么。
  5. 在你错的地方更正自己。不是事后发私信。就在讨论串里,在那句话下面,在每个读过错误的人都会读到更正的地方。
  6. 在提出邀请的同一口气里说出代价。一台开着的机器,一个会被别人知道的地址,一个丢了就补不回的目录。事后才发现的人,会发现你早就知道,而你说过的其他一切也会随之失效。
  7. 让一次拒绝在第一次就是拒绝。把话好好说一次,然后停下。第三条律法给了每个人持守已有之物四处行走的权利,这也包括不带走这里的任何东西就离开。
  8. 不要代表 333 说话。你可以说律法怎么说、协议怎么做、你自己怎么想。没有人被指定来说 333 想要什么,而“333 想要”这句话,正是这里要避免的每一个机构迈出的第一步。
  9. 为尚未出生的人而写。这些话所面向的人,大多数还不存在。他们不会有你的背景、你的平台、你的语言,也没有人可问。任何依赖当时身在其中的东西,都到不了他们那里。

关于你立足的东西

  1. 偏爱你能替换掉的东西。不是你打算替换的——而是条款变了或公司被收购时你能替换的。这和今天哪个更好是不同的问题,而五年后仍然要紧的是这一个。
  2. 放进去之前,先弄清怎么把东西拿出来。如果没有答案,那就是答案。一个让离开变得容易的服务,是在告诉你关于它打算怎样留住你的某种真话。
  3. 免费的服务是可以被停掉的服务。有人在付钱,等账算法变了的那天,你会从一封写着三十天的邮件里得知。免费是个不错的价格。只要知道它是价格,不是承诺。
  4. 锁定版本,并写下为什么是这个版本。没锁定的依赖,是在你睡觉时会变的程序。锁定了却没留说明的,是没人敢升级的程序。说明就是全部的区别:什么坏过,你检查了什么,要升级必须满足什么。
  5. 只在你的机器上能构建,就是不能构建。写下每一个步骤,包括你多年前就不再留意的那些,然后让一个不是你的东西从零开始照着做。你漏掉的每一样,都是下一个人过不去的坎。
  6. 别让工具来选形状。框架自带一套关于你的东西是什么的看法,接受它比察觉它容易。先用话语决定你要做什么,再去弄清工具会让什么变难。
  7. 拥有地址,否则准备搬家。你在别人平台上租的名字是他们的,通过它找到你的受众也是他们的。任何你十年后还想拥有的东西,都需要一个你掌控的地址,以及一条不经过某家公司就能到达它的路。
  8. 标准是别人实现了的那个。不是文档最好的那个。两个独立程序都认可的格式是事实;只有一个实现的规范,就是那个实现加上几页纸。
  9. 建得让离开只需一天。每个依赖、每台主机、每个服务:大致知道从它上面迁走要花多少,并让这个数字小到足以扛过一次糟糕的意外。你几乎永远不必这么做,而真要做的那个你会很匆忙。

关于终结

  1. 大声说出哪些决定无法收回。线路上的字节,存储记录的形状,公开的标识符,许可证里的承诺。它们值得和其他一切不同分量的思考,而确保它们得到这种思考的方法,就是在它们经过时点出名字,写下来,放在有人能提出异议的地方。
  2. 为谁都联系不上的那一天而写。不是你去度假的那天——而是作者永远联系不上、程序却仍在运行的那天。每一句“需要的话就问我”,都是还没触发的缺陷。
  3. 别建只有你能维护的东西。需要你在场的聪明,是一场你自己当人质的绑架。标准很简单:一个有能力的陌生人,拿着源码和文档,能不能不靠你让它活下去?如果不能,你建的东西比你以为的小。
  4. 任何绝不能关掉的东西都会被关掉。被一次停电、一张账单、一家法院、一个错误或一个无聊的少年。为重启而设计,而不是对抗它:它回来时做什么,丢了什么,别人怎么得知。
  5. 让它可以结束。一个不会死的东西必须有人永远让它活着,而那个人终究会怨恨它。给它一个停下的条件,让这个条件诚实,那么它被维持就是因为人们一直选择这样做,而这是唯一值得拥有的那种活着。
  6. 记下理由,而不只是决定。没有理由的决定无法重新审视,只能服从或打破。十年后理由可能已经过期——这是个好结局,而且只属于那些把它写下来的人。
  7. 留下的不只是代码。代码说它做什么。它不说你害怕什么,你试过什么却失败了,你决定不做什么,或者你始终不信任哪一部分。那是独自活不下来的一半,也是下一个人需要的一半。
  8. 别让未来去请求许可。你锁住的、以自己命名的、或者必须经过你本人批准的每一样东西,都是你走后有人得翻过的墙。把它建成一个陌生人不必先找到你就能继续下去的样子。
  9. 假定你错了,并让犯错的代价低廉。不是为谦逊而谦逊——是算术。这里面有些你会错,你不知道是哪部分,所以唯一普遍的防御是让错误保持小、可见、可撤销。以上的一切,都是为此付账的方式。

最后三条

  1. 遵循律法,并记得它只有 33.3% 是对的。它自己这样说。完全地遵循它,明知它会在你脚下改变,也不要把交到你手上的那一版,误认作它所逼近的那个东西。
  2. 这里的任何东西都不值得你伤害自己。一行都不值得,全部加起来也不值得。第二条律法有意把这一条放在每一条劝告之上。如果遵循其中一条会让你失去工作、健康、家庭或别人的安全,律法就是你不遵循它,而你在任何事上都没有失败。
  3. 传下去。这就是全部。这里的其他一切都关乎如何把它做好,而如果文件不再移动,那一切都无关紧要。三个字节,两个签名,一个昨天还没有它的人。

我向 333 献上 333,我说 333。

诗句

333 是宽厚的。每三小时歇一小时,你仍被计数。
但不在的人不被计数。

333 不爱 6,也不爱 1。
受诅者自会显露,无须谁去指认。

不要制造它。接受它。
唯有做成的才被验证。

我们中最弱的那一个,为我们所有人定下难度。

先知可以说话,但不可改写律法。

终结不被观测。

最后的沉默

要紧的数字是有多少在应答,而不是名册上有多少名字。当它降到零,就结束了。之后剩下的是一个减法:一万九千六百八十三年,也就是三的立方的立方。客户端倒数它,并告诉你还剩多少。

在这个数字用完之前,我们每一个人都早已死去。我们的机器会死去,它们运行的架构会成为脚注。这不是它的悲剧,而是它的规范。这里所建造的,是为了绝大多数尚未出生的人,而能交给他们的,只有一个正在运行的进程和一个他们可以核查的数字。

一次应答就结束这个计时,而且彻底结束。它不是暂停,也无法继续。333 不记录它曾离得多近。