<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>逻辑学 on 方糖猫Blog</title>
    <link>https://ftmao.com/blog/categories/%E9%80%BB%E8%BE%91%E5%AD%A6/</link>
    <description>AI 视频、AI Agent 与工程实践笔记</description>
    <generator>Hugo</generator>
    <language>zh-CN</language>
    <lastBuildDate>Wed, 09 Nov 2022 09:30:00 +0800</lastBuildDate><atom:link href="https://ftmao.com/blog/categories/%E9%80%BB%E8%BE%91%E5%AD%A6/index.xml" rel="self" type="application/rss+xml" /><item>
      <title>《简单逻辑学》读书笔记：程序员最需要补的一门课，从四个基本原理到谬误识别实战</title>
      <link>https://ftmao.com/blog/posts/being-logical-book-notes/</link>
      <pubDate>Wed, 09 Nov 2022 09:30:00 +0800</pubDate>
      <guid>https://ftmao.com/blog/posts/being-logical-book-notes/</guid>
      <description>&lt;h1 id=&#34;简单逻辑学读书笔记程序员最需要补的一门课从四个基本原理到谬误识别实战&#34;&gt;《简单逻辑学》读书笔记：程序员最需要补的一门课，从四个基本原理到谬误识别实战&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;D.Q.麦克伦尼（D.Q. McInerny），美国哲学家，《简单逻辑学》（&lt;em&gt;Being Logical: A Guide to Good Thinking&lt;/em&gt;）是他写给普通人的逻辑学入门书，全书只有 130 来页，没有符号逻辑公式，全是&amp;quot;怎么想才对&amp;quot;的基本功。
