<?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>Software-Design on Tarragon</title><link>https://tarrragon.github.io/blog/tags/software-design/</link><description>Recent content in Software-Design on Tarragon</description><generator>Hugo -- gohugo.io</generator><language>zh-TW</language><copyright>Tarragon (CC BY 4.0)</copyright><lastBuildDate>Wed, 19 Aug 2026 00:00:00 +0800</lastBuildDate><atom:link href="https://tarrragon.github.io/blog/tags/software-design/index.xml" rel="self" type="application/rss+xml"/><item><title>設計判準與日常實踐</title><link>https://tarrragon.github.io/blog/books/craft/design-and-practice/</link><pubDate>Wed, 19 Aug 2026 00:00:00 +0800</pubDate><guid>https://tarrragon.github.io/blog/books/craft/design-and-practice/</guid><description>&lt;p>這個主題處理兩件在日常裡分不開的事：把程式寫成之後改得動的樣子，以及讓那件事持續發生的工作習慣。它們分不開的理由是設計判準要靠習慣才生效——知道模組該小、介面該深，跟每次動手時真的去想這件事，中間隔著一整套日常做法。&lt;/p>
&lt;p>三本書的差別在&lt;strong>密度與主張數&lt;/strong>，不在誰對誰錯：《The Pragmatic Programmer》列幾十條短原則、《A Philosophy of Software Design》用一條主張貫穿全書、《Code Complete》鋪成百科式的對照表。手上的問題越具體，越適合主張集中的《A Philosophy of Software Design》；想建立通盤基礎，才輪得到百科式的《Code Complete》。&lt;/p>
&lt;p>處境相容性這一項三本都查過，都沒有列出限制。它們的判準落在程式碼本身的形狀與個人的動手習慣上，成立與否不取決於組織有沒有職級制度、成員是不是同一個僱主、大家在不在同一個時區，也不受事故追責義務左右。這是全批唯一每一本都查過、而且每一本都沒有依賴的一篇——同一條技藝線上的另外三篇不是這樣，架構、驗證與改既有程式那三篇各自都有書預設了特定的組織條件。&lt;/p>
&lt;h2 id="起點是-the-pragmatic-programmer">起點是 The Pragmatic Programmer&lt;/h2>
&lt;p>Dave Thomas 與 Andy Hunt 的《The Pragmatic Programmer》把技藝拆成幾十條自成一段、互不依賴的實踐——從 DRY、正交性這種設計判準，到版本控制、純文字、自動化這種工具習慣，再到知識組合、除錯紀律這種職業態度——任何一條都可以單獨拿走用。條目多而彼此不相依，是它在本篇管得最寬、因此當起點的原因。&lt;/p>
&lt;p>它最常被引用的是 DRY，而它的原文比多數轉述嚴格：系統裡的每一項知識都必須有單一、明確、權威的表述。這句話管的不只是程式碼——業務規則、設定值、資料定義同樣算，而多數 DRY 的誤用是把它讀成「不要複製貼上」，於是把兩段長得像但會各自變動的程式硬合併，製造出更難改的耦合。&lt;/p>
&lt;p>另一條沒有被廣泛轉述的是曳光彈（tracer bullets）：先打通一條從頭到尾都會動的最細路徑，再逐段加厚。它跟原型的差別在於曳光彈的程式碼會留下來成為骨架，原型是用完就丟——搞混這兩者的團隊會把探索用的臨時程式碼帶進生產。&lt;/p>
&lt;p>20 週年版是大幅改寫過的，不是加註解的重印本，並補進了並行、actor model、property-based testing 與資安基礎。要買就買這一版。時效上，第一版綁的工具與環境（CVS、特定編輯器）在改版時清掉了；DRY、正交性、曳光彈、破窗理論這些主張不依賴任何工具世代。&lt;/p>
&lt;p>&lt;a href="https://tarrragon.github.io/blog/books/knowledge-cards/evidence-provenance/" data-link-title="證據來源分類（evidence provenance）" data-link-desc="手上兩本書講同一件事而結論不同、或要拿一本書去支持一個實際決定時，用來判斷它支持得了多大範圍的決定">證據來源&lt;/a>是跨客戶的顧問經驗，形式是格言加短例而非資料——這也決定了它的用法：拿來當檢查表對照自己的習慣，而不是拿去說服別人。&lt;/p>
&lt;p>這本書幾乎不需要前置準備，入行第一年就可以讀；而且每隔幾年重讀會讀出不同的東西，因為同一條原則在不同經驗量下對得上的情境不一樣。&lt;/p>
&lt;ul>
&lt;li>&lt;a href="https://www.amazon.com/Pragmatic-Programmer-journey-mastery-Anniversary/dp/0135957052">Amazon（The Pragmatic Programmer, 20th Anniversary Edition）&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://www.books.com.tw/products/0010856354">博客來（The Pragmatic Programmer 20 週年紀念版）&lt;/a>&lt;/li>
&lt;/ul>
&lt;h2 id="想把設計問題想清楚時讀-a-philosophy-of-software-design">想把設計問題想清楚時讀 A Philosophy of Software Design&lt;/h2>
&lt;p>John Ousterhout 的這本整本只推一個主張：&lt;strong>軟體設計的根本問題是控制複雜度&lt;/strong>，其餘的判準都從這一條長出來。這種寫法的好處是它給得出一個可以隨身帶的判準，而不是一份要背的清單。&lt;/p>
&lt;p>書中最可操作的是深模組（deep module）這個概念：好的模組是介面小而實作厚，壞的模組是介面跟實作一樣大。這條判準直接推翻了「函式應該盡量短」這種常見指導——把一個模組切成十個各自很淺的函式，介面總量反而變大，複雜度是上升的。另一組是紅旗清單（淺模組、資訊洩漏、時序分解、重複、註解重述程式碼），設計時可以逐條掃。&lt;/p>
&lt;p>它跟 Pragmatic Programmer 的關係是深度換廣度：那本列出有哪些事該做，這本把其中一件（怎麼切模組）挖到底。兩本一起讀不會重複。&lt;/p>
&lt;p>證據來源是單一路徑的個人經驗，而形態特別：素材來自作者多年開設軟體設計課的學生專案觀察，樣本受控但規模小、且偏向課堂專案，這是它跟業界顧問經驗不同的地方。作者是 Tcl 的作者、Stanford 教授。第二版於 2021 年出版，補了更多例子並回應了對第一版的批評。時效上沒有綁定任何工具世代。&lt;/p>
&lt;p>讀這本要先有一段維護經驗當對照：維護過自己或別人寫的東西超過半年，經歷過「當初這樣切好像不對」。沒有這個對照時，深模組會讀成一個偏好而不是判準——可以先讀《The Pragmatic Programmer》，等維護經驗累積起來再回來讀這本。&lt;/p>
&lt;p>繁體中文版查不到，簡體中文版《軟件設計的哲學》第二版由人民郵電出版社出版。&lt;/p>
&lt;ul>
&lt;li>&lt;a href="https://www.amazon.com/Philosophy-Software-Design-2nd/dp/173210221X">Amazon（A Philosophy of Software Design, 2nd Edition）&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://www.tenlong.com.tw/products/9787115655615">天瓏（軟件設計的哲學 2/e，簡體中文版）&lt;/a>&lt;/li>
&lt;/ul>
&lt;h2 id="要一份百科式的對照時讀-code-complete">要一份百科式的對照時讀 Code Complete&lt;/h2>
&lt;p>Steve McConnell 的《Code Complete》第二版是這個主題涵蓋面最大的一本，把建構期的每個決定都拆開處理：變數命名、迴圈結構、防禦性編程、程式碼佈局、審查方式。它跟前兩本的差別在於它不推銷單一主張，而是把當時能找到的研究與實務歸納整理成對照表。&lt;/p>
&lt;p>它的獨特之處是引用密度。多數技藝書的主張來自作者經驗，這本大量引用了實證研究——哪種審查方式抓到的缺陷比例較高、缺陷在哪個階段被發現的修復成本差幾倍，這類數字它會標出處。要拿數據去支持一個工程實踐的改變時，這本是站上少數能給引用來源的書。&lt;/p>
&lt;p>時效要分層看，而這本的分層特別明顯。&lt;strong>建構期的具體技術&lt;/strong>（那個年代的語言特性、命名慣例、程式碼佈局的爭論）大量過時，讀的時候會一直遇到已經不成立的例子；&lt;strong>它引用的實證研究&lt;/strong>多數停在 2004 年之前，後續二十年的研究沒有納入；而&lt;strong>它整理問題的方式&lt;/strong>——把每個建構決定拆成有哪些選項、各自的取捨是什麼——不依賴那些例子，那才是現在讀它的理由。&lt;/p>
&lt;p>證據來源是理論建構（把當時的實證文獻與實務歸納整理成對照表）加上單一路徑的個人經驗，是這個主題裡唯一有系統引用實證研究的一本。這本不適合通讀，適合遇到具體問題時當工具書查——需要的是查閱的耐心，經驗門檻反而不高。繁體中文版譯名《CODE COMPLETE 2 中文版：軟體開發實務指南》。&lt;/p>
&lt;ul>
&lt;li>&lt;a href="https://www.amazon.com/Code-Complete-Practical-Handbook-Construction/dp/0735619670">Amazon（Code Complete, Second Edition）&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://www.books.com.tw/products/0010805887">博客來（CODE COMPLETE 2 中文版：軟體開發實務指南，第二版）&lt;/a>&lt;/li>
&lt;/ul>
&lt;h2 id="為什麼只收這幾本">為什麼只收這幾本&lt;/h2>
&lt;p>同樣回答「怎麼寫得更好」，這三本的密度差一個量級：Pragmatic Programmer 廣而每條短，A Philosophy of Software Design 窄而挖到底，Code Complete 大而全。手上的問題越具體越往《A Philosophy of Software Design》走，想建立通盤基礎才輪到《Code Complete》。&lt;/p>
&lt;p>技藝類的書市極擁擠，而多數集中在兩個位置：特定語言的最佳實踐彙編，以及把某一套規則推銷成普適判準的書。前者屬於教學系列而非書單的責任範圍，後者的問題是規則脫離了推導它的取捨——分辨的方法是看它有沒有講清楚什麼情況下這條規則不適用，只給規則不給邊界的表示它把判斷收走了。&lt;/p>
&lt;p>Robert Martin 的《Clean Code》常被列在這個位置，本書單未評估它。它的部分主張（函式應該極短、註解是失敗的象徵）在近年受到相當多的技術批評，而判斷那些批評成不成立需要逐條對照原文與反方論證，這裡沒有做。要讀的話值得同時找反方的討論一起看，不要當成無爭議的標準。&lt;/p>
&lt;p>離收得進來最近的一門課是 MIT 的 6.005 Software Construction。大綱涵蓋規格、測試、抽象資料型別、物件導向設計模式、並行與函數式程式設計，跟本篇三本書重疊得最多，OpenCourseWare 上也放了考題、習題與程式作業——差的只有影音，而成因是那門課刻意不把課堂時間拿來講課（FAQ 自陳），因此沒有可錄的講課。&lt;strong>這不代表設計判準拍不出來&lt;/strong>，理由寫在 &lt;a href="../">工程技藝書單&lt;/a> 的公開課段。&lt;/p>
&lt;h2 id="這個主題接到哪裡">這個主題接到哪裡&lt;/h2>
&lt;p>設計判準要在既有程式碼上生效，靠的是改動的技術：手上有測試時怎麼移動結構、沒有測試時怎麼先弄出測試、以及小改動要不要現在做。那條路徑走 &lt;a href="../changing-existing-code/">改既有的程式&lt;/a>。&lt;/p>
&lt;p>寫得好而團隊切錯時，交付一樣會卡，那條路徑走 &lt;a href="../../software-management/topics/team-design/">組織結構與團隊設計&lt;/a>。想知道自己在職涯位置上該補什麼，走 &lt;a href="../../software-management/roles/">依位置選書&lt;/a>。&lt;/p>
&lt;p>各語言的具體寫法與慣例看 &lt;a href="https://tarrragon.github.io/blog/python/" data-link-title="Python 維護工程師實戰指南" data-link-desc="以 Hook 系統為範例的 Python 開發教學">Python 維護指南&lt;/a>、&lt;a href="https://tarrragon.github.io/blog/go/" data-link-title="Go 入門實戰指南" data-link-desc="理解 Go 語言精神與核心開發能力">Go 維護指南&lt;/a>、&lt;a href="https://tarrragon.github.io/blog/flutter/" data-link-title="Flutter 實戰指南" data-link-desc="Flutter 與 Dart 的實作層教材：型別設計與語言機制、狀態與渲染、測試策略、工具鏈，從實際專案 case 抽出判準。">Flutter 實戰指南&lt;/a>；測試怎麼分層與設計看 &lt;a href="https://tarrragon.github.io/blog/testing/" data-link-title="開發測試實務指南" data-link-desc="測試全過而實機全壞、或程式碼由 agent 產出而無法逐行讀時，用來決定驗證該掛在哪幾層、每一層各自守不住什麼">Testing 測試策略&lt;/a>。&lt;/p></description><content:encoded><![CDATA[<p>這個主題處理兩件在日常裡分不開的事：把程式寫成之後改得動的樣子，以及讓那件事持續發生的工作習慣。它們分不開的理由是設計判準要靠習慣才生效——知道模組該小、介面該深，跟每次動手時真的去想這件事，中間隔著一整套日常做法。</p>
<p>三本書的差別在<strong>密度與主張數</strong>，不在誰對誰錯：《The Pragmatic Programmer》列幾十條短原則、《A Philosophy of Software Design》用一條主張貫穿全書、《Code Complete》鋪成百科式的對照表。手上的問題越具體，越適合主張集中的《A Philosophy of Software Design》；想建立通盤基礎，才輪得到百科式的《Code Complete》。</p>
<p>處境相容性這一項三本都查過，都沒有列出限制。它們的判準落在程式碼本身的形狀與個人的動手習慣上，成立與否不取決於組織有沒有職級制度、成員是不是同一個僱主、大家在不在同一個時區，也不受事故追責義務左右。這是全批唯一每一本都查過、而且每一本都沒有依賴的一篇——同一條技藝線上的另外三篇不是這樣，架構、驗證與改既有程式那三篇各自都有書預設了特定的組織條件。</p>
<h2 id="起點是-the-pragmatic-programmer">起點是 The Pragmatic Programmer</h2>
<p>Dave Thomas 與 Andy Hunt 的《The Pragmatic Programmer》把技藝拆成幾十條自成一段、互不依賴的實踐——從 DRY、正交性這種設計判準，到版本控制、純文字、自動化這種工具習慣，再到知識組合、除錯紀律這種職業態度——任何一條都可以單獨拿走用。條目多而彼此不相依，是它在本篇管得最寬、因此當起點的原因。</p>
<p>它最常被引用的是 DRY，而它的原文比多數轉述嚴格：系統裡的每一項知識都必須有單一、明確、權威的表述。這句話管的不只是程式碼——業務規則、設定值、資料定義同樣算，而多數 DRY 的誤用是把它讀成「不要複製貼上」，於是把兩段長得像但會各自變動的程式硬合併，製造出更難改的耦合。</p>
<p>另一條沒有被廣泛轉述的是曳光彈（tracer bullets）：先打通一條從頭到尾都會動的最細路徑，再逐段加厚。它跟原型的差別在於曳光彈的程式碼會留下來成為骨架，原型是用完就丟——搞混這兩者的團隊會把探索用的臨時程式碼帶進生產。</p>
<p>20 週年版是大幅改寫過的，不是加註解的重印本，並補進了並行、actor model、property-based testing 與資安基礎。要買就買這一版。時效上，第一版綁的工具與環境（CVS、特定編輯器）在改版時清掉了；DRY、正交性、曳光彈、破窗理論這些主張不依賴任何工具世代。</p>
<p><a href="/blog/books/knowledge-cards/evidence-provenance/" data-link-title="證據來源分類（evidence provenance）" data-link-desc="手上兩本書講同一件事而結論不同、或要拿一本書去支持一個實際決定時，用來判斷它支持得了多大範圍的決定">證據來源</a>是跨客戶的顧問經驗，形式是格言加短例而非資料——這也決定了它的用法：拿來當檢查表對照自己的習慣，而不是拿去說服別人。</p>
<p>這本書幾乎不需要前置準備，入行第一年就可以讀；而且每隔幾年重讀會讀出不同的東西，因為同一條原則在不同經驗量下對得上的情境不一樣。</p>
<ul>
<li><a href="https://www.amazon.com/Pragmatic-Programmer-journey-mastery-Anniversary/dp/0135957052">Amazon（The Pragmatic Programmer, 20th Anniversary Edition）</a></li>
<li><a href="https://www.books.com.tw/products/0010856354">博客來（The Pragmatic Programmer 20 週年紀念版）</a></li>
</ul>
<h2 id="想把設計問題想清楚時讀-a-philosophy-of-software-design">想把設計問題想清楚時讀 A Philosophy of Software Design</h2>
<p>John Ousterhout 的這本整本只推一個主張：<strong>軟體設計的根本問題是控制複雜度</strong>，其餘的判準都從這一條長出來。這種寫法的好處是它給得出一個可以隨身帶的判準，而不是一份要背的清單。</p>
<p>書中最可操作的是深模組（deep module）這個概念：好的模組是介面小而實作厚，壞的模組是介面跟實作一樣大。這條判準直接推翻了「函式應該盡量短」這種常見指導——把一個模組切成十個各自很淺的函式，介面總量反而變大，複雜度是上升的。另一組是紅旗清單（淺模組、資訊洩漏、時序分解、重複、註解重述程式碼），設計時可以逐條掃。</p>
<p>它跟 Pragmatic Programmer 的關係是深度換廣度：那本列出有哪些事該做，這本把其中一件（怎麼切模組）挖到底。兩本一起讀不會重複。</p>
<p>證據來源是單一路徑的個人經驗，而形態特別：素材來自作者多年開設軟體設計課的學生專案觀察，樣本受控但規模小、且偏向課堂專案，這是它跟業界顧問經驗不同的地方。作者是 Tcl 的作者、Stanford 教授。第二版於 2021 年出版，補了更多例子並回應了對第一版的批評。時效上沒有綁定任何工具世代。</p>
<p>讀這本要先有一段維護經驗當對照：維護過自己或別人寫的東西超過半年，經歷過「當初這樣切好像不對」。沒有這個對照時，深模組會讀成一個偏好而不是判準——可以先讀《The Pragmatic Programmer》，等維護經驗累積起來再回來讀這本。</p>
<p>繁體中文版查不到，簡體中文版《軟件設計的哲學》第二版由人民郵電出版社出版。</p>
<ul>
<li><a href="https://www.amazon.com/Philosophy-Software-Design-2nd/dp/173210221X">Amazon（A Philosophy of Software Design, 2nd Edition）</a></li>
<li><a href="https://www.tenlong.com.tw/products/9787115655615">天瓏（軟件設計的哲學 2/e，簡體中文版）</a></li>
</ul>
<h2 id="要一份百科式的對照時讀-code-complete">要一份百科式的對照時讀 Code Complete</h2>
<p>Steve McConnell 的《Code Complete》第二版是這個主題涵蓋面最大的一本，把建構期的每個決定都拆開處理：變數命名、迴圈結構、防禦性編程、程式碼佈局、審查方式。它跟前兩本的差別在於它不推銷單一主張，而是把當時能找到的研究與實務歸納整理成對照表。</p>
<p>它的獨特之處是引用密度。多數技藝書的主張來自作者經驗，這本大量引用了實證研究——哪種審查方式抓到的缺陷比例較高、缺陷在哪個階段被發現的修復成本差幾倍，這類數字它會標出處。要拿數據去支持一個工程實踐的改變時，這本是站上少數能給引用來源的書。</p>
<p>時效要分層看，而這本的分層特別明顯。<strong>建構期的具體技術</strong>（那個年代的語言特性、命名慣例、程式碼佈局的爭論）大量過時，讀的時候會一直遇到已經不成立的例子；<strong>它引用的實證研究</strong>多數停在 2004 年之前，後續二十年的研究沒有納入；而<strong>它整理問題的方式</strong>——把每個建構決定拆成有哪些選項、各自的取捨是什麼——不依賴那些例子，那才是現在讀它的理由。</p>
<p>證據來源是理論建構（把當時的實證文獻與實務歸納整理成對照表）加上單一路徑的個人經驗，是這個主題裡唯一有系統引用實證研究的一本。這本不適合通讀，適合遇到具體問題時當工具書查——需要的是查閱的耐心，經驗門檻反而不高。繁體中文版譯名《CODE COMPLETE 2 中文版：軟體開發實務指南》。</p>
<ul>
<li><a href="https://www.amazon.com/Code-Complete-Practical-Handbook-Construction/dp/0735619670">Amazon（Code Complete, Second Edition）</a></li>
<li><a href="https://www.books.com.tw/products/0010805887">博客來（CODE COMPLETE 2 中文版：軟體開發實務指南，第二版）</a></li>
</ul>
<h2 id="為什麼只收這幾本">為什麼只收這幾本</h2>
<p>同樣回答「怎麼寫得更好」，這三本的密度差一個量級：Pragmatic Programmer 廣而每條短，A Philosophy of Software Design 窄而挖到底，Code Complete 大而全。手上的問題越具體越往《A Philosophy of Software Design》走，想建立通盤基礎才輪到《Code Complete》。</p>
<p>技藝類的書市極擁擠，而多數集中在兩個位置：特定語言的最佳實踐彙編，以及把某一套規則推銷成普適判準的書。前者屬於教學系列而非書單的責任範圍，後者的問題是規則脫離了推導它的取捨——分辨的方法是看它有沒有講清楚什麼情況下這條規則不適用，只給規則不給邊界的表示它把判斷收走了。</p>
<p>Robert Martin 的《Clean Code》常被列在這個位置，本書單未評估它。它的部分主張（函式應該極短、註解是失敗的象徵）在近年受到相當多的技術批評，而判斷那些批評成不成立需要逐條對照原文與反方論證，這裡沒有做。要讀的話值得同時找反方的討論一起看，不要當成無爭議的標準。</p>
<p>離收得進來最近的一門課是 MIT 的 6.005 Software Construction。大綱涵蓋規格、測試、抽象資料型別、物件導向設計模式、並行與函數式程式設計，跟本篇三本書重疊得最多，OpenCourseWare 上也放了考題、習題與程式作業——差的只有影音，而成因是那門課刻意不把課堂時間拿來講課（FAQ 自陳），因此沒有可錄的講課。<strong>這不代表設計判準拍不出來</strong>，理由寫在 <a href="../">工程技藝書單</a> 的公開課段。</p>
<h2 id="這個主題接到哪裡">這個主題接到哪裡</h2>
<p>設計判準要在既有程式碼上生效，靠的是改動的技術：手上有測試時怎麼移動結構、沒有測試時怎麼先弄出測試、以及小改動要不要現在做。那條路徑走 <a href="../changing-existing-code/">改既有的程式</a>。</p>
<p>寫得好而團隊切錯時，交付一樣會卡，那條路徑走 <a href="../../software-management/topics/team-design/">組織結構與團隊設計</a>。想知道自己在職涯位置上該補什麼，走 <a href="../../software-management/roles/">依位置選書</a>。</p>
<p>各語言的具體寫法與慣例看 <a href="/blog/python/" data-link-title="Python 維護工程師實戰指南" data-link-desc="以 Hook 系統為範例的 Python 開發教學">Python 維護指南</a>、<a href="/blog/go/" data-link-title="Go 入門實戰指南" data-link-desc="理解 Go 語言精神與核心開發能力">Go 維護指南</a>、<a href="/blog/flutter/" data-link-title="Flutter 實戰指南" data-link-desc="Flutter 與 Dart 的實作層教材：型別設計與語言機制、狀態與渲染、測試策略、工具鏈，從實際專案 case 抽出判準。">Flutter 實戰指南</a>；測試怎麼分層與設計看 <a href="/blog/testing/" data-link-title="開發測試實務指南" data-link-desc="測試全過而實機全壞、或程式碼由 agent 產出而無法逐行讀時，用來決定驗證該掛在哪幾層、每一層各自守不住什麼">Testing 測試策略</a>。</p>
]]></content:encoded></item><item><title>工程技藝書單</title><link>https://tarrragon.github.io/blog/books/craft/</link><pubDate>Wed, 19 Aug 2026 00:00:00 +0800</pubDate><guid>https://tarrragon.github.io/blog/books/craft/</guid><description>&lt;p>這條線處理的是&lt;strong>一個人怎麼把軟體寫好、改好、維持得住&lt;/strong>。它跟 &lt;a href="../software-management/">軟體管理與組織&lt;/a> 的分界在決定的對象：那條線的決定落在人與制度上，這條線的決定落在產物上。分界不落在「有沒有離開編輯器」——系統架構那篇的取捨要跨越團隊、資料與既有承諾，代價有一半落在組織上，但被決定的仍然是系統長什麼形狀。另有一條線 &lt;a href="../finance/">財務與投資&lt;/a> 的決定落在自己的錢上，跟這裡不共用讀者位置。各線為什麼按這個軸分開，說明在 &lt;a href="https://tarrragon.github.io/blog/books/" data-link-title="書單推薦" data-link-desc="站在某個職涯位置、想知道該讀哪本工具書，想往別的位置移動而不知道該預習什麼，或因為閱讀障礙與外語閱讀速度而需要同一份知識換成用聽的時看這裡">書單推薦&lt;/a> 的「書單線」段。&lt;/p>
&lt;p>書的描述沿用同一套維度（&lt;a href="https://tarrragon.github.io/blog/books/knowledge-cards/evidence-provenance/" data-link-title="證據來源分類（evidence provenance）" data-link-desc="手上兩本書講同一件事而結論不同、或要拿一本書去支持一個實際決定時，用來判斷它支持得了多大範圍的決定">證據來源&lt;/a>、時效狀態、&lt;a href="https://tarrragon.github.io/blog/books/knowledge-cards/context-compatibility/" data-link-title="處境相容性（context compatibility）" data-link-desc="一本書或一套做法讀起來都對、換算到自己的組織卻沒有一條動得了時，用來定位缺的是哪一個環境條件">處境相容性&lt;/a>、讀得出價值的前提），定義與這些判定的來源說明在 &lt;a href="https://tarrragon.github.io/blog/books/" data-link-title="書單推薦" data-link-desc="站在某個職涯位置、想知道該讀哪本工具書，想往別的位置移動而不知道該預習什麼，或因為閱讀障礙與外語閱讀速度而需要同一份知識換成用聽的時看這裡">書單推薦&lt;/a>。這四篇的起點書用的也是同一組判準（涵蓋面優先、其次證據來源夠不夠支持那個用途、再其次可操作性），判準寫在 &lt;a href="../software-management/topics/">主題書單&lt;/a> 的「起點書怎麼選出來的」段。驗證那篇是唯一的例外：它的起點取 Beck，理由是後面兩本都在跟它對話，那條「歷史先行性」不在三層判準裡。&lt;/p>
&lt;h2 id="這條線特別要注意時效">這條線特別要注意時效&lt;/h2>
&lt;p>技藝類的書比管理類更容易局部過時，因為它們的例子綁在語言、工具與當時的工程環境上。判斷方式不變——問這一段的論證依賴什麼前提——但套用時要多分一層：&lt;strong>主張本身&lt;/strong>（模組該怎麼切、重複意味著什麼）通常比&lt;strong>示範它的程式碼&lt;/strong>活得久。看到過時的語法不要連著把主張一起丟掉，那是這類書最常見的誤判。&lt;/p>
&lt;p>反過來也成立：一本書的示範用了最新的語言特性，不代表它的主張比較新。&lt;/p>
&lt;h2 id="主題">主題&lt;/h2>
&lt;table>
 &lt;thead>
 &lt;tr>
 &lt;th>主題&lt;/th>
 &lt;th>承擔的問題&lt;/th>
 &lt;th>起點書&lt;/th>
 &lt;/tr>
 &lt;/thead>
 &lt;tbody>
 &lt;tr>
 &lt;td>&lt;a href="design-and-practice/">設計判準與日常實踐&lt;/a>&lt;/td>
 &lt;td>怎麼寫出改得動的程式、日常工作該有哪些習慣&lt;/td>
 &lt;td>The Pragmatic Programmer&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;a href="changing-existing-code/">改既有的程式&lt;/a>&lt;/td>
 &lt;td>要動一段自己沒寫的、或沒有測試保護的程式碼&lt;/td>
 &lt;td>Refactoring&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;a href="system-architecture/">系統架構&lt;/a>&lt;/td>
 &lt;td>整個系統該長什麼形狀、拆分時每個選項的代價&lt;/td>
 &lt;td>Fundamentals of Software Architecture&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;a href="verification/">驗證自己寫對了&lt;/a>&lt;/td>
 &lt;td>該測到什麼程度、這裡到底該不該 mock&lt;/td>
 &lt;td>Test-Driven Development: By Example&lt;/td>
 &lt;/tr>
 &lt;/tbody>
