<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>路由 on Tarragon</title><link>https://tarrragon.github.io/blog/tags/%E8%B7%AF%E7%94%B1/</link><description>Recent content in 路由 on Tarragon</description><generator>Hugo -- gohugo.io</generator><language>zh-TW</language><copyright>Tarragon (CC BY 4.0)</copyright><lastBuildDate>Mon, 31 Aug 2026 00:00:00 +0800</lastBuildDate><atom:link href="https://tarrragon.github.io/blog/tags/%E8%B7%AF%E7%94%B1/index.xml" rel="self" type="application/rss+xml"/><item><title>#306 按功能組織的教材裡，「該用哪一個」沒有住址</title><link>https://tarrragon.github.io/blog/report/feature-organized-teaching-has-no-address-for-tool-choice/</link><pubDate>Mon, 31 Aug 2026 00:00:00 +0800</pubDate><guid>https://tarrragon.github.io/blog/report/feature-organized-teaching-has-no-address-for-tool-choice/</guid><description>&lt;h2 id="論述基礎與限制">論述基礎與限制&lt;/h2>
&lt;p>來自一個語言層教材分類（十一篇）的實作與兩次實際的讀者提問。&lt;strong>個案一則，機制推導比量測強。&lt;/strong> 沒有對照組——手上沒有一批按問題組織的同題材內容可以並排比。&lt;/p>
&lt;p>可以查證的部分是結構事實：那個分類十一篇裡有八篇的篇名是語法或語法結構（子句、連接、別名、分組鍵、識別字），另外三篇的篇名是語言性質、權限與代價。讀者在兩次提問裡帶來的都是問題而不是語法。&lt;/p>
&lt;h2 id="核心原則">核心原則&lt;/h2>
&lt;p>&lt;strong>教材按功能分章時，每個功能都有一節，而「我這個問題該用哪一個功能」沒有入口。&lt;/strong> 選擇本身有時是有的——一個模組裡常有一兩章專門講「這幾種寫法選哪一個」——缺的是從讀者的問題走到那一章的路：他要先知道自己的問題屬於哪一類功能，才找得到那一章，而那正是他來找的東西。 這個缺口是組織方式的直接結果而不是漏寫：章節照被解釋的對象切，而選擇發生在對象之間。&lt;/p>
&lt;p>讀者的處境與這個組織方式反向。他手上是一個問題——找出沒有對應資料的那些人、分組之後數字對不上——而不是一個語法。要從問題走到功能，他得先知道答案，而那正是他來找的東西。&lt;/p>
&lt;h2 id="症狀解釋得完整而選不出來">症狀：解釋得完整而選不出來&lt;/h2>
&lt;p>按功能組織的章節回答「這個東西做什麼」，回答得再完整也推不出「我不該用它」。&lt;/p>
&lt;p>一次實際的提問是這樣：讀者要找出從未下單的顧客，寫成外連接加分組再用計數等於零去篩。每一個零件的用法都對——外連接保留了配不到的列，計數某個欄位確實會跳過空值——而整條路是錯的。&lt;/p>
&lt;p>錯在哪裡要從業務事實才看得出來：&lt;strong>沒消費過的顧客在訂單表裡不會有任何一列。&lt;/strong> 由這一句直接推得「他的訂單數是零」這件事從訂單表本身問不出來，因為沒有一組可以代表他；那個零是外連接補了一列空值之後才出現的，是查詢自己製造再讀回去的產物。&lt;/p>
&lt;p>計數預設有東西可以數，而這一題的對象恰好是什麼都沒有的那些人。&lt;strong>這個結論不在任何一個語法功能的說明裡&lt;/strong>，因為它不是關於某一個功能，它是關於這些功能之間的選擇。&lt;/p>
&lt;h2 id="修法給選擇一個住址">修法：給選擇一個住址&lt;/h2>
&lt;p>&lt;strong>加一層問題到落點的路由。&lt;/strong> 章節照功能留著，另外給一張表把讀者實際會帶來的問題對到落點。這一層很便宜——不必重寫任何一章——而它補的正是組織方式製造的那個缺口。&lt;/p>
&lt;p>問題要用讀者的語言寫，不用功能的語言。「分組之後結果少了幾筆」是讀者說得出來的，「分組鍵的選擇」不是——後者已經預設他知道問題出在分組鍵上。&lt;/p>
&lt;p>&lt;strong>選擇型的章節要讓業務事實出現在語法比對之前。&lt;/strong> 一個章節如果承擔的是「這幾種寫法選哪一個」，那個讓選擇成立的業務事實要先講。實作中同一個章節的這一段先後寫過兩版：第一版從查詢的結果反推（「答案已經寫在每一列上了」），第二版從業務事實正推（「沒消費的人不會出現在訂單表」）。第二版不需要讀者先寫出一個查詢才看得到結論。&lt;/p>
&lt;p>&lt;strong>而那次實作只做到一半，值得記下來。&lt;/strong> 那一章的開場仍然是語法演練（分組鍵選錯會怎樣），業務事實出現在第四節。理由是該章同時承擔兩件事——鍵怎麼選，以及這題需不需要分組——而前者是機制、後者才是選擇。兩件事同章時，開場放哪一個沒有被解決，只是被排序繞過。&lt;/p>
&lt;p>&lt;strong>功能型的章節維持原樣。&lt;/strong> 這條修法只適用於承擔選擇的那些章節，把它套到「這個子句做什麼」那一類會製造沒有必要的鋪陳。&lt;/p>
&lt;h2 id="這些判定的輸入">這些判定的輸入&lt;/h2>
&lt;p>上面每一條修法的最省力遵循方式都一樣：在腦中判一次，然後宣告通過。而&lt;strong>那個判定認真做過與完全沒做，產物完全相同&lt;/strong>——判定又由知道答案的作者執行，所以「我判過了」不構成證據。每一條判定要留下它的輸入：&lt;/p>
&lt;table>
 &lt;thead>
 &lt;tr>
 &lt;th>判定&lt;/th>
 &lt;th>要留下的輸入&lt;/th>
 &lt;/tr>
 &lt;/thead>
 &lt;tbody>
 &lt;tr>
 &lt;td>「讀者讀到這裡手上有什麼」&lt;/td>
 &lt;td>列出來：這一段之前，讀者從哪幾篇拿到哪幾個概念。列不出來就是還沒判&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>源頭的一句話測試&lt;/td>
 &lt;td>那句話交給沒讀過本模組的探針，問它「這句話裡有哪些詞你不知道指什麼」。作者自己判不了，因為他知道答案&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>「這一章是功能型所以維持原樣」&lt;/td>
 &lt;td>寫出這一章沒有並列兩種以上可替代的寫法。有並列就是選擇型，不論它同時是不是在解釋機制&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>「問題用讀者的語言寫」&lt;/td>
 &lt;td>問題句要有出處（實際的提問記錄），且句子裡不出現任何章節名裡的名詞。後者可以 grep&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>「路由表已經補了」&lt;/td>
 &lt;td>每一章至少被一個問題指到。這一條可以數&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>篇幅與基本度的對照&lt;/td>
 &lt;td>排名回升時要說明補進去的是走過資料的段落，不是任何字數&lt;/td>
 &lt;/tr>
 &lt;/tbody>