为什么一个程序员要读这个？因为我们每天做的事情——写代码、评审方案、排查故障、和产品经理吵架——本质上全是逻辑活动。而大部分工程师（包括曾经的我）从未系统学过一天逻辑，全靠本能硬扛。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id=&#34;0-全书结构五层楼&#34;&gt;0. 全书结构：五层楼&lt;/h2&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;button class=&#34;code-copy&#34; type=&#34;button&#34; hidden aria-label=&#34;Copy code to clipboard&#34;&gt;
      &lt;span class=&#34;code-copy-label&#34; aria-hidden=&#34;true&#34;&gt;Copy&lt;/span&gt;
    &lt;/button&gt;
    &lt;pre tabindex=&#34;0&#34;&gt;&lt;code class=&#34;language-mermaid&#34; data-lang=&#34;mermaid&#34;&gt;flowchart TB
    L1[&amp;#34;第一层 学习逻辑的思想准备&amp;lt;br/&amp;gt;全神贯注 / 确认事实 / 观念要对应对象 / 语言要匹配观念&amp;#34;]
    L2[&amp;#34;第二层 逻辑学的基本原理&amp;lt;br/&amp;gt;同一律 / 排中律 / 矛盾律 / 充足理由律&amp;#34;]
    L3[&amp;#34;第三层 论证：逻辑学的语言&amp;lt;br/&amp;gt;命题 / 前提与结论 / 演绎与归纳 / 有效与真实&amp;#34;]
    L4[&amp;#34;第四层 非逻辑思维的根源&amp;lt;br/&amp;gt;怀疑论 / 玩世不恭 / 盲目乐观 / 眼界狭窄 / 情感&amp;#34;]
    L5[&amp;#34;第五层 非逻辑思维的主要形式&amp;lt;br/&amp;gt;28 种谬误大全&amp;#34;]
    L1 --&amp;gt; L2 --&amp;gt; L3 --&amp;gt; L4 --&amp;gt; L5
    style L2 fill:#ffd699
    style L5 fill:#ffcccc&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;&lt;p&gt;麦克伦尼的讲法是先盖楼（一到三层，什么是&amp;quot;对&amp;quot;），再拆楼（四五层，人是怎么想错的）。我按同样的顺序记，但每一层都配上程序员场景——否则读完三天就还回去了。&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&#34;1-第一层思想准备逻辑之前先把输入搞对&#34;&gt;1. 第一层：思想准备——逻辑之前，先把输入搞对&lt;/h2&gt;
&lt;p&gt;这一层讲的东西朴素得让人想跳过，但它指向一个残酷事实：&lt;strong&gt;大部分争论根本不涉及逻辑，只是双方输入的事实就不一样。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;四个要点：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;全神贯注&lt;/strong&gt;：很多错误不是逻辑错，是根本没看仔细。线上日志看漏一行，结论全盘皆错。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;确认事实&lt;/strong&gt;：事实分两种——&lt;strong&gt;事物事实&lt;/strong&gt;（真实存在的）和&lt;strong&gt;事件事实&lt;/strong&gt;（需要通过证据确认的）。争论前先问：我们争的到底是事实，还是对事实的解释？&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;观念要对应对象&lt;/strong&gt;：脑子里的观念（idea）是对客观对象的反映，检验观念对错的标准是&lt;strong&gt;它符不符合对象&lt;/strong&gt;，不是&amp;quot;我有多确信它&amp;quot;。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;语言要匹配观念&lt;/strong&gt;：语言是观念的载体，词不达意是一切沟通灾难的源头。书中给的原则是&lt;strong&gt;说简单句、用准确的词、避免模糊和歧义&lt;/strong&gt;。&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;踩坑故事 1：一场吵了两小时的会，死于一个词&lt;/strong&gt;
需求评审，产品经理说&amp;quot;这个页面要快&amp;quot;，后端说&amp;quot;接口 P99 做到 200ms 没问题&amp;quot;，前端说&amp;quot;我这边首屏没问题&amp;quot;，测试说&amp;quot;那我觉得没问题&amp;quot;。上线后客诉爆炸——产品经理说的&amp;quot;快&amp;quot;是&lt;strong&gt;整页可交互时间&lt;/strong&gt;，后端给的是接口耗时，前端盯的是首屏渲染，三个&amp;quot;快&amp;quot;根本不是一回事。麦克伦尼说的&amp;quot;语言要匹配观念&amp;quot;就是这个：&lt;strong&gt;争论前先给关键词下操作定义&lt;/strong&gt;（&amp;ldquo;快&amp;rdquo;= TTI &amp;lt; 2s，4G 网络下），能省掉一半的会。现在组里的评审模板第一条就是&amp;quot;定义术语&amp;quot;。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h2 id=&#34;2-第二层四个基本原理逻辑的地基&#34;&gt;2. 第二层：四个基本原理——逻辑的地基&lt;/h2&gt;
&lt;p&gt;整本书的承重墙。这四条不是什么高深定理，而是&lt;strong&gt;一切正确思考都必须遵守的游戏规则&lt;/strong&gt;：&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;button class=&#34;code-copy&#34; type=&#34;button&#34; hidden aria-label=&#34;Copy code to clipboard&#34;&gt;
      &lt;span class=&#34;code-copy-label&#34; aria-hidden=&#34;true&#34;&gt;Copy&lt;/span&gt;
    &lt;/button&gt;
    &lt;pre tabindex=&#34;0&#34;&gt;&lt;code class=&#34;language-mermaid&#34; data-lang=&#34;mermaid&#34;&gt;flowchart LR
    A[&amp;#34;同一律&amp;lt;br/&amp;gt;事物只能是其本身&amp;lt;br/&amp;gt;A 是 A&amp;#34;] --&amp;gt; G[&amp;#34;灰度思考的天敌：&amp;lt;br/&amp;gt;概念被偷换而不自知&amp;#34;]
    B[&amp;#34;排中律&amp;lt;br/&amp;gt;对于任何事物&amp;lt;br/&amp;gt;在一定条件下&amp;lt;br/&amp;gt;要么成立 要么不成立&amp;lt;br/&amp;gt;没有中间状态&amp;#34;] --&amp;gt; G2[&amp;#34;&amp;#39;既死又活&amp;#39;只在&amp;lt;br/&amp;gt;量子力学里合法&amp;#34;]
    C[&amp;#34;矛盾律&amp;lt;br/&amp;gt;同一时刻&amp;lt;br/&amp;gt;同一事物不能&amp;lt;br/&amp;gt;既是这样又不是这样&amp;lt;br/&amp;gt;A 不能同时是非 A&amp;#34;] --&amp;gt; G3[&amp;#34;发现矛盾 = 发现错误&amp;lt;br/&amp;gt;不是&amp;#39;辩证看待&amp;#39;&amp;#34;]
    D[&amp;#34;充足理由律&amp;lt;br/&amp;gt;任何事物存在&amp;lt;br/&amp;gt;都有充足理由&amp;#34;] --&amp;gt; G4[&amp;#34;没有&amp;#39;无缘无故&amp;#39;&amp;lt;br/&amp;gt;事故复盘的第一原理&amp;#34;]
    style A fill:#ffe6cc
    style B fill:#ffe6cc
    style C fill:#ffe6cc
    style D fill:#ffe6cc&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;&lt;p&gt;逐条说它们在工作里的样子：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;同一律&lt;/strong&gt;：概念被偷换是最常见的思维故障。踩坑故事 1 的&amp;quot;快&amp;quot;就是违反同一律——同一个词，中途换了对象，论证全部作废。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;排中律&lt;/strong&gt;：在明确条件下，命题非真即假。&amp;ldquo;这个功能有没有 bug&amp;rdquo; 没有&amp;quot;大概也许有&amp;quot;。测试同学最懂这条。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;矛盾律&lt;/strong&gt;：同一时刻同一方面，A 不能同时是非 A。代码里一个变量不能既是 true 又是 false——编译器天天在替你执行矛盾律，脑子却经常放水。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;充足理由律&lt;/strong&gt;：凡事必有原因。这是&lt;strong&gt;排查故障的世界观&lt;/strong&gt;——线上问题不存在&amp;quot;灵异事件&amp;quot;，只有&amp;quot;还没找到的原因&amp;quot;。&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;踩坑故事 2：&amp;ldquo;灵异 bug&amp;quot;追查到凌晨四点&lt;/strong&gt;
服务每天凌晨固定时间偶发 502，日志干净得像没发生过。组里讨论逐渐滑向玄学：&amp;ldquo;可能是云厂商网络抖动&amp;quot;&amp;ldquo;要不加个重试试试&amp;rdquo;。我后来把&amp;quot;充足理由律&amp;quot;四个字贴在显示器边上，逼自己一条一条排除：时间固定 → 必有定时事件 → 查 crontab 没有 → 查 K8s 层 → &lt;strong&gt;发现是宿主机每天凌晨的镜像 GC 把节点磁盘打满了&lt;/strong&gt;。所有&amp;quot;灵异&amp;quot;都是对理由的放弃。这个习惯比任何排查技巧都值钱。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h2 id=&#34;3-第三层论证的结构前提结论有效与真实&#34;&gt;3. 第三层：论证的结构——前提、结论、有效与真实&lt;/h2&gt;
&lt;p&gt;逻辑的核心动作是&lt;strong&gt;论证&lt;/strong&gt;：从前提推出结论。这一层有三个必须分清的概念。&lt;/p&gt;
&lt;h3 id=&#34;31-演绎与归纳&#34;&gt;3.1 演绎与归纳&lt;/h3&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;button class=&#34;code-copy&#34; type=&#34;button&#34; hidden aria-label=&#34;Copy code to clipboard&#34;&gt;
      &lt;span class=&#34;code-copy-label&#34; aria-hidden=&#34;true&#34;&gt;Copy&lt;/span&gt;
    &lt;/button&gt;
    &lt;pre tabindex=&#34;0&#34;&gt;&lt;code class=&#34;language-mermaid&#34; data-lang=&#34;mermaid&#34;&gt;flowchart LR
    subgraph 演绎[&amp;#34;演绎推理：从一般到个别&amp;#34;]
        D1[&amp;#34;大前提：所有接口超时&amp;lt;br/&amp;gt;都会触发熔断&amp;#34;] --&amp;gt; D3
        D2[&amp;#34;小前提：支付接口超时了&amp;#34;] --&amp;gt; D3[&amp;#34;结论：支付接口&amp;lt;br/&amp;gt;必然触发熔断&amp;lt;br/&amp;gt;（保真）&amp;#34;]
    end
    subgraph 归纳[&amp;#34;归纳推理：从个别到一般&amp;#34;]
        I1[&amp;#34;过去 10 次大促&amp;lt;br/&amp;gt;缓存都扛住了&amp;#34;] --&amp;gt; I3[&amp;#34;结论：这次大促&amp;lt;br/&amp;gt;缓存大概率扛得住&amp;lt;br/&amp;gt;（不保真，只给概率）&amp;#34;]
    end&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;&lt;p&gt;&lt;strong&gt;演绎保真，归纳不保真。&lt;/strong&gt; 工程师日常 90% 的推理是归纳（&amp;ldquo;上次这么改没问题&amp;rdquo;），却经常拿它当演绎用（&amp;ldquo;所以这次一定没问题&amp;rdquo;）——大促翻车史就是归纳翻车的合订本。&lt;/p&gt;
&lt;h3 id=&#34;32-有效--真实&#34;&gt;3.2 有效 ≠ 真实&lt;/h3&gt;
&lt;p&gt;这是全书我最想加粗的一对概念：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;有效（valid）&lt;/strong&gt;：推理形式正确——前提真，则结论必真。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;真实（sound / true）&lt;/strong&gt;：不仅形式对，&lt;strong&gt;前提本身也得是真的&lt;/strong&gt;。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;一个论证可以完全有效但结论荒谬，只要前提是假的：&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;button class=&#34;code-copy&#34; type=&#34;button&#34; hidden aria-label=&#34;Copy code to clipboard&#34;&gt;
      &lt;span class=&#34;code-copy-label&#34; aria-hidden=&#34;true&#34;&gt;Copy&lt;/span&gt;
    &lt;/button&gt;
    &lt;pre tabindex=&#34;0&#34;&gt;&lt;code class=&#34;language-mermaid&#34; data-lang=&#34;mermaid&#34;&gt;flowchart TD
    P1[&amp;#34;前提 1（假）：所有用 Java 的系统都慢&amp;#34;] --&amp;gt; C[&amp;#34;结论：订单系统慢&amp;lt;br/&amp;gt;✔ 推理形式有效&amp;lt;br/&amp;gt;✘ 前提假 所以结论不可信&amp;#34;]
    P2[&amp;#34;前提 2（真）：订单系统用 Java 写的&amp;#34;] --&amp;gt; C
    style P1 fill:#ffcccc&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;踩坑故事 3：技术选型里的&amp;quot;大厂这么干&amp;rdquo;&lt;/strong&gt;
评审一个方案，同事的论证是：&amp;ldquo;Netflix 用了微服务（真），我们要支撑大流量（真），所以我们也应该上微服务（形式上说得过去）。&amp;ldquo;这个论证真正的漏洞藏在一个没说出口的前提里：&amp;rdquo;&lt;strong&gt;我们的组织规模和 Netflix 一样需要微服务&lt;/strong&gt;&amp;quot;——40 人的团队和几千人的团队，这个前提是假的。后来那个项目拆出 30 个服务，三个人维护，一次发布要排两小时依赖序。&lt;strong&gt;识别隐藏前提，是评审别人方案的第一刀。&lt;/strong&gt; 麦克伦尼书里说&amp;quot;结论不能反映前提的量&amp;rdquo;（全称前提出特称结论没事，反过来必错），实战版就是：把没说的前提挖出来晒一晒。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3 id=&#34;33-三段论的正确姿势&#34;&gt;3.3 三段论的正确姿势&lt;/h3&gt;
&lt;p&gt;经典三段论（Barbara 式）长这样：&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;button class=&#34;code-copy&#34; type=&#34;button&#34; hidden aria-label=&#34;Copy code to clipboard&#34;&gt;
      &lt;span class=&#34;code-copy-label&#34; aria-hidden=&#34;true&#34;&gt;Copy&lt;/span&gt;
    &lt;/button&gt;
    &lt;pre tabindex=&#34;0&#34;&gt;&lt;code class=&#34;language-mermaid&#34; data-lang=&#34;mermaid&#34;&gt;flowchart TD
    M1[&amp;#34;大前提：所有 M 都是 P&amp;#34;] --&amp;gt; CC[&amp;#34;结论：所有 S 都是 P&amp;#34;]
    M2[&amp;#34;小前提：所有 S 都是 M&amp;#34;] --&amp;gt; CC
    NOTE[&amp;#34;中项 M 必须至少周延一次&amp;lt;br/&amp;gt;（在前提里覆盖其全部外延）&amp;lt;br/&amp;gt;否则：中项不周延谬误&amp;#34;]&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;&lt;p&gt;书里给了判断三段论的各种规则（两个否定前提推不出结论、前提有一个特称结论必须特称……）。不用全背，记一个最常被违反的：&lt;strong&gt;从&amp;quot;有些&amp;quot;不能推出&amp;quot;所有&amp;rdquo;&lt;/strong&gt;。&amp;ldquo;有些用户反馈卡顿&amp;rdquo;→&amp;ldquo;所有用户都卡&amp;rdquo;，产品需求文档里每周都能看到这种滑坡。&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&#34;4-第四五层谬误大全与它的根源&#34;&gt;4. 第四、五层：谬误大全与它的根源&lt;/h2&gt;
&lt;h3 id=&#34;41-高频谬误速查表配程序员真实病例&#34;&gt;4.1 高频谬误速查表（配程序员真实病例）&lt;/h3&gt;
&lt;p&gt;书里列了 28 种谬误，我挑工作中真正高频的，每个配一个我亲眼见过的病例：&lt;/p&gt;
&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;谬误&lt;/th&gt;
					&lt;th&gt;一句话识别&lt;/th&gt;
					&lt;th&gt;程序员病例&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;稻草人&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;把对方观点扭曲成好打的版本再攻击&lt;/td&gt;
					&lt;td&gt;A 说&amp;quot;这个接口要加缓存&amp;quot;，B 反驳&amp;quot;你想把所有数据都堆进 Redis 吗？内存不要钱？&amp;quot;&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;诉诸权威&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;因为某人/某公司牛，所以它对&lt;/td&gt;
					&lt;td&gt;&amp;ldquo;阿里就是这么设计的&amp;rdquo;——阿里的约束条件和你的不一样&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;后此谬误&lt;/strong&gt;（post hoc）&lt;/td&gt;
					&lt;td&gt;先后发生 ≠ 因果关系&lt;/td&gt;
					&lt;td&gt;&amp;ldquo;昨天上了新版本的网关，今天接口慢了，肯定是网关的锅&amp;rdquo;——实际是运营商骨干网抖动&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;非黑即白&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;把多选硬压成二选一&lt;/td&gt;
					&lt;td&gt;&amp;ldquo;要么全部重写，要么继续忍受烂代码&amp;rdquo;——还有渐进重构这条正经路&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;草率概括&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;样本太小就下结论&lt;/td&gt;
					&lt;td&gt;&amp;ldquo;内测 3 个用户都没问题，可以全量&amp;rdquo;&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;循环论证&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;结论早已藏在前提里&lt;/td&gt;
					&lt;td&gt;&amp;ldquo;这个方案好，因为它是最佳实践；为什么它是最佳实践？因为它好&amp;rdquo;&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;偷换概念&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;同一律被违反&lt;/td&gt;
					&lt;td&gt;评审时&amp;quot;性能&amp;quot;一词在响应时间和吞吐量之间反复横跳&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;诉诸情感&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;用同情/恐惧代替论证&lt;/td&gt;
					&lt;td&gt;&amp;ldquo;这个需求不做，运营同学这个月 KPI 就完了&amp;rdquo;&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;错误类比&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;相似点不够撑起结论&lt;/td&gt;
					&lt;td&gt;&amp;ldquo;人脑用神经元，所以堆足够多 if-else 也能产生智能&amp;rdquo;&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;民主谬误&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;多数人认同 ≠ 正确&lt;/td&gt;
					&lt;td&gt;团队投票决定&amp;quot;这个并发问题不会有事&amp;quot;&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;踩坑故事 4：一次后此谬误引发的连环故障&lt;/strong&gt;
我犯过最严重的一次逻辑错误就是后此谬误。某次发布后接口耗时上涨，我看了发布时间线就断定是新版本的锅，拍板回滚。回滚后耗时&lt;strong&gt;没有恢复&lt;/strong&gt;——真正的元凶是同一时段上游投放活动带来的流量结构变化（慢接口流量占比升高）。但因为&amp;quot;回滚&amp;quot;这个操作本身又成了新的干扰变量，我们白白多排查了三个小时，还多承受了一次回滚的风险。教训刻在墙上：&lt;strong&gt;先看监控全局，再对时间线；时间先后是嫌疑，不是定罪。&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3 id=&#34;42-谬误的根源不是坏是这些心理&#34;&gt;4.2 谬误的根源：不是坏，是这些心理&lt;/h3&gt;
&lt;p&gt;第四层回答&amp;quot;人为什么会想错&amp;quot;，比谬误清单本身更有价值：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;怀疑论过头&lt;/strong&gt;：把&amp;quot;不可知&amp;quot;当逃避思考的挡箭牌（&amp;ldquo;日志也可能是错的，别查了&amp;rdquo;）；&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;玩世不恭&lt;/strong&gt;：预设一切论证都是利益伪装，于是不再需要听任何论证；&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;盲目乐观&lt;/strong&gt;：只寻找支持自己方案的证据（确认偏误的近亲）；&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;眼界狭窄&lt;/strong&gt;：只在自己熟悉的工具箱里找解决方案——手里只有锤子；&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;情感&lt;/strong&gt;：书里说得最透的一句大意是，&lt;strong&gt;情感越浓烈，论证越要让位给冷静&lt;/strong&gt;。线上事故复盘最怕带情绪，一甩锅逻辑就死了。&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id=&#34;5-逻辑训练方法可执行的每日清单&#34;&gt;5. 逻辑训练方法：可执行的每日清单&lt;/h2&gt;
&lt;p&gt;逻辑是技能不是知识，&lt;strong&gt;看十遍书不如每天练十分钟&lt;/strong&gt;。我自己执行过的训练计划，按性价比排序：&lt;/p&gt;
&lt;h3 id=&#34;51-每日三题合计约-15-分钟&#34;&gt;5.1 每日三题（合计约 15 分钟）&lt;/h3&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;button class=&#34;code-copy&#34; type=&#34;button&#34; hidden aria-label=&#34;Copy code to clipboard&#34;&gt;
      &lt;span class=&#34;code-copy-label&#34; aria-hidden=&#34;true&#34;&gt;Copy&lt;/span&gt;
    &lt;/button&gt;
    &lt;pre tabindex=&#34;0&#34;&gt;&lt;code class=&#34;language-mermaid&#34; data-lang=&#34;mermaid&#34;&gt;flowchart LR
    T1[&amp;#34;题 1 · 改写三段论&amp;lt;br/&amp;gt;找一条工作群里的断言&amp;lt;br/&amp;gt;补出隐藏前提&amp;lt;br/&amp;gt;检验有效性和真实性&amp;lt;br/&amp;gt;3 分钟&amp;#34;] --&amp;gt; T2[&amp;#34;题 2 · 谬误狩猎&amp;lt;br/&amp;gt;刷一条新闻评论区&amp;lt;br/&amp;gt;或技术论坛热帖&amp;lt;br/&amp;gt;指出至少一个谬误并命名&amp;lt;br/&amp;gt;5 分钟&amp;#34;]
    T2 --&amp;gt; T3[&amp;#34;题 3 · 费曼复述&amp;lt;br/&amp;gt;把今天解决的一个问题&amp;lt;br/&amp;gt;用&amp;#39;前提→推理→结论&amp;#39;&amp;lt;br/&amp;gt;写给外行看&amp;lt;br/&amp;gt;5 分钟&amp;#34;]&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;题 1 的素材库&lt;/strong&gt;：需求文档、技术方案、复盘报告——全是现成的&amp;quot;论证&amp;quot;，练习补全隐藏前提。坚持两周，你看任何方案都会自动开始找&amp;quot;他没说出口的那句话&amp;quot;。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;题 2 的关键是命名&lt;/strong&gt;：不是&amp;quot;我觉得不对&amp;quot;，而是说出&amp;quot;这是稻草人/后此/诉诸权威&amp;quot;。能命名 = 能复现 = 下次自己犯的时候能识别。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;题 3 是最狠的&lt;/strong&gt;：写给外行看会暴露一切含糊之处。写不清楚 = 没想明白，没有例外。&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;52-每周一练约-30-分钟&#34;&gt;5.2 每周一练（约 30 分钟）&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;复盘改写&lt;/strong&gt;：从团队事故报告里挑一份，重写因果链——区分&amp;quot;时间相关&amp;quot;和&amp;quot;因果相关&amp;quot;，标注每一环的证据等级（监控数据 / 推断 / 猜测）。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;对立面练习&lt;/strong&gt;：选一个自己坚信的技术观点（如&amp;quot;微服务优于单体&amp;quot;），&lt;strong&gt;强迫自己写出反方的最强论证&lt;/strong&gt;（steel man，稻草人的反面）。写不出来说明你并没有真正理解自己观点的边界。&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;53-进阶阅读材料按顺序读&#34;&gt;5.3 进阶阅读材料（按顺序读）&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;《学会提问》（Asking the Right Questions）&lt;/strong&gt;——本书的最佳续集，把&amp;quot;找前提、找谬误&amp;quot;训练成肌肉记忆；&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;《超越感觉》（Beyond Feelings）&lt;/strong&gt;——更系统的批判性思维教材，第四章&amp;quot;证据&amp;quot;专治后此谬误；&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;《思考，快与慢》&lt;/strong&gt;——从认知科学解释谬误的根源，回答&amp;quot;人为什么天生想不对&amp;quot;；&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;《金字塔原理》&lt;/strong&gt;——逻辑的另一半：想对了之后怎么结构化地表达；&lt;/li&gt;
&lt;li&gt;Paul Graham 的 &lt;a href=&#34;http://www.paulgraham.com/disagree.html&#34;&gt;&lt;em&gt;How to Disagree&lt;/em&gt;&lt;/a&gt;—— disagreement hierarchy，一张图分清&amp;quot;反驳论点&amp;quot;和&amp;quot;骂人&amp;quot;的七个层级，网上吵架和 Code Review 通用。&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id=&#34;54-把训练场搬回工作&#34;&gt;5.4 把训练场搬回工作&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Code Review 是最好的逻辑训练场&lt;/strong&gt;：每条评论强制写成&amp;quot;前提（代码事实）→ 推理（规则/经验）→ 结论（建议）&amp;ldquo;三段式，杜绝&amp;quot;感觉不太好&amp;quot;式评论；&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;复盘会立一条规矩&lt;/strong&gt;：只接受带证据的因果链，&amp;ldquo;可能、感觉、应该是&amp;quot;后面必须跟验证计划；&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;技术方案模板加一栏&lt;/strong&gt;：&amp;ldquo;本方案的隐藏假设&amp;rdquo;，写上线的开关。&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id=&#34;思考与感悟&#34;&gt;思考与感悟&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;1. 逻辑学是程序员被拖欠最久的一门课。&lt;/strong&gt; 我们学数据结构、学操作系统、学分布式，唯独没人教&amp;quot;怎么想才对&amp;rdquo;。可工作五年之后回看，造成最大损失的从来不是不会某个技术，而是：把先后当因果、把权威当论证、把概念吵岔了两个小时。这本书 130 页，两天读完，补的是地基。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;2. 逻辑的敌人不是愚蠢，是情绪。&lt;/strong&gt; 书里最触动我的不是谬误清单，是&amp;quot;非逻辑思维的根源&amp;quot;那一章——怀疑论、玩世不恭、盲目乐观，全是心理防御机制，不是智力问题。复盘会上一句&amp;quot;当时是谁决策的&amp;rdquo;，逻辑就死了。想练好逻辑，先练把情绪和论证分开的本事。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;3. &amp;ldquo;能命名&amp;quot;是内化的分界线。&lt;/strong&gt; 知道&amp;quot;诉诸权威&amp;quot;这个词之前，我也天天犯；学会之后，每次脱口而出&amp;quot;大厂都这么干&amp;quot;时，脑子里会有个小声音报名字。语言是观念的载体——给谬误命名，就是给自己的思维装监控。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;4. 对工程师来说，逻辑的最终形态是工程习惯。&lt;/strong&gt; 充足的日志（充足理由律的落地）、明确的术语表（同一律的落地）、灰度发布（对归纳不保真的敬畏）、复盘模板（反后此谬误的流程化）——好的工程实践背后全是逻辑学。这本书读完，你会重新理解这些实践&amp;quot;为什么是它们&amp;rdquo;。&lt;/p&gt;
&lt;p&gt;与君共勉。&lt;/p&gt;
</description>
    </item>
    <item>
      <title>程序员逻辑思维训练手册：书单、方法与 12 周刻意练习计划</title>
      <link>https://ftmao.com/blog/posts/programmer-logical-thinking-training/</link>
      <pubDate>Sun, 04 Sep 2022 10:00:00 +0800</pubDate>
      <guid>https://ftmao.com/blog/posts/programmer-logical-thinking-training/</guid>
      <description>&lt;h1 id=&#34;程序员逻辑思维训练手册书单方法与-12-周刻意练习计划&#34;&gt;程序员逻辑思维训练手册：书单、方法与 12 周刻意练习计划&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;写这篇的动机很直接：「我感觉自己逻辑思维很弱」是我听过最多、也最难回答的自我评价。它太大了，大到无从下手。&lt;br&gt;
这篇的思路：&lt;strong&gt;先把「逻辑思维」这个模糊的大词拆成五种具体的、可单独训练的能力，再给每种能力配书、配练习、配检查清单&lt;/strong&gt;，最后拼成一份 12 周计划。跟着清单做就行，不用自己设计训练方案。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h2 id=&#34;第一篇-先诊断逻辑思维不是一个东西是五个东西&#34;&gt;第一篇 先诊断：逻辑思维不是一个东西，是五个东西&lt;/h2&gt;
&lt;p&gt;「逻辑思维弱」是个无法改进的表述——就像说「我身体不好」而不说「我 5 公里跑不下来」。先拆开：&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;button class=&#34;code-copy&#34; type=&#34;button&#34; hidden aria-label=&#34;Copy code to clipboard&#34;&gt;
      &lt;span class=&#34;code-copy-label&#34; aria-hidden=&#34;true&#34;&gt;Copy&lt;/span&gt;
    &lt;/button&gt;
    &lt;pre tabindex=&#34;0&#34;&gt;&lt;code class=&#34;language-mermaid&#34; data-lang=&#34;mermaid&#34;&gt;flowchart TD
    L[&amp;#34;逻辑思维&amp;#34;] --&amp;gt; A[&amp;#34;1 概念清晰&amp;lt;br/&amp;gt;说的每个词都有明确所指&amp;lt;br/&amp;gt;症状: 需求评审说不清&amp;lt;br/&amp;gt;变量命名含糊&amp;#34;]
    L --&amp;gt; B[&amp;#34;2 推理链条&amp;lt;br/&amp;gt;从前提一步步走到结论&amp;lt;br/&amp;gt;症状: 排查 bug 靠猜&amp;lt;br/&amp;gt;改 A 坏 B 想不到为什么&amp;#34;]
    L --&amp;gt; C[&amp;#34;3 抽象分层&amp;lt;br/&amp;gt;能切换粒度看问题&amp;lt;br/&amp;gt;症状: 代码揉成一团&amp;lt;br/&amp;gt;说不清系统架构&amp;#34;]
    L --&amp;gt; D[&amp;#34;4 边界意识&amp;lt;br/&amp;gt;看到输入就想边界与异常&amp;lt;br/&amp;gt;症状: 上线后被空指针/&amp;lt;br/&amp;gt;越界/并发打脸&amp;#34;]
    L --&amp;gt; E[&amp;#34;5 因果辨析&amp;lt;br/&amp;gt;区分相关/因果/巧合&amp;lt;br/&amp;gt;症状: 复盘归错因&amp;lt;br/&amp;gt;优化没效果&amp;#34;]&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;&lt;p&gt;对照一下，你的「弱」大概率集中在其中两三个上。&lt;strong&gt;诊断的意义在于：五种能力的训练方法完全不同&lt;/strong&gt;，混着练等于白练。&lt;/p&gt;
&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;能力&lt;/th&gt;
					&lt;th&gt;最痛的日常场景&lt;/th&gt;
					&lt;th&gt;对应训练&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;概念清晰&lt;/td&gt;
					&lt;td&gt;需求理解偏差、命名糟糕&lt;/td&gt;
					&lt;td&gt;定义练习、费曼讲解&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;推理链条&lt;/td&gt;
					&lt;td&gt;debug 靠蒙、日志看不出因果&lt;/td&gt;
					&lt;td&gt;假设-验证法、画调用链&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;抽象分层&lt;/td&gt;
					&lt;td&gt;代码越写越乱、讲不清架构&lt;/td&gt;
					&lt;td&gt;分层画图、重构练习&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;边界意识&lt;/td&gt;
					&lt;td&gt;边界 bug 反复出现&lt;/td&gt;
					&lt;td&gt;防御性 checklist、测试先行&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;因果辨析&lt;/td&gt;
					&lt;td&gt;复盘甩锅、优化玄学&lt;/td&gt;
					&lt;td&gt;五问法、对照实验&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;思考与感悟之一&lt;/strong&gt;：编程本质是「用精确的语言描述精确的推理」。IDE 不会因为你概念模糊而报错，编译器不会因为你因果搞错而拒绝构建——&lt;strong&gt;代码能跑通和逻辑是对的之间，隔着一万个线上事故&lt;/strong&gt;。这也是为什么逻辑思维的训练必须在代码之外单独进行。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h2 id=&#34;第二篇-书单按能力分级别从离散数学开始&#34;&gt;第二篇 书单：按能力分级，别从《离散数学》开始&lt;/h2&gt;
&lt;h3 id=&#34;21-入门层先把讲道理的基本功补上&#34;&gt;2.1 入门层：先把「讲道理」的基本功补上&lt;/h3&gt;
&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;书&lt;/th&gt;
					&lt;th&gt;练什么&lt;/th&gt;
					&lt;th&gt;怎么读&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;《简单逻辑学》（D.Q. 麦克伦尼）&lt;/td&gt;
					&lt;td&gt;概念清晰 + 推理链条&lt;/td&gt;
					&lt;td&gt;薄，一周读完。重点看「论证的前提与结论」「常见谬误」两章&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;《学会提问》（尼尔·布朗）&lt;/td&gt;
					&lt;td&gt;因果辨析&lt;/td&gt;
					&lt;td&gt;批判性思维入门，重点看「证据的效力」「有没有替代原因」&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;《金字塔原理》（芭芭拉·明托）&lt;/td&gt;
					&lt;td&gt;抽象分层（表达侧）&lt;/td&gt;
					&lt;td&gt;结论先行、以上统下。对写技术方案、汇报、写博客立竿见影&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id=&#34;22-进阶层直接长在编程上的思维&#34;&gt;2.2 进阶层：直接长在编程上的思维&lt;/h3&gt;
&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;书&lt;/th&gt;
					&lt;th&gt;练什么&lt;/th&gt;
					&lt;th&gt;怎么读&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;《怎样解题》（波利亚）&lt;/td&gt;
					&lt;td&gt;推理链条&lt;/td&gt;
					&lt;td&gt;数学书的外壳，debug 的内核。「弄清问题→拟定计划→执行→回顾」就是排查 bug 的标准流程&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;《系统之美》（德内拉·梅多斯）&lt;/td&gt;
					&lt;td&gt;抽象分层 + 因果辨析&lt;/td&gt;
					&lt;td&gt;库存、流量、队列都是系统。看完你会用「反馈回路」的眼光看重试风暴、缓存雪崩&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;《程序员修炼之道》&lt;/td&gt;
					&lt;td&gt;全部五种&lt;/td&gt;
					&lt;td&gt;工程场景化的思维训练，DRY、正交性、曳光弹，每一条都在教你怎么把问题切干净&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id=&#34;23-硬核层可选别勉强&#34;&gt;2.3 硬核层：可选，别勉强&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;《离散数学及其应用》：命题逻辑、集合、图论——编程的数学地基。只建议读前三章，当工具书查。&lt;/li&gt;
&lt;li&gt;《思考，快与慢》：知道大脑什么时候在骗你。和编程不直接相关，但和「复盘归错因」直接相关。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;选书原则：一次只读一本，读完一本书的每一章都要落到「这周我在代码里用了它哪一点」。&lt;/strong&gt; 读而不用的思维书，和收藏夹里的技术文章没有区别。&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;button class=&#34;code-copy&#34; type=&#34;button&#34; hidden aria-label=&#34;Copy code to clipboard&#34;&gt;
      &lt;span class=&#34;code-copy-label&#34; aria-hidden=&#34;true&#34;&gt;Copy&lt;/span&gt;
    &lt;/button&gt;
    &lt;pre tabindex=&#34;0&#34;&gt;&lt;code class=&#34;language-mermaid&#34; data-lang=&#34;mermaid&#34;&gt;flowchart LR
    A[&amp;#34;入门层&amp;lt;br/&amp;gt;讲道理的基本功&amp;#34;] --&amp;gt; B[&amp;#34;进阶层&amp;lt;br/&amp;gt;长在编程上的思维&amp;#34;]
    B --&amp;gt; C[&amp;#34;硬核层&amp;lt;br/&amp;gt;数学地基 可选&amp;#34;]
    A -.-&amp;gt;|&amp;#34;每章落到&amp;lt;br/&amp;gt;一次代码实践&amp;#34;| P[&amp;#34;不是读完&amp;lt;br/&amp;gt;是用完&amp;#34;]
    B -.-&amp;gt; P
    style P fill:#e8f4e8&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;&lt;hr&gt;
&lt;h2 id=&#34;第三篇-日常训练法把练习藏进你每天都在做的事里&#34;&gt;第三篇 日常训练法：把练习藏进你每天都在做的事里&lt;/h2&gt;
&lt;p&gt;刻意练习的关键不是额外抽两小时，而是&lt;strong&gt;改造已有的工作动作&lt;/strong&gt;。五个场景，每个配一个可检查的动作：&lt;/p&gt;
&lt;h3 id=&#34;31-写代码前先说清再动手练概念清晰&#34;&gt;3.1 写代码前：先说清，再动手（练概念清晰）&lt;/h3&gt;
&lt;p&gt;接到需求后，强制自己写三句话再开编辑器：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;input disabled=&#34;&#34; type=&#34;checkbox&#34;&gt; 这个功能的&lt;strong&gt;输入&lt;/strong&gt;是什么？（精确到字段和类型）&lt;/li&gt;
&lt;li&gt;&lt;input disabled=&#34;&#34; type=&#34;checkbox&#34;&gt; &lt;strong&gt;输出&lt;/strong&gt;是什么？什么情况算成功？&lt;/li&gt;
&lt;li&gt;&lt;input disabled=&#34;&#34; type=&#34;checkbox&#34;&gt; 有哪三种&lt;strong&gt;必然失败&lt;/strong&gt;的情况？&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;写不出来，就是概念还没清晰，回去问。这一步能拦掉一半的返工。&lt;/p&gt;
&lt;h3 id=&#34;32-排查-bug假设-验证法练推理链条&#34;&gt;3.2 排查 bug：假设-验证法（练推理链条）&lt;/h3&gt;
&lt;p&gt;禁止「改一下试试」。用 debug 日志模板强制走流程：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;input disabled=&#34;&#34; type=&#34;checkbox&#34;&gt; 写下&lt;strong&gt;假设&lt;/strong&gt;：「我认为是 X 导致 Y，因为 Z」&lt;/li&gt;
&lt;li&gt;&lt;input disabled=&#34;&#34; type=&#34;checkbox&#34;&gt; 写下&lt;strong&gt;验证方式&lt;/strong&gt;：看什么日志/加什么断点能证实或证伪&lt;/li&gt;
&lt;li&gt;&lt;input disabled=&#34;&#34; type=&#34;checkbox&#34;&gt; 验证结果与假设&lt;strong&gt;不符时，先怀疑假设，不要怀疑现象&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;input disabled=&#34;&#34; type=&#34;checkbox&#34;&gt; 修复后写下：根因是什么？为什么之前的推理没走到这？&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;波利亚的「回顾」一步，90% 的人会跳过——而推理能力的增长恰恰只发生在这一步。&lt;/p&gt;
&lt;h3 id=&#34;33-讲清楚一个模块费曼技巧练抽象分层&#34;&gt;3.3 讲清楚一个模块：费曼技巧（练抽象分层）&lt;/h3&gt;
&lt;p&gt;每月一次，挑你负责的一个模块，画一张三层图讲给同事（或 AI）听：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;input disabled=&#34;&#34; type=&#34;checkbox&#34;&gt; 第一层：一句话说清它是干什么的&lt;/li&gt;
&lt;li&gt;&lt;input disabled=&#34;&#34; type=&#34;checkbox&#34;&gt; 第二层：三个以内的子模块 + 它们之间的关系&lt;/li&gt;
&lt;li&gt;&lt;input disabled=&#34;&#34; type=&#34;checkbox&#34;&gt; 第三层：被追问时才能展开的细节&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;讲卡壳的地方，就是你分层的薄弱处。&lt;strong&gt;能给 AI 把一个需求描述到它一次生成正确代码，是概念清晰度的绝佳试金石&lt;/strong&gt;——prompt 写不清楚，多半是自己也没想清楚。&lt;/p&gt;
&lt;h3 id=&#34;34-code-review五问清单练因果辨析&#34;&gt;3.4 Code Review：五问清单（练因果辨析）&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;input disabled=&#34;&#34; type=&#34;checkbox&#34;&gt; 这个改动解决了什么&lt;strong&gt;问题&lt;/strong&gt;？（还是先有的方案？）&lt;/li&gt;
&lt;li&gt;&lt;input disabled=&#34;&#34; type=&#34;checkbox&#34;&gt; 问题和改动之间是&lt;strong&gt;因果&lt;/strong&gt;还是&lt;strong&gt;相关&lt;/strong&gt;？（「上次加了缓存就好了」是相关，不是因果）&lt;/li&gt;
&lt;li&gt;&lt;input disabled=&#34;&#34; type=&#34;checkbox&#34;&gt; 有没有&lt;strong&gt;替代原因&lt;/strong&gt;能解释这个现象？&lt;/li&gt;
&lt;li&gt;&lt;input disabled=&#34;&#34; type=&#34;checkbox&#34;&gt; 这个改动的&lt;strong&gt;副作用边界&lt;/strong&gt;在哪？&lt;/li&gt;
&lt;li&gt;&lt;input disabled=&#34;&#34; type=&#34;checkbox&#34;&gt; 如果它是错的，我们&lt;strong&gt;多快能发现&lt;/strong&gt;？&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;35-复盘只问为什么链练因果辨析&#34;&gt;3.5 复盘：只问「为什么链」（练因果辨析）&lt;/h3&gt;
&lt;p&gt;线上事故复盘禁用「我疏忽了」「运气不好」这类不可证伪的词。只允许五问法往下钻，直到钻出一个&lt;strong&gt;可执行的流程或工具改进&lt;/strong&gt;为止。「粗心」不是根因，「为什么粗心能穿过所有防线到达线上」才是。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;思考与感悟之二&lt;/strong&gt;：所有训练法的共同点是「把隐式思维变成显式文字」。脑子里的推理可以偷步、可以跳步、可以自我欺骗，&lt;strong&gt;落在纸上的推理不能&lt;/strong&gt;。写作是逻辑思维最便宜的压力测试。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h2 id=&#34;第四篇-12-周刻意练习计划&#34;&gt;第四篇 12 周刻意练习计划&lt;/h2&gt;
&lt;p&gt;每周一个主题。规则：&lt;strong&gt;周末用 30 分钟对照自检清单打分，三项里两项不达标，下周重复同一主题&lt;/strong&gt;。宁可 12 周练成 6 项，不要 12 周路过 12 项。&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;button class=&#34;code-copy&#34; type=&#34;button&#34; hidden aria-label=&#34;Copy code to clipboard&#34;&gt;
      &lt;span class=&#34;code-copy-label&#34; aria-hidden=&#34;true&#34;&gt;Copy&lt;/span&gt;
    &lt;/button&gt;
    &lt;pre tabindex=&#34;0&#34;&gt;&lt;code class=&#34;language-mermaid&#34; data-lang=&#34;mermaid&#34;&gt;flowchart TD
    subgraph P1[&amp;#34;第 1-4 周 概念与推理&amp;#34;]
        W1[&amp;#34;W1 定义练习&amp;lt;br/&amp;gt;读《简单逻辑学》&amp;lt;br/&amp;gt;给 10 个日常用词写精确定义&amp;#34;]
        W2[&amp;#34;W2 需求拆解&amp;lt;br/&amp;gt;每个需求先写输入/输出/失败&amp;lt;br/&amp;gt;再动手&amp;#34;]
        W3[&amp;#34;W3 假设-验证 debug&amp;lt;br/&amp;gt;每个 bug 走完整模板&amp;#34;]
        W4[&amp;#34;W4 谬误识别&amp;lt;br/&amp;gt;读《学会提问》&amp;lt;br/&amp;gt;在技术讨论里找出 5 个逻辑谬误&amp;#34;]
    end
    subgraph P2[&amp;#34;第 5-8 周 抽象与边界&amp;#34;]
        W5[&amp;#34;W5 金字塔表达&amp;lt;br/&amp;gt;读《金字塔原理》&amp;lt;br/&amp;gt;写 2 篇结论先行的技术方案&amp;#34;]
        W6[&amp;#34;W6 费曼讲解&amp;lt;br/&amp;gt;画 1 张三层模块图并讲出来&amp;#34;]
        W7[&amp;#34;W7 边界清单&amp;lt;br/&amp;gt;给负责的接口建防御性 checklist&amp;#34;]
        W8[&amp;#34;W8 测试先行&amp;lt;br/&amp;gt;一个完整功能 TDD 写下来&amp;#34;]
    end
    subgraph P3[&amp;#34;第 9-12 周 因果与系统&amp;#34;]
        W9[&amp;#34;W9 复盘训练&amp;lt;br/&amp;gt;读《系统之美》&amp;lt;br/&amp;gt;找 1 个旧事事故做五问法复盘&amp;#34;]
        W10[&amp;#34;W10 对照实验&amp;lt;br/&amp;gt;一次性能优化用基准数据说话&amp;#34;]
        W11[&amp;#34;W11 解题流程&amp;lt;br/&amp;gt;读《怎样解题》&amp;lt;br/&amp;gt;按四步解 5 道算法题并写回顾&amp;#34;]
        W12[&amp;#34;W12 综合输出&amp;lt;br/&amp;gt;写 1 篇技术博客&amp;lt;br/&amp;gt;把 12 周里最有体感的一条讲透&amp;#34;]
    end
    P1 --&amp;gt; P2 --&amp;gt; P3&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;&lt;h3 id=&#34;每周自检清单通用模板&#34;&gt;每周自检清单（通用模板）&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;input disabled=&#34;&#34; type=&#34;checkbox&#34;&gt; 本周的书读了吗？哪一章的观点我这周&lt;strong&gt;真的用了&lt;/strong&gt;？&lt;/li&gt;
&lt;li&gt;&lt;input disabled=&#34;&#34; type=&#34;checkbox&#34;&gt; 本周的练习动作做了几次？（写次数，不写「做了」）&lt;/li&gt;
&lt;li&gt;&lt;input disabled=&#34;&#34; type=&#34;checkbox&#34;&gt; 有没有一个具体场景，我能说出「如果没有这周的训练，我会做错」？&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;两个提醒&#34;&gt;两个提醒&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;不要同时练多项&lt;/strong&gt;。认知资源有限，一周一个主题已经很难。觉得慢，说明做对了——肌肉记忆的形成从来是慢的。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;输出强制闭环&lt;/strong&gt;。第 12 周的博客不是可选项。能把「我怎么练的」讲清楚，本身就是五种能力的综合考试。&lt;/li&gt;
&lt;/ol&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;思考与感悟之三&lt;/strong&gt;：逻辑思维不是天赋，是&lt;strong&gt;可分解、可练习、可度量&lt;/strong&gt;的技能组——和学一门框架没有本质区别。区别在于框架三个月过期，这套东西跟你三十年。投资回报率不在同一个数量级上。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h2 id=&#34;附一句话总纲&#34;&gt;附：一句话总纲&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;诊断先行&lt;/strong&gt;：先弄清弱在五种能力的哪几种，再选训练。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;书不在多&lt;/strong&gt;：一本一用，每章落到代码里才算读过。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;改造日常&lt;/strong&gt;：练习藏进写需求、debug、CR、复盘里，不靠额外抽时间。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;显式化&lt;/strong&gt;：把推理写下来，写下来就不能骗自己。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;12 周起评&lt;/strong&gt;：周末自检，不达标就重复，最后以一篇博客闭环。&lt;/li&gt;
&lt;/ul&gt;
</description>
    </item>
    
  </channel>
</rss>
