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 不記錄它曾離得多近。