排比句的變動格填了話題自己的定義:同義反覆的形態、兩個檢查與改寫方向
排比句由一個固定骨架加幾個變動格組成,讀者從排比裡拿到的資訊全部在變動格裡:骨架重複三次,讀者只讀一次。所以判斷一句排比是否有內容,看的是每一個子句的變動格填了什麼。變動格填的是從話題的定義就推得出來的描述時,那個子句的資訊量是零——它重述了話題的名字,語法完整、每個子句都成立,讀起來工整,而讀者讀完不知道任何新的事。
失效的形態
一篇服務端監控的教材在監控鏈還沒展開之前,先寫一句總覽:
一層的問題盲區,由問另一個問題的層接手;一層的位置盲區,由站在另一個失效域的層接手;各層的讀取缺口,由告警規則與分送接手;訊號失真沒有專門的一層,由每一層替自己的觀察者另寫一條「讀不到它」的規則……
骨架是「X 的 Y,由 Z 接手」,變動格是 Y(缺口的種類)與 Z(接手的一方)。前文已經定義過:問題盲區是一個觀察者沒有在問的故障,位置盲區是連觀察者自己一起停掉的故障(觀察者與元件共用同一個失效域)。拿這兩個定義去填 Z:
| 話題 | 它的定義 | Z 填的 |
|---|---|---|
| 問題盲區 | 這個觀察者沒有在問的故障 | 問另一個問題的層 |
| 位置盲區 | 與被觀察的元件共用同一個失效域 | 站在另一個失效域的層 |
| 讀取缺口 | 看到了,而沒有程式讀它的結果 | 告警規則與分送 |
前兩列的 Z 只要讀過定義就寫得出來,不需要知道監控鏈裡有哪幾層:「沒在問的問題,由問那個問題的觀察者補上」。第三列不同,告警規則與 Alertmanager 這類分送元件是領域裡實際存在的元件,讀者從定義推不出來。整句四個子句裡只有讀取缺口那一句交付了資訊;訊號失真那一句打破了骨架,因為它的接手方不是一層,骨架裝不下。
同一篇正文裡「由 Z 接手」出現十幾次,多數是有內容的:「由服務網路內的探測接手」「由元件指標接手」「由失效域以外的心跳監看接手」——Z 是一個具名的元件或一層監控。骨架本身可以用,空洞出在總覽句:它寫在各層還沒介紹的位置,手上沒有任何一層的名字可以填進 Z,只能填從定義推出來的描述。
兩個檢查
定義代換。 對排比的每個子句問:變動格裡的內容,能不能只從話題的定義推出來,而不需要本篇的任何其他資訊。能的話,這個子句是同義反覆。這一條的判定不需要語感,把定義寫在旁邊逐格對就判得出來。
語序翻轉。 把話題在前、動作者在後的子句改成動作者在前:「告警規則與分送處理各層的讀取缺口」是一句有內容的直述;「問另一個問題的層接手一層的問題盲區」的空洞在這個語序下一眼可見。話題在前的寫法讓三個缺口種類對齊在子句開頭,視覺上像一張分工表,而這個對齊同時把空洞的動作者藏在子句尾端。翻轉之後變得明顯空洞的子句,就是被話題在前的語序遮住的那一個。
兩個檢查也可以反過來當成生成端的規則:寫排比之前,先把每個子句的變動格填好實際的名字,填不出名字的子句不進排比。
為什麼既有的檢查沒擋住
#261 對排比的要求是「每個半句能獨立判真」。同義反覆的半句不只能判真,而且必然為真,這一條檢查會直接通過。
#358 的四個槽位要求動作者填領域裡實際存在的實體。「問另一個問題的層」看起來像一個實體,它有名詞頭(層),也有修飾語,審查者讀到時會把它當成一個已填的槽位。它是一個角色描述:符合這個描述的層是哪一層,句子沒說。
作者與同源審查者都持有全篇內容,讀到「問另一個問題的層」時腦中自動代入服務網路內的探測、元件指標這些具體的層,所以這一句對他們不是空的。只拿到前文的讀者沒有這份清單,他拿到的就是定義的重述。讀者的反應通常是「工整的廢話」,說得出它空,說不出它錯,因為它確實沒有錯。
改寫方向
排比要保留,就把變動格換成實際的對象;排比裝不下,就拆開寫出這組分類真正帶來的判斷。
寫出實際的配對,適合放在監控鏈已經展開的位置:
自檢碰不到的程序以外的路徑,由服務網路內的探測接手;和服務主機一起停掉的觀察者,由失效域以外的心跳監看與合成監控接手;各層看到而沒有程式讀的結果,由告警規則與 Alertmanager 接手。
寫出兩種盲區在補法上的差別,適合放在總覽的位置。這個差別讀者從定義推不出來,而它正是把盲區分成兩種的理由:
補問題盲區,加的是一個問不同問題的觀察者;補位置盲區,加的是一個放在另一個失效域的觀察者,在同一個失效域裡多加幾個觀察者,主機停掉時它們會一起停。
後一種寫法的資訊在最後那個子句:它排除了一個讀者可能會做的錯誤補法(在同一台主機上再加一個監控)。原本的排比把「另一個失效域」寫成了骨架的一部分,這一點就沒有被說出來。
論述基礎與限制
本卡的證據是一篇文章的一句總覽、一位讀者的指認,以及主 session 對同篇「由 Z 接手」各處的比對(多數有具名的 Z,總覽句裡有兩處沒有)。定義代換與語序翻轉兩個檢查還沒有在其他文章上跑過,不知道它們的誤報率;「總覽句寫在對象被介紹之前,所以只能填定義」這個成因只有這一例。
跟其他抽象層原則的關係
- #261 語句要在它的消費單位內資訊自足——那一張的「一句一命題」要求排比的每個半句能獨立判真;本卡補上它放行的那一端:必然為真的半句通過判真檢查,而資訊量是零。
- #358 技術文章的每一句寫清楚誰對什麼做了什麼事——動作者槽位要填實體;本卡是那個槽位被角色描述填上、看起來已填的形態。
- #365 逐段審查量讀者學不學得會——審查者讀過全文,所以「問另一個問題的層」對他解得開;本卡的空洞只有沒讀過後文的讀者看得到,是同一個成因。
- #362 規範指定了某個位置要交付什麼,全批長成同一個模板時沒有任何一道檢查管得到——那一張是跨篇的骨架重複;本卡是同一句裡的骨架重複,兩者都是骨架讀起來像內容。
- #372 正反問句嵌進句子當名詞——同一篇、同一組框架詞的另一個後果:「回答的問題」這個框架讓內容句寫成正反問句,「由 Z 接手」這個框架讓總覽句寫成排比。
判讀徵兆
- 讀者說一句話「很工整,但是廢話」,而那句是三個以上子句的排比。
- 排比的動作者或結果格是「另一個 X 的 Y」「站在 X 的 Y」這類描述,而不是一個具名的元件、人或步驟。
- 排比裡有一個子句打破了骨架(「X 沒有專門的一層」),代表骨架裝不下實際的分工。
- 總覽句寫在它所總覽的那些對象被介紹之前。
Case
2026-10-14,服務端監控分層的教材在多輪審查期間,使用者讀到「一層的問題盲區,由問另一個問題的層接手;一層的位置盲區,由站在另一個失效域的層接手;各層的讀取缺口,由告警規則與分送接手」,問為什麼不順著寫、而用類似倒裝的寫法,並指出這裡可以直接寫成告警與分送機制處理各層的讀取缺口、另一個失效域的層覆蓋位置盲區,而現在的文法「就是用看起來很工整的廢話寫法」。