論述基礎與限制

來自一個語言層教材分類(十一篇)的實作與兩次實際的讀者提問。個案一則,機制推導比量測強。 沒有對照組——手上沒有一批按問題組織的同題材內容可以並排比。

可以查證的部分是結構事實:那個分類十一篇裡有八篇的篇名是語法或語法結構(子句、連接、別名、分組鍵、識別字),另外三篇的篇名是語言性質、權限與代價。讀者在兩次提問裡帶來的都是問題而不是語法。

核心原則

教材按功能分章時,每個功能都有一節,而「我這個問題該用哪一個功能」沒有入口。 選擇本身有時是有的——一個模組裡常有一兩章專門講「這幾種寫法選哪一個」——缺的是從讀者的問題走到那一章的路:他要先知道自己的問題屬於哪一類功能,才找得到那一章,而那正是他來找的東西。 這個缺口是組織方式的直接結果而不是漏寫:章節照被解釋的對象切,而選擇發生在對象之間。

讀者的處境與這個組織方式反向。他手上是一個問題——找出沒有對應資料的那些人、分組之後數字對不上——而不是一個語法。要從問題走到功能,他得先知道答案,而那正是他來找的東西。

症狀:解釋得完整而選不出來

按功能組織的章節回答「這個東西做什麼」,回答得再完整也推不出「我不該用它」。

一次實際的提問是這樣:讀者要找出從未下單的顧客,寫成外連接加分組再用計數等於零去篩。每一個零件的用法都對——外連接保留了配不到的列,計數某個欄位確實會跳過空值——而整條路是錯的。

錯在哪裡要從業務事實才看得出來:沒消費過的顧客在訂單表裡不會有任何一列。 由這一句直接推得「他的訂單數是零」這件事從訂單表本身問不出來,因為沒有一組可以代表他;那個零是外連接補了一列空值之後才出現的,是查詢自己製造再讀回去的產物。

計數預設有東西可以數,而這一題的對象恰好是什麼都沒有的那些人。這個結論不在任何一個語法功能的說明裡,因為它不是關於某一個功能,它是關於這些功能之間的選擇。

修法:給選擇一個住址

加一層問題到落點的路由。 章節照功能留著,另外給一張表把讀者實際會帶來的問題對到落點。這一層很便宜——不必重寫任何一章——而它補的正是組織方式製造的那個缺口。

問題要用讀者的語言寫,不用功能的語言。「分組之後結果少了幾筆」是讀者說得出來的,「分組鍵的選擇」不是——後者已經預設他知道問題出在分組鍵上。

選擇型的章節要讓業務事實出現在語法比對之前。 一個章節如果承擔的是「這幾種寫法選哪一個」,那個讓選擇成立的業務事實要先講。實作中同一個章節的這一段先後寫過兩版:第一版從查詢的結果反推(「答案已經寫在每一列上了」),第二版從業務事實正推(「沒消費的人不會出現在訂單表」)。第二版不需要讀者先寫出一個查詢才看得到結論。

而那次實作只做到一半,值得記下來。 那一章的開場仍然是語法演練(分組鍵選錯會怎樣),業務事實出現在第四節。理由是該章同時承擔兩件事——鍵怎麼選,以及這題需不需要分組——而前者是機制、後者才是選擇。兩件事同章時,開場放哪一個沒有被解決,只是被排序繞過。

功能型的章節維持原樣。 這條修法只適用於承擔選擇的那些章節,把它套到「這個子句做什麼」那一類會製造沒有必要的鋪陳。

這些判定的輸入

上面每一條修法的最省力遵循方式都一樣:在腦中判一次,然後宣告通過。而那個判定認真做過與完全沒做,產物完全相同——判定又由知道答案的作者執行,所以「我判過了」不構成證據。每一條判定要留下它的輸入:

判定要留下的輸入
「讀者讀到這裡手上有什麼」列出來:這一段之前,讀者從哪幾篇拿到哪幾個概念。列不出來就是還沒判
源頭的一句話測試那句話交給沒讀過本模組的探針,問它「這句話裡有哪些詞你不知道指什麼」。作者自己判不了,因為他知道答案
「這一章是功能型所以維持原樣」寫出這一章沒有並列兩種以上可替代的寫法。有並列就是選擇型,不論它同時是不是在解釋機制
「問題用讀者的語言寫」問題句要有出處(實際的提問記錄),且句子裡不出現任何章節名裡的名詞。後者可以 grep
「路由表已經補了」每一章至少被一個問題指到。這一條可以數
篇幅與基本度的對照排名回升時要說明補進去的是走過資料的段落,不是任何字數

判定本身不是產物,判定用的材料才是。 沒有這些輸入的時候,最省力的路徑會沿著零後續動作的那個結論走——判成不適用、判成不需要補、判成功能型——因為那個結論不產出任何東西可供檢查。

為什麼審查抓不到

缺口是一整節的缺席,而審查逐節檢查已經寫出來的東西。每一章都完整、正確、有判斷標準,合起來仍然缺一個入口——沒有任何一章可以被指出「這裡有問題」。

作者也不容易看到,因為他知道每個功能各自解什麼問題,所以那張對照表在他腦中已經存在。它只是沒有被寫下來。

跟其他原則的關係

判讀徵兆

  • 章節的名字全部是被解釋的對象(子句名、API 名、功能名),沒有一章的名字是一個問題。
  • 讀者的提問裡出現「我這樣寫犯了什麼錯」而不是「這個功能怎麼用」——他要的是選擇,而教材給的是說明。
  • 模組入口只有成員清單與推導源頭,沒有一張表把問題對到成員。
  • 某一章的開場是語法的比對,而那一章實際承擔的是「這幾種選哪一個」。