&lt;/table>
&lt;h2 id="三個主題其實是同一組概念在三個尺度上運作">三個主題其實是同一組概念在三個尺度上運作&lt;/h2>
&lt;p>這條線有四個主題，其中三個排在同一道刻度上。耦合與內聚這兩個概念貫穿它們，只是作用的範圍不同。Kent Beck 用它們算「這幾行現在要不要整理」，Ousterhout 用它們判斷「這個模組的介面該多深」，Richards 與 Ford 在元件層用同一組概念談切分與粒度。三個主題不是三種學問，是同一把尺在三個刻度上讀。這道刻度上的三本跟各篇的起點書只有一本重疊：架構那一層兩者都是 Richards 與 Ford，另外兩層不同——照起點書走的讀者在最小尺度落到的是 Fowler 而不是 Beck，在模組尺度落到的是 Pragmatic Programmer 而不是 Ousterhout。那兩本各自是所屬主題涵蓋面最廣的入口，而不是這把尺的刻度。要看這把尺，最小與模組兩層直接取 Beck 與 Ousterhout。&lt;/p>
&lt;p>知道這件事有一個實用後果：&lt;strong>換尺度是一種可以主動做的判斷&lt;/strong>。同一類問題反覆出現而每次都在原尺度處理，通常代表問題不在那一層——整理這段程式碼整理了五次而它還是難改，該往上看模組邊界；模組怎麼切都不對，該往上看系統的責任分配；而系統怎麼切都有人抱怨，那可能已經不是技術問題，走 &lt;a href="../software-management/topics/team-design/">組織結構與團隊設計&lt;/a>。&lt;/p>
&lt;p>反過來也成立。架構圖畫得再乾淨，落到每次修改仍然要有人決定先整理還是後整理，而那個決定沒有架構層的答案。&lt;/p>
&lt;p>&lt;a href="verification/">驗證自己寫對了&lt;/a> 不在這道刻度上，它是橫跨三個尺度的另一軸——每個尺度都要回答「我怎麼知道自己沒弄壞」，而那個問題在一次修改、模組邊界與系統拆分上會得到不同的答案。&lt;/p>
&lt;h2 id="這條線不做角色分眾">這條線不做角色分眾&lt;/h2>
&lt;p>管理那條線按讀者對什麼負責分成五個位置，這條線刻意不做同樣的事，理由是技藝問題跟職涯位置的相關性遠低於管理問題。&lt;/p>
&lt;p>資深工程師與剛入行的人在重構同一段程式碼時，需要的是同一本書；差別在讀得出多少，而那個差別已經寫在每本書的「讀得出價值的前提」裡，不需要再開一層路由承接。更根本的是這條線的主題本身就是分眾機制——讀者依當下在做什麼自己選尺度（我正在改這幾行、我在切模組、我在決定系統形狀），而那個選擇比職稱準確得多：同一個人在同一週可能三個尺度都碰到。&lt;/p>
&lt;p>因此這條線的入口是主題表，不是位置表。要按職涯位置選書的讀者，那條路在 &lt;a href="../software-management/roles/">依位置選書&lt;/a>，而那五篇也會在需要技藝內容時指過來。&lt;/p>
&lt;h2 id="四個主題裡只有系統架構接得住公開課">四個主題裡只有系統架構接得住公開課&lt;/h2>
&lt;p>讀不動長篇文字時，同一份知識的影音路徑由公開課承接，收錄門檻寫在 &lt;a href="https://tarrragon.github.io/blog/books/" data-link-title="書單推薦" data-link-desc="站在某個職涯位置、想知道該讀哪本工具書，想往別的位置移動而不知道該預習什麼，或因為閱讀障礙與外語閱讀速度而需要同一份知識換成用聽的時看這裡">書單推薦&lt;/a> 的「公開課怎麼收」段。這條線套用那兩條之後，接得住的只有 &lt;a href="system-architecture/">系統架構&lt;/a>，另外三個主題都沒查到，而它們空著的理由各自不同，寫在各篇的「為什麼只收這幾本」段內。這條線與 &lt;a href="../finance/">財務與投資&lt;/a> 的差別在沒查到的主題數：那條線四篇都有課，所以它不需要這樣一段線層說明，各篇自己交代就夠。&lt;/p>
&lt;p>那三個主題的共同點只到觀察為止：跟它們最相關的學院課都只有文字材料。這裡不往下推論知識類型，因為最順的那個推論站不住。順的推論是「判準沒有可以對答案的形式，所以進不了以作業與考試為骨架的課程」，而 MIT 的 6.005 Software Construction 直接否證它——大綱涵蓋規格、測試、抽象資料型別、物件導向設計模式、並行與函數式程式設計，跟這條線的設計判準重疊得最多，而它在 OpenCourseWare 上放的資源是考題、考題解答、習題與程式作業，判準出得了題也評得了分。它缺的只有影片，成因與知識類型無關：課程的 FAQ 自陳刻意不把課堂時間花在講課上，改成課前讀、課堂做練習，於是沒有可錄的講課。&lt;/p>
&lt;p>更廣的反例在同一所學校：Sloan 的 15.401 Finance Theory I（2008）與 15.S50 Poker Theory and Analytics（2015）都有完整的 lecture videos，可見同院同期的判斷型題材拍得出來。所以能說的只有結果——對讀不動文字的人，這三個主題目前沒有影音路徑——而成因逐篇不同，寫在各篇自己的收錄段。管理線那邊把同一件事分成三類成因（見 &lt;a href="../software-management/topics/">主題書單&lt;/a> 的公開課段），這條線對得上其中兩類：設計判準是「學院有課、只是沒有影片」，驗證是「市場供給充足而形態不對」；改既有的程式對不上任何一類，那正是這裡不往下推論的部分。&lt;/p>
&lt;p>市場那一側的供給充足而問的問題不同。以軟體測試或軟體工程為題的公開課數量不少，2026 年 8 月這一輪查到的多半是職涯訓練與面試準備，它們交付的是怎麼當一個測試工程師；驗證那一篇要交付的是三本書彼此不同意在哪。驗證那個主題因此不是被本質恆定那一條擋下來的——它是搜到的那些課與該主題不在同一層，逐篇的說明在各篇自己的收錄段。&lt;/p>
&lt;p>中文側的落差落在更前面一段。台大開放式課程的 &lt;a href="https://ocw.aca.ntu.edu.tw/courses/111S107">程式設計&lt;/a>（孔令傑，資訊管理學系，15 講，C++）教的是寫得出程式，課程頁自陳不預設任何程式背景，目標是讓學生之後能自學任何一種語言；這條線的四本起點書都預設讀者已經寫過一陣子程式，所以它落在這條線的入口之前而不在線上。程式經驗還沒建立起來的讀者從那裡開始，&lt;a href="https://www.youtube.com/playlist?list=PLCX-BLZ1hDpBuSFO8-TtF_q5QlBfeb6Q0">YouTube 播放清單&lt;/a> 有全部 15 講。&lt;/p>
&lt;h2 id="跟教學系列的邊界">跟教學系列的邊界&lt;/h2>
&lt;p>書單給選讀判斷，實作在教學系列：各語言的寫法與慣例看 &lt;a href="https://tarrragon.github.io/blog/python/" data-link-title="Python 維護工程師實戰指南" data-link-desc="以 Hook 系統為範例的 Python 開發教學">Python&lt;/a>、&lt;a href="https://tarrragon.github.io/blog/go/" data-link-title="Go 入門實戰指南" data-link-desc="理解 Go 語言精神與核心開發能力">Go&lt;/a>、&lt;a href="https://tarrragon.github.io/blog/flutter/" data-link-title="Flutter 實戰指南" data-link-desc="Flutter 與 Dart 的實作層教材：型別設計與語言機制、狀態與渲染、測試策略、工具鏈，從實際專案 case 抽出判準。">Flutter&lt;/a>，測試分層與 mock 判斷看 &lt;a href="https://tarrragon.github.io/blog/testing/" data-link-title="開發測試實務指南" data-link-desc="測試全過而實機全壞、或程式碼由 agent 產出而無法逐行讀時，用來決定驗證該掛在哪幾層、每一層各自守不住什麼">Testing 測試策略&lt;/a>，領域模型的切法看 &lt;a href="https://tarrragon.github.io/blog/ddd/" data-link-title="DDD 領域驅動設計指南" data-link-desc="領域模型的理論與判準層：一袋欄位還是領域模型、什麼時候值得建 entity、不變式該落在哪一層強制、狀態轉換怎麼留下稽核軌跡、建構路徑怎麼設計。語言無關，實作限制路由到各語言模組。">DDD 領域驅動設計指南&lt;/a>。&lt;/p>
&lt;h2 id="backlog">Backlog&lt;/h2>
&lt;table>
 &lt;thead>
 &lt;tr>
 &lt;th>項目&lt;/th>
 &lt;th>類型&lt;/th>
 &lt;th>前置條件&lt;/th>
 &lt;th>規模&lt;/th>
 &lt;/tr>
 &lt;/thead>
 &lt;tbody>
 &lt;tr>
 &lt;td>Open Yale Courses 四十門逐門判定&lt;/td>
 &lt;td>案例&lt;/td>
 &lt;td>該站規模可窮盡，這一輪只按主題名取用；逐門過完才能把「沒查到」升級成「枚舉後沒有」&lt;/td>
 &lt;td>1 次&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>沒查到課的三個主題重掃一次&lt;/td>
 &lt;td>案例&lt;/td>
 &lt;td>2027 年 8 月之後重跑，判準是本質恆定加實際有影音&lt;/td>
 &lt;td>1 次&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>設計判準這個主題改判&lt;/td>
 &lt;td>主章&lt;/td>
 &lt;td>MIT 6.005 補上影音，或找到另一門教設計判準而有影音的課；沒有人會主動去看，實際觸發點是 2027 年那次重掃&lt;/td>
 &lt;td>1 段&lt;/td>
 &lt;/tr>
 &lt;/tbody>
&lt;/table></description><content:encoded><![CDATA[<p>這條線處理的是<strong>一個人怎麼把軟體寫好、改好、維持得住</strong>。它跟 <a href="../software-management/">軟體管理與組織</a> 的分界在決定的對象：那條線的決定落在人與制度上，這條線的決定落在產物上。分界不落在「有沒有離開編輯器」——系統架構那篇的取捨要跨越團隊、資料與既有承諾，代價有一半落在組織上，但被決定的仍然是系統長什麼形狀。另有一條線 <a href="../finance/">財務與投資</a> 的決定落在自己的錢上，跟這裡不共用讀者位置。各線為什麼按這個軸分開，說明在 <a href="/blog/books/" data-link-title="書單推薦" data-link-desc="站在某個職涯位置、想知道該讀哪本工具書，想往別的位置移動而不知道該預習什麼，或因為閱讀障礙與外語閱讀速度而需要同一份知識換成用聽的時看這裡">書單推薦</a> 的「書單線」段。</p>
<p>書的描述沿用同一套維度（<a href="/blog/books/knowledge-cards/evidence-provenance/" data-link-title="證據來源分類（evidence provenance）" data-link-desc="手上兩本書講同一件事而結論不同、或要拿一本書去支持一個實際決定時，用來判斷它支持得了多大範圍的決定">證據來源</a>、時效狀態、<a href="/blog/books/knowledge-cards/context-compatibility/" data-link-title="處境相容性（context compatibility）" data-link-desc="一本書或一套做法讀起來都對、換算到自己的組織卻沒有一條動得了時，用來定位缺的是哪一個環境條件">處境相容性</a>、讀得出價值的前提），定義與這些判定的來源說明在 <a href="/blog/books/" data-link-title="書單推薦" data-link-desc="站在某個職涯位置、想知道該讀哪本工具書，想往別的位置移動而不知道該預習什麼，或因為閱讀障礙與外語閱讀速度而需要同一份知識換成用聽的時看這裡">書單推薦</a>。這四篇的起點書用的也是同一組判準（涵蓋面優先、其次證據來源夠不夠支持那個用途、再其次可操作性），判準寫在 <a href="../software-management/topics/">主題書單</a> 的「起點書怎麼選出來的」段。驗證那篇是唯一的例外：它的起點取 Beck，理由是後面兩本都在跟它對話，那條「歷史先行性」不在三層判準裡。</p>
<h2 id="這條線特別要注意時效">這條線特別要注意時效</h2>
<p>技藝類的書比管理類更容易局部過時，因為它們的例子綁在語言、工具與當時的工程環境上。判斷方式不變——問這一段的論證依賴什麼前提——但套用時要多分一層：<strong>主張本身</strong>（模組該怎麼切、重複意味著什麼）通常比<strong>示範它的程式碼</strong>活得久。看到過時的語法不要連著把主張一起丟掉，那是這類書最常見的誤判。</p>
<p>反過來也成立：一本書的示範用了最新的語言特性，不代表它的主張比較新。</p>
<h2 id="主題">主題</h2>
<table>
  <thead>
      <tr>
          <th>主題</th>
          <th>承擔的問題</th>
          <th>起點書</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td><a href="design-and-practice/">設計判準與日常實踐</a></td>
          <td>怎麼寫出改得動的程式、日常工作該有哪些習慣</td>
          <td>The Pragmatic Programmer</td>
      </tr>
      <tr>
          <td><a href="changing-existing-code/">改既有的程式</a></td>
          <td>要動一段自己沒寫的、或沒有測試保護的程式碼</td>
          <td>Refactoring</td>
      </tr>
      <tr>
          <td><a href="system-architecture/">系統架構</a></td>
          <td>整個系統該長什麼形狀、拆分時每個選項的代價</td>
          <td>Fundamentals of Software Architecture</td>
      </tr>
      <tr>
          <td><a href="verification/">驗證自己寫對了</a></td>
          <td>該測到什麼程度、這裡到底該不該 mock</td>
          <td>Test-Driven Development: By Example</td>
      </tr>
  </tbody>
</table>
<h2 id="三個主題其實是同一組概念在三個尺度上運作">三個主題其實是同一組概念在三個尺度上運作</h2>
<p>這條線有四個主題，其中三個排在同一道刻度上。耦合與內聚這兩個概念貫穿它們，只是作用的範圍不同。Kent Beck 用它們算「這幾行現在要不要整理」，Ousterhout 用它們判斷「這個模組的介面該多深」，Richards 與 Ford 在元件層用同一組概念談切分與粒度。三個主題不是三種學問，是同一把尺在三個刻度上讀。這道刻度上的三本跟各篇的起點書只有一本重疊：架構那一層兩者都是 Richards 與 Ford，另外兩層不同——照起點書走的讀者在最小尺度落到的是 Fowler 而不是 Beck，在模組尺度落到的是 Pragmatic Programmer 而不是 Ousterhout。那兩本各自是所屬主題涵蓋面最廣的入口，而不是這把尺的刻度。要看這把尺，最小與模組兩層直接取 Beck 與 Ousterhout。</p>
<p>知道這件事有一個實用後果：<strong>換尺度是一種可以主動做的判斷</strong>。同一類問題反覆出現而每次都在原尺度處理，通常代表問題不在那一層——整理這段程式碼整理了五次而它還是難改，該往上看模組邊界；模組怎麼切都不對，該往上看系統的責任分配；而系統怎麼切都有人抱怨，那可能已經不是技術問題，走 <a href="../software-management/topics/team-design/">組織結構與團隊設計</a>。</p>
<p>反過來也成立。架構圖畫得再乾淨，落到每次修改仍然要有人決定先整理還是後整理，而那個決定沒有架構層的答案。</p>
<p><a href="verification/">驗證自己寫對了</a> 不在這道刻度上，它是橫跨三個尺度的另一軸——每個尺度都要回答「我怎麼知道自己沒弄壞」，而那個問題在一次修改、模組邊界與系統拆分上會得到不同的答案。</p>
<h2 id="這條線不做角色分眾">這條線不做角色分眾</h2>
<p>管理那條線按讀者對什麼負責分成五個位置，這條線刻意不做同樣的事，理由是技藝問題跟職涯位置的相關性遠低於管理問題。</p>
<p>資深工程師與剛入行的人在重構同一段程式碼時，需要的是同一本書；差別在讀得出多少，而那個差別已經寫在每本書的「讀得出價值的前提」裡，不需要再開一層路由承接。更根本的是這條線的主題本身就是分眾機制——讀者依當下在做什麼自己選尺度（我正在改這幾行、我在切模組、我在決定系統形狀），而那個選擇比職稱準確得多：同一個人在同一週可能三個尺度都碰到。</p>
<p>因此這條線的入口是主題表，不是位置表。要按職涯位置選書的讀者，那條路在 <a href="../software-management/roles/">依位置選書</a>，而那五篇也會在需要技藝內容時指過來。</p>
<h2 id="四個主題裡只有系統架構接得住公開課">四個主題裡只有系統架構接得住公開課</h2>
<p>讀不動長篇文字時，同一份知識的影音路徑由公開課承接，收錄門檻寫在 <a href="/blog/books/" data-link-title="書單推薦" data-link-desc="站在某個職涯位置、想知道該讀哪本工具書，想往別的位置移動而不知道該預習什麼，或因為閱讀障礙與外語閱讀速度而需要同一份知識換成用聽的時看這裡">書單推薦</a> 的「公開課怎麼收」段。這條線套用那兩條之後，接得住的只有 <a href="system-architecture/">系統架構</a>，另外三個主題都沒查到，而它們空著的理由各自不同，寫在各篇的「為什麼只收這幾本」段內。這條線與 <a href="../finance/">財務與投資</a> 的差別在沒查到的主題數：那條線四篇都有課，所以它不需要這樣一段線層說明，各篇自己交代就夠。</p>
<p>那三個主題的共同點只到觀察為止：跟它們最相關的學院課都只有文字材料。這裡不往下推論知識類型，因為最順的那個推論站不住。順的推論是「判準沒有可以對答案的形式，所以進不了以作業與考試為骨架的課程」，而 MIT 的 6.005 Software Construction 直接否證它——大綱涵蓋規格、測試、抽象資料型別、物件導向設計模式、並行與函數式程式設計，跟這條線的設計判準重疊得最多，而它在 OpenCourseWare 上放的資源是考題、考題解答、習題與程式作業，判準出得了題也評得了分。它缺的只有影片，成因與知識類型無關：課程的 FAQ 自陳刻意不把課堂時間花在講課上，改成課前讀、課堂做練習，於是沒有可錄的講課。</p>
<p>更廣的反例在同一所學校：Sloan 的 15.401 Finance Theory I（2008）與 15.S50 Poker Theory and Analytics（2015）都有完整的 lecture videos，可見同院同期的判斷型題材拍得出來。所以能說的只有結果——對讀不動文字的人，這三個主題目前沒有影音路徑——而成因逐篇不同，寫在各篇自己的收錄段。管理線那邊把同一件事分成三類成因（見 <a href="../software-management/topics/">主題書單</a> 的公開課段），這條線對得上其中兩類：設計判準是「學院有課、只是沒有影片」，驗證是「市場供給充足而形態不對」；改既有的程式對不上任何一類，那正是這裡不往下推論的部分。</p>
<p>市場那一側的供給充足而問的問題不同。以軟體測試或軟體工程為題的公開課數量不少，2026 年 8 月這一輪查到的多半是職涯訓練與面試準備，它們交付的是怎麼當一個測試工程師；驗證那一篇要交付的是三本書彼此不同意在哪。驗證那個主題因此不是被本質恆定那一條擋下來的——它是搜到的那些課與該主題不在同一層，逐篇的說明在各篇自己的收錄段。</p>
<p>中文側的落差落在更前面一段。台大開放式課程的 <a href="https://ocw.aca.ntu.edu.tw/courses/111S107">程式設計</a>（孔令傑，資訊管理學系，15 講，C++）教的是寫得出程式，課程頁自陳不預設任何程式背景，目標是讓學生之後能自學任何一種語言；這條線的四本起點書都預設讀者已經寫過一陣子程式，所以它落在這條線的入口之前而不在線上。程式經驗還沒建立起來的讀者從那裡開始，<a href="https://www.youtube.com/playlist?list=PLCX-BLZ1hDpBuSFO8-TtF_q5QlBfeb6Q0">YouTube 播放清單</a> 有全部 15 講。</p>
<h2 id="跟教學系列的邊界">跟教學系列的邊界</h2>
<p>書單給選讀判斷，實作在教學系列：各語言的寫法與慣例看 <a href="/blog/python/" data-link-title="Python 維護工程師實戰指南" data-link-desc="以 Hook 系統為範例的 Python 開發教學">Python</a>、<a href="/blog/go/" data-link-title="Go 入門實戰指南" data-link-desc="理解 Go 語言精神與核心開發能力">Go</a>、<a href="/blog/flutter/" data-link-title="Flutter 實戰指南" data-link-desc="Flutter 與 Dart 的實作層教材：型別設計與語言機制、狀態與渲染、測試策略、工具鏈，從實際專案 case 抽出判準。">Flutter</a>，測試分層與 mock 判斷看 <a href="/blog/testing/" data-link-title="開發測試實務指南" data-link-desc="測試全過而實機全壞、或程式碼由 agent 產出而無法逐行讀時，用來決定驗證該掛在哪幾層、每一層各自守不住什麼">Testing 測試策略</a>，領域模型的切法看 <a href="/blog/ddd/" data-link-title="DDD 領域驅動設計指南" data-link-desc="領域模型的理論與判準層：一袋欄位還是領域模型、什麼時候值得建 entity、不變式該落在哪一層強制、狀態轉換怎麼留下稽核軌跡、建構路徑怎麼設計。語言無關，實作限制路由到各語言模組。">DDD 領域驅動設計指南</a>。</p>
<h2 id="backlog">Backlog</h2>
<table>
  <thead>
      <tr>
          <th>項目</th>
          <th>類型</th>
          <th>前置條件</th>
          <th>規模</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>Open Yale Courses 四十門逐門判定</td>
          <td>案例</td>
          <td>該站規模可窮盡，這一輪只按主題名取用；逐門過完才能把「沒查到」升級成「枚舉後沒有」</td>
          <td>1 次</td>
      </tr>
      <tr>
          <td>沒查到課的三個主題重掃一次</td>
          <td>案例</td>
          <td>2027 年 8 月之後重跑，判準是本質恆定加實際有影音</td>
          <td>1 次</td>
      </tr>
      <tr>
          <td>設計判準這個主題改判</td>
          <td>主章</td>
          <td>MIT 6.005 補上影音，或找到另一門教設計判準而有影音的課；沒有人會主動去看，實際觸發點是 2027 年那次重掃</td>
          <td>1 段</td>
      </tr>
  </tbody>
</table>
]]></content:encoded></item></channel></rss>