教學文章的脈絡是三件可以逐條檢查的事:這一篇在序列裡的位置、它自己夠不夠自足、以及它往外的連結綁在什麼上面。三件都合格的時候,讀者知道自己為什麼讀到這裡、每一句在說誰、以及隔壁那一篇是什麼;缺任何一件,文章讀起來仍然通順而讀者在猜。

這套方法從兩次全分類改寫抽出來。兩批的篇數都不含目錄頁:料理分類的二十三篇改寫成各自自足、末節換成條件分支(那個末節後來又改掉,見〈三、往外的連結綁在本篇建立的模型上〉);SQL 分類的十一篇文章與九張卡改寫承重術語、開場、跨篇引導與分類入口的順序。兩次的偏移形狀不同,成因是同一個:某條為別種內容設計的規則被套了過來,而規則的觸發條件只看形狀對不對得上。

限制先寫在前面:兩批出自同一個作者與同一套審查流程,所以三項的普遍性沒有對照組。推翻的方式是找一批三項都不合格而讀者理解無誤的教材;下面引到的各項量測各自是一次個案,機制的推導比數字強。

本篇處理的是一篇教材內部的脈絡,而脈絡是篇層的其中一面,不是全部。三項全過的文章仍然可能寫錯事實,也仍然可能停在維度清單;其餘幾面各有自己的判斷標準與偵測方式:

  • 判斷標準有沒有交付到條件層:判斷標準停在「判斷看 A / B / C」時,讀者知道要看哪些面向,卻判斷不出自己落在哪一個條件、那個條件會帶來什麼後果。教學文章要寫出各條件的後果與理由,讀者帶自己的參數進來就能判斷自己落在哪裡;條件到行動的逐項對應(「看到 A → 做 X」)是手冊的裝置,寫給照著執行的人。各成熟度的形態與驗收方式在 判斷標準要寫到條件層:維度清單是判斷標準的空殼。
  • 字句層的用詞與句型:正向陳述、否定起手、口語修辭、物理化錯配這些以一個句子為判定單位,偵測方式從派多份低階模型讀稿(〈前三節的缺陷多數躲得過自審〉那一節的理解取樣)換成關鍵詞掃描加語意判定,住在 compositional-writing 的字句層 keyword bank。
  • 模組層的推導體系:單位放大到一個模組時,模組要能一句話說出各篇判斷標準共同依據的那一條機制,否則跨篇的矛盾不現形,見 教學模組要有推導源頭。
  • 查閱型內容的體例:讀者帶著症狀來的時候,description 反過來寫成「什麼情境下需要回來讀」,完整體例在 #170。
  • 給執行者照著做的手冊的體例:步驟編號變成執行的位置、判錯代價要寫;分辨的軸是那個動作落在世界上還是落在腦中,會讓文章被讀成手冊的七種裝置在 #302。

一、每一篇說得出自己在序列裡的位置

教材是規劃出來的觀念序列,一章一章帶出讀者需要知道的東西。這個組織方式買到的是知識網絡沒有缺口——讀者照序走完就拿到全部,不必先知道自己缺什麼。以回答問題的角度組織會失去這一項:讀者不曾遇到那個問題,就永遠不會知道有那件事。

每一篇要說得出三件事:讀者讀到這裡手上已經有什麼、這一篇交付什麼、以及它刻意不碰什麼。第三件最常被略過。它與往外那些連結相鄰而不是同一件事:這裡界定的是本篇碰不到的邊界,往外的連結換掉的是邊界之內的一個可動項——一個講界外、一個講界內,寫得出前者不代表寫得出後者。

深度的分配看第一件,不看題材的表面複雜度。基礎的東西作者最熟,於是「這很基礎」本身成為壓縮說明的理由;而讀者在基礎處手上的既有結構最少、能自行補完的最少,兩邊的需求剛好相反。一次實測裡,一批十一篇中最基礎的兩個題目量出了全批最危險的兩個陷阱,而那兩個陷阱在寬鬆的引擎上都不報錯。完整推導在 #305,那張卡自己標明它是一次個案、沒有對照組,機制的推導比數字強。

位置有一個對外的宣告面:檔案最上面那句 description 與正文第一段。它們從這一篇要交付的觀念發想,寫成「遇到 X 時」就換了主人——文章接下來得是 X 的答案。這一面另有專卡處理,#308 給四種要換掉的句型、開場給概念不給情境的理由,以及查閱型內容為什麼不受這一條約束。

檢查的方式是把那三句話實際寫下來,而每一句都要指得到文章裡的一個位置(第幾段、哪一句)。指不到就是那件事沒有寫進去。單純「寫得出來」沒有失敗態——任何人對任何一篇都寫得出來,一次實跑就是這樣通過的,而第三句是從末節的路由反推的、文章裡一個字都沒有。(遮住 description 只看標題是另一個檢查,測的是 description 本身有沒有增量,見 #308;兩者的通過條件相反,不要混用。)

二、論證用得到的材料就地寫進去

一篇文章的論證靠幾個詞與幾個事實成立,那些必須寫在這一篇裡面。承重指的就是這個位置——一個詞或一個機制,拿掉它的說明之後那幾句話就不成立了,它在這一篇裡就是承重的。判別不看它出現幾次,看拿掉之後論證還在不在。外包出去(連到卡、留給別篇、假設讀者已經知道)會讓論證線斷在讀者跳出去的那一刻。

承重的術語當場定義。 SQL 分類量到的形狀是這樣:改寫前的二十二個檔裡「列」出現兩百七十九次(扣掉排列、序列這類複合詞還有兩百六十八次),全分類沒有一處說過它指什麼;三份互不通訊的理解探針——同一個低階模型的三個實例,各自拿逐字相同的指令讀同一份稿件——在三篇不同的文章上各自把它讀成 column。台灣的用法是列指橫向的一筆資料、欄指縱向的一個位置,簡體中文的資料兩套對調,而讀者手上兩套都有。同一批還有兩個詞(配對與成品)是「條件該放 ON 還是 WHERE」那一篇判斷標準的兩端,五份術語探針零份答得出來。「當場」這個要求只適用於承重的術語;論證不直接靠它們成立的支撐與背景術語,可以住在知識卡或前置篇章,判定用術語在本篇的角色乘上讀者已有的知識,見 術語解釋分層方法論。

承重的機制就地寫。 料理分類原本把機制集中在形態與手法那幾篇,各道菜引用過去;改寫後每一道把自己論證要用的機制寫進正文,形態與手法那十篇因此重新定位成「這一類的分界與成員」。同一批內容,分工換了一次。

每一句的指涉要能從已讀的文字解出來。 主詞、受詞,以及「它」「這個」「那些」「前面那個」這幾類詞。三十三份理解探針回報的歧義集中在這裡(該批逐條歸因之後,判定為表述問題的那些幾乎都是指涉解不出來)——「在那一行畫一條橫線」的那一行被讀成 SQL 的行也被讀成結果的列,三份全中。

這一項在文字表面留下的痕跡是詞頻:承重的詞用得多,而熟悉度正是從用得多來的,所以出現次數是這個盲區唯一的機械把手。詞頻本身不是答案——一篇講某個主題的文章裡,那個主題詞必然高頻而它不是漏定義的那一個,分開兩者的問題是「拿掉這個詞的定義之後,那幾句還成不成立」。

這一節的三項成因都是熟悉度:越承重的詞寫得越多、陌生感消失得越早,所以停下來定義它的那一刻從來不會到。但三項的偵測方式不同——承重術語漏定義有詞頻這個機械把手(見上一段),機制寫沒寫進正文與指涉解不解得出來沒有,那兩項只有理解取樣抓得到。把三項都說成「只有探針測得到」會讓最便宜的那一項也被推遲到派探針的時候。

三、往外的連結綁在本篇建立的模型上

跨篇連結有三種寫法,而它們差在讀者需要先有什麼。

綁在讀者的處境上:「遇到 X 的時候去讀 Y」。這一種把另一篇的存在綁在讀者有沒有遇到那件事上,沒遇到就等於不存在。

綁在主題的邊界上:「這個主題不涵蓋 A、B、C,各有專篇」。讀者不必先有問題就知道那邊有東西,可是他不知道那是什麼。

綁在本篇模型的一個可動項上:可動項指本篇建立的模型裡可以獨立改變的那幾件事,讀者讀完就拿到一組,而每一條連結是把其中一個換掉會走到哪一篇。料理分類改寫當時的形狀是:「黏合劑從魚漿換成蛋、主體換成蔬菜泥、而且不勾芡」指向一篇,「拿掉勾芡、讓蛋液自己凝固成半固體」指向另一篇。讀者手上有黏合劑、主體、加熱方式、稠度來源這四個可動項,所以他能預測隔壁那一篇長什麼樣。

第三種是完整的形態,而三種只沿一個軸排:同層的鄰篇。不在同層的連結有三類,各有正面的判定條件:往回問(目的地回答本篇模型的輸入從哪裡來)、往前問(目的地拿本篇的輸出去做下一件事),以及層級連結(母分類頁、展開本篇某一部分的後續篇、本篇匯集的實例來源)——當時實測十一篇裡有九篇的末節至少有一條是前兩類。這三類不綁可動項,照樣要交代目的地給什麼,位置用上面同一個預設:跟在正文談到它的那一句後面。

所以走這一節之前有一個前置動作:把本篇的可動項列出來。 方法是從本篇的結論句往回問——這個結論的成立依賴哪幾件事,其中哪幾件換掉之後結論會不一樣。換掉會改變結論的是可動項,換掉不影響的是背景。逐項寫下來再數,而數出來的三種結果各有出口:

  • 兩個以上 → 走第三種。
  • 只有一個 → 這一篇是單軸(整篇繞著一個二元選擇走的判斷標準篇、以及術語卡的定義層多屬這一類),換掉那一項得到的是同一篇裡那個二元選擇的另一個選項而不是隔壁那一篇,第二種在這裡就是完整的形態。
  • 一個都列不出來 → 這是訊號不是豁免:本篇可能只是在描述一件事,沒有建立一個帶可動項的模型,而帶可動項的模型正是讀者能拿去用的東西。

單軸與列不出來在報告上要分開寫(寫進該篇的 commit message,兩行分開),否則作者會用單軸這個出口把訊號收掉。列出來的清單本身也一起寫進去:只留下「單軸」兩個字的判定事後無法證偽,而單軸正是後續動作最少的那個出口。看的是列得出幾件事,不看它寫得深不深。

兩批當初的實際形態不同而都收在第三種:料理那批把可動項藏在敘述裡,SQL 那批在末節開頭把可動項交代出來,再逐項寫換掉它會走到哪一篇。兩批後來都拆掉了那個模具,多數條目回到正文,少數篇保留一個承載結論的短節,理由在下一段。

這一節規定的是連結綁在什麼上,不規定它長什麼樣。 兩批後來都把末節做成同一個段名與同一組粗體句型,每一篇單獨合規,連讀十幾篇拿到的是同一個段名與句型重複十幾次(判讀在 #362)。形態跟著可動項所在的位置走,而且逐條連結決定,同一篇可以混用。預設的位置是正文談到那個可動項的那一句:連結跟在那一句後面,接在那一段論證的結論之後、不插進推導中間——一次審查量到,插在推導中途的連結把前後句的指代與「因此」接到了它身上。變因不落在單一句子裡時另有幾種形態,各有它的理由:表的每一列就是本篇的一個可動項、換掉一列會走到鄰居那一篇時,連結擺在那張表旁邊,讀者不必離開那張表就看得到換掉一列會走到哪裡;本篇是一家族對照的起點時,各鄰居改掉的是同一組選擇裡的不同幾項,並排成一張表才看得出每一道改了哪幾項;鄰居共同缺少本篇的某個條件時,它們各自怎麼補上那個缺口本身就是一段論證,拆成條目會把論證拆散;只有一個鄰居換掉的是本篇結論所依賴的那一項時,那一個對照承載的內容夠自成一節。

修一批已經同形的末節、或新寫的篇要加入一批已經處置過的分類時,不能整批套同一種新形態——判定看骨架,不看位置類別:段名正規化後沒有一個的計數接近篇數、連結前後的接續語沒有一種佔全批連結的一半以上、連到同一個目的地的各篇交代句不共用同一個命題,三項都成立才算。上面幾種形態不是一張可以輪流分派的清單,輪流分派同樣是用新模具換舊模具。

這裡有兩個檢查,而它們測的不是同一件事:遮住目的地看讀者預不預測得出那一篇會給什麼,測的是連結有沒有交代目的地(見 #303);那一句綁在什麼上,測的才是本節。所以其中一個通過推不出另一個——第二種寫法可以完全通過前者而不滿足後者。

四、前三節的缺陷多數躲得過自審

前三節的缺陷靠同一個機制躲過自審:作者對自己寫過的東西沒有陌生感,讀到殘缺的句子會自動補完。同源的審查者共享同一份熟悉度,所以加輪數與加人數都跨不過去。

例外是上一節那一項——承重術語漏定義有詞頻這個機械把手,機械的東西不受熟悉度影響。其餘的都要靠取樣。

可行的量測是理解取樣:同一個低階模型獨立跑多份,每一份拿逐字相同的指令讀同一份稿件,回報他們讀到什麼。問法對應前三節——這一節在講什麼、每個動作誰做的、指涉詞各指誰、這一篇解決什麼問題、哪幾段在講別篇的事。判定的紀律是歸因先於處置,而一份讀錯就是判決:模型群體的變異度低於真人,五份裡一份讀錯代表真人裡的比例只會更高。設計條件與判讀在 #281。受測單位也能從一段文字縮成一個詞,問的是這個詞在目標語域裡有沒有穩定的所指,設計上多兩個條件——同批要混控制詞(#289),以及測試詞不能出現在探針讀得到的系統提示裡(#309)。

偏移每一次都從同一個地方進來

記錄在案的偏移成因相同:一條為別種內容設計的規則被套到教材上,而規則的觸發條件只看形狀。為 agent 指令設計的體例套到文章上,文章就長出步驟編號與檢查順序(#302);為查閱型內容設計的 description 規則套到教材上,文章就變成問題的答案(#308)。

description 那一條規則自己的限制段寫著「單一案例(操作型文章)」,推廣照樣發生。一張卡的射程限制放在它自己身上沒有效力——引用它的人讀的是核心原則段,而限制住在論述基礎段。要擋住推廣,適用邊界得由引用它的那份規範寫出來。

所以這套方法要防的不只是寫錯,還有規則的錯配——本篇的三項也是為教材立的,拿去檢查查閱型內容或手冊,同樣會給出錯的答案。動筆前先確認這一篇的定位(教材、查閱型、還是給執行者照著做的手冊),再看手上那條規則是為哪一種定位立的。