&lt;/table>
&lt;p>&lt;strong>判定本身不是產物，判定用的材料才是。&lt;/strong> 沒有這些輸入的時候，最省力的路徑會沿著零後續動作的那個結論走——判成不適用、判成不需要補、判成功能型——因為那個結論不產出任何東西可供檢查。&lt;/p>
&lt;h2 id="為什麼審查抓不到">為什麼審查抓不到&lt;/h2>
&lt;p>缺口是一整節的缺席，而審查逐節檢查已經寫出來的東西。每一章都完整、正確、有判斷標準，合起來仍然缺一個入口——沒有任何一章可以被指出「這裡有問題」。&lt;/p>
&lt;p>作者也不容易看到，因為他知道每個功能各自解什麼問題，所以那張對照表在他腦中已經存在。它只是沒有被寫下來。&lt;/p>
&lt;h2 id="跟其他原則的關係">跟其他原則的關係&lt;/h2>
&lt;ul>
&lt;li>&lt;a href="../basics-anchor-the-advanced/">#305 基本功能衍生的問題不比進階議題簡單&lt;/a>：兩張卡都在講組織方式決定了什麼會缺席。那張卡的缺席是深度（基本的被帶過），本卡的缺席是入口（選擇沒有住址）。共同的成因是作者手上有讀者沒有的東西——那裡是熟悉度，這裡是功能與問題的對照表。&lt;/li>
&lt;li>&lt;a href="../teach-judgment-not-procedure/">#209 教鑑別能力、不教操作流程&lt;/a>：那張卡要求文章交付判斷力，本卡指出判斷力在按功能組織的教材裡沒有落腳的位置。單章寫成判斷力導向仍然不夠——選擇發生在章與章之間。&lt;/li>
&lt;li>&lt;a href="../teaching-module-needs-derivation-anchor/">#219 教學模組要有推導源頭、不是主題集合&lt;/a>：推導源頭讓各章折算得回同一個機制，而本卡管的是另一個方向——讀者從問題進來時走得到哪一章。源頭解決的是內容的一致性，路由解決的是入口。&lt;/li>
&lt;li>&lt;a href="../concept-used-but-never-named/">#321 從名字出發的術語檢查，抓不到被反覆使用而從未命名的概念&lt;/a>：同一個成因的第三個缺席——#305 缺深度、本卡缺入口、那張卡缺名字。三者共用「作者手上有讀者沒有的東西」，而那裡作者有的是用法、沒有的是名字。&lt;/li>
&lt;li>&lt;a href="../routing-destination-must-own-the-topic/">#240 路由目的地要承接該主題&lt;/a>：本卡新增的那一層路由同樣要過那張卡的驗收——問題對到的那一篇要真的承接它，而不只是主題相關。&lt;/li>
&lt;/ul>
&lt;h2 id="判讀徵兆">判讀徵兆&lt;/h2>
&lt;ul>
&lt;li>章節的名字全部是被解釋的對象（子句名、API 名、功能名），沒有一章的名字是一個問題。&lt;/li>
&lt;li>讀者的提問裡出現「我這樣寫犯了什麼錯」而不是「這個功能怎麼用」——他要的是選擇，而教材給的是說明。&lt;/li>
&lt;li>模組入口只有成員清單與推導源頭，沒有一張表把問題對到成員。&lt;/li>
&lt;li>某一章的開場是語法的比對，而那一章實際承擔的是「這幾種選哪一個」。&lt;/li>
&lt;/ul></description><content:encoded><![CDATA[<h2 id="論述基礎與限制">論述基礎與限制</h2>
<p>來自一個語言層教材分類（十一篇）的實作與兩次實際的讀者提問。<strong>個案一則，機制推導比量測強。</strong> 沒有對照組——手上沒有一批按問題組織的同題材內容可以並排比。</p>
<p>可以查證的部分是結構事實：那個分類十一篇裡有八篇的篇名是語法或語法結構（子句、連接、別名、分組鍵、識別字），另外三篇的篇名是語言性質、權限與代價。讀者在兩次提問裡帶來的都是問題而不是語法。</p>
<h2 id="核心原則">核心原則</h2>
<p><strong>教材按功能分章時，每個功能都有一節，而「我這個問題該用哪一個功能」沒有入口。</strong> 選擇本身有時是有的——一個模組裡常有一兩章專門講「這幾種寫法選哪一個」——缺的是從讀者的問題走到那一章的路：他要先知道自己的問題屬於哪一類功能，才找得到那一章，而那正是他來找的東西。 這個缺口是組織方式的直接結果而不是漏寫：章節照被解釋的對象切，而選擇發生在對象之間。</p>
<p>讀者的處境與這個組織方式反向。他手上是一個問題——找出沒有對應資料的那些人、分組之後數字對不上——而不是一個語法。要從問題走到功能，他得先知道答案，而那正是他來找的東西。</p>
<h2 id="症狀解釋得完整而選不出來">症狀：解釋得完整而選不出來</h2>
<p>按功能組織的章節回答「這個東西做什麼」，回答得再完整也推不出「我不該用它」。</p>
<p>一次實際的提問是這樣：讀者要找出從未下單的顧客，寫成外連接加分組再用計數等於零去篩。每一個零件的用法都對——外連接保留了配不到的列，計數某個欄位確實會跳過空值——而整條路是錯的。</p>
<p>錯在哪裡要從業務事實才看得出來：<strong>沒消費過的顧客在訂單表裡不會有任何一列。</strong> 由這一句直接推得「他的訂單數是零」這件事從訂單表本身問不出來，因為沒有一組可以代表他；那個零是外連接補了一列空值之後才出現的，是查詢自己製造再讀回去的產物。</p>
<p>計數預設有東西可以數，而這一題的對象恰好是什麼都沒有的那些人。<strong>這個結論不在任何一個語法功能的說明裡</strong>，因為它不是關於某一個功能，它是關於這些功能之間的選擇。</p>
<h2 id="修法給選擇一個住址">修法：給選擇一個住址</h2>
<p><strong>加一層問題到落點的路由。</strong> 章節照功能留著，另外給一張表把讀者實際會帶來的問題對到落點。這一層很便宜——不必重寫任何一章——而它補的正是組織方式製造的那個缺口。</p>
<p>問題要用讀者的語言寫，不用功能的語言。「分組之後結果少了幾筆」是讀者說得出來的，「分組鍵的選擇」不是——後者已經預設他知道問題出在分組鍵上。</p>
<p><strong>選擇型的章節要讓業務事實出現在語法比對之前。</strong> 一個章節如果承擔的是「這幾種寫法選哪一個」，那個讓選擇成立的業務事實要先講。實作中同一個章節的這一段先後寫過兩版：第一版從查詢的結果反推（「答案已經寫在每一列上了」），第二版從業務事實正推（「沒消費的人不會出現在訂單表」）。第二版不需要讀者先寫出一個查詢才看得到結論。</p>
<p><strong>而那次實作只做到一半，值得記下來。</strong> 那一章的開場仍然是語法演練（分組鍵選錯會怎樣），業務事實出現在第四節。理由是該章同時承擔兩件事——鍵怎麼選，以及這題需不需要分組——而前者是機制、後者才是選擇。兩件事同章時，開場放哪一個沒有被解決，只是被排序繞過。</p>
<p><strong>功能型的章節維持原樣。</strong> 這條修法只適用於承擔選擇的那些章節，把它套到「這個子句做什麼」那一類會製造沒有必要的鋪陳。</p>
<h2 id="這些判定的輸入">這些判定的輸入</h2>
<p>上面每一條修法的最省力遵循方式都一樣：在腦中判一次，然後宣告通過。而<strong>那個判定認真做過與完全沒做，產物完全相同</strong>——判定又由知道答案的作者執行，所以「我判過了」不構成證據。每一條判定要留下它的輸入：</p>
<table>
  <thead>
      <tr>
          <th>判定</th>
          <th>要留下的輸入</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>「讀者讀到這裡手上有什麼」</td>
          <td>列出來：這一段之前，讀者從哪幾篇拿到哪幾個概念。列不出來就是還沒判</td>
      </tr>
      <tr>
          <td>源頭的一句話測試</td>
          <td>那句話交給沒讀過本模組的探針，問它「這句話裡有哪些詞你不知道指什麼」。作者自己判不了，因為他知道答案</td>
      </tr>
      <tr>
          <td>「這一章是功能型所以維持原樣」</td>
          <td>寫出這一章沒有並列兩種以上可替代的寫法。有並列就是選擇型，不論它同時是不是在解釋機制</td>
      </tr>
      <tr>
          <td>「問題用讀者的語言寫」</td>
          <td>問題句要有出處（實際的提問記錄），且句子裡不出現任何章節名裡的名詞。後者可以 grep</td>
      </tr>
      <tr>
          <td>「路由表已經補了」</td>
          <td>每一章至少被一個問題指到。這一條可以數</td>
      </tr>
      <tr>
          <td>篇幅與基本度的對照</td>
          <td>排名回升時要說明補進去的是走過資料的段落，不是任何字數</td>
      </tr>
  </tbody>
</table>
<p><strong>判定本身不是產物，判定用的材料才是。</strong> 沒有這些輸入的時候，最省力的路徑會沿著零後續動作的那個結論走——判成不適用、判成不需要補、判成功能型——因為那個結論不產出任何東西可供檢查。</p>
<h2 id="為什麼審查抓不到">為什麼審查抓不到</h2>
<p>缺口是一整節的缺席，而審查逐節檢查已經寫出來的東西。每一章都完整、正確、有判斷標準，合起來仍然缺一個入口——沒有任何一章可以被指出「這裡有問題」。</p>
<p>作者也不容易看到，因為他知道每個功能各自解什麼問題，所以那張對照表在他腦中已經存在。它只是沒有被寫下來。</p>
<h2 id="跟其他原則的關係">跟其他原則的關係</h2>
<ul>
<li><a href="../basics-anchor-the-advanced/">#305 基本功能衍生的問題不比進階議題簡單</a>：兩張卡都在講組織方式決定了什麼會缺席。那張卡的缺席是深度（基本的被帶過），本卡的缺席是入口（選擇沒有住址）。共同的成因是作者手上有讀者沒有的東西——那裡是熟悉度，這裡是功能與問題的對照表。</li>
<li><a href="../teach-judgment-not-procedure/">#209 教鑑別能力、不教操作流程</a>：那張卡要求文章交付判斷力，本卡指出判斷力在按功能組織的教材裡沒有落腳的位置。單章寫成判斷力導向仍然不夠——選擇發生在章與章之間。</li>
<li><a href="../teaching-module-needs-derivation-anchor/">#219 教學模組要有推導源頭、不是主題集合</a>：推導源頭讓各章折算得回同一個機制，而本卡管的是另一個方向——讀者從問題進來時走得到哪一章。源頭解決的是內容的一致性，路由解決的是入口。</li>
<li><a href="../concept-used-but-never-named/">#321 從名字出發的術語檢查，抓不到被反覆使用而從未命名的概念</a>：同一個成因的第三個缺席——#305 缺深度、本卡缺入口、那張卡缺名字。三者共用「作者手上有讀者沒有的東西」，而那裡作者有的是用法、沒有的是名字。</li>
<li><a href="../routing-destination-must-own-the-topic/">#240 路由目的地要承接該主題</a>：本卡新增的那一層路由同樣要過那張卡的驗收——問題對到的那一篇要真的承接它，而不只是主題相關。</li>
</ul>
<h2 id="判讀徵兆">判讀徵兆</h2>
<ul>
<li>章節的名字全部是被解釋的對象（子句名、API 名、功能名），沒有一章的名字是一個問題。</li>
<li>讀者的提問裡出現「我這樣寫犯了什麼錯」而不是「這個功能怎麼用」——他要的是選擇，而教材給的是說明。</li>
<li>模組入口只有成員清單與推導源頭，沒有一張表把問題對到成員。</li>
<li>某一章的開場是語法的比對，而那一章實際承擔的是「這幾種選哪一個」。</li>
</ul>
]]></content:encoded></item></channel></rss>