<?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 菠萝油与天光墟</title>
    <link>https://ramsayleung.github.io/zh/categories/%E8%AF%BB%E4%B9%A6%E6%84%9F%E6%82%9F/</link>
    <description>Recent content in 读书感悟 on 菠萝油与天光墟</description>
    <image>
      <title>菠萝油与天光墟</title>
      <url>https://ramsayleung.github.io/%3Clink%20or%20path%20of%20image%20for%20opengraph,%20twitter-cards%3E</url>
      <link>https://ramsayleung.github.io/%3Clink%20or%20path%20of%20image%20for%20opengraph,%20twitter-cards%3E</link>
    </image>
    <generator>Hugo -- 0.146.7</generator>
    <language>zh</language>
    <copyright>See this site&amp;rsquo;s source code here, licensed under GPLv3 ·</copyright>
    <lastBuildDate>Sun, 16 Nov 2025 10:13:07 -0800</lastBuildDate>
    <atom:link href="https://ramsayleung.github.io/zh/categories/%E8%AF%BB%E4%B9%A6%E6%84%9F%E6%82%9F/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>一本读了八年还没读完的书</title>
      <link>https://ramsayleung.github.io/zh/post/2025/structure_and_interpretation_of_computer_programs/</link>
      <pubDate>Mon, 04 Aug 2025 10:00:00 -0700</pubDate>
      <guid>https://ramsayleung.github.io/zh/post/2025/structure_and_interpretation_of_computer_programs/</guid>
      <description>&lt;h2 id=&#34;缘起&#34;&gt;&lt;span class=&#34;section-num&#34;&gt;1&lt;/span&gt; 缘起&lt;/h2&gt;
&lt;p&gt;正如我在之前博客文章《&lt;a href=&#34;https://ramsayleung.github.io/zh/post/2023/%E8%BF%99%E4%BA%9B%E5%B9%B4%E8%B5%B0%E8%BF%87%E7%9A%84%E8%B7%AF_%E4%BB%8E%E5%B9%BF%E5%B7%9E%E5%88%B0%E6%B8%A9%E5%93%A5%E5%8D%8E/&#34;&gt;这些年走过的路：从广州到温哥华&lt;/a&gt;》&lt;sup id=&#34;fnref:1&#34;&gt;&lt;a href=&#34;#fn:1&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;1&lt;/a&gt;&lt;/sup&gt;提到的那样，我在大二暑假的时候因缘际会，获得了去一家在深圳的初创公司实习的 Offer。&lt;/p&gt;
&lt;p&gt;实习的两个多月时间也快就过去了，我也顺利拿到了 Return Offer，公司也非常有人情味地给实习生办了个欢送典礼。&lt;/p&gt;
&lt;p&gt;当时实习的导师，也是这家公司的副总裁，加州州立大学的&lt;a href=&#34;https://www.linkedin.com/in/yingliu37&#34;&gt;刘颖&lt;/a&gt;教授&lt;sup id=&#34;fnref:2&#34;&gt;&lt;a href=&#34;#fn:2&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;2&lt;/a&gt;&lt;/sup&gt;，在欢送典礼上给我们几个实习生每人都赠送了一本书作为临别礼物。（可惜换了几次手机，已经找不回当初手捧着书的合照了）&lt;/p&gt;</description>
      <content:encoded><![CDATA[<h2 id="缘起"><span class="section-num">1</span> 缘起</h2>
<p>正如我在之前博客文章《<a href="https://ramsayleung.github.io/zh/post/2023/%E8%BF%99%E4%BA%9B%E5%B9%B4%E8%B5%B0%E8%BF%87%E7%9A%84%E8%B7%AF_%E4%BB%8E%E5%B9%BF%E5%B7%9E%E5%88%B0%E6%B8%A9%E5%93%A5%E5%8D%8E/">这些年走过的路：从广州到温哥华</a>》<sup id="fnref:1"><a href="#fn:1" class="footnote-ref" role="doc-noteref">1</a></sup>提到的那样，我在大二暑假的时候因缘际会，获得了去一家在深圳的初创公司实习的 Offer。</p>
<p>实习的两个多月时间也快就过去了，我也顺利拿到了 Return Offer，公司也非常有人情味地给实习生办了个欢送典礼。</p>
<p>当时实习的导师，也是这家公司的副总裁，加州州立大学的<a href="https://www.linkedin.com/in/yingliu37">刘颖</a>教授<sup id="fnref:2"><a href="#fn:2" class="footnote-ref" role="doc-noteref">2</a></sup>，在欢送典礼上给我们几个实习生每人都赠送了一本书作为临别礼物。（可惜换了几次手机，已经找不回当初手捧着书的合照了）</p>
<p>他说这是一本可以帮助我们了解程序本质，以及学习抽象的好书，这本书就叫《<a href="https://book.douban.com/subject/1148282/">计算机程序的构造和解释</a>》<sup id="fnref:3"><a href="#fn:3" class="footnote-ref" role="doc-noteref">3</a></sup>（Structure and Interpretation of Computer Programs, 简称 SICP，下文使用 SICP 代称）</p>
<p>收到这本书时，我并未料到它会成为一场长达八年的拉锯战。</p>
<h2 id="好书不愉悦"><span class="section-num">2</span> 好书不愉悦</h2>
<p>我在2016年收到这本书，从2017年开始阅读，中间中断了好几次又重新拾起，而时至今日也只读了一半，即五个章节中的前三章。</p>
<p>翻看自己一直以来阅读这本书的日记，总有种看胡适先生一直在打牌的留学日记一样的感受：</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt"> 1
</span><span class="lnt"> 2
</span><span class="lnt"> 3
</span><span class="lnt"> 4
</span><span class="lnt"> 5
</span><span class="lnt"> 6
</span><span class="lnt"> 7
</span><span class="lnt"> 8
</span><span class="lnt"> 9
</span><span class="lnt">10
</span><span class="lnt">11
</span><span class="lnt">12
</span><span class="lnt">13
</span><span class="lnt">14
</span><span class="lnt">15
</span><span class="lnt">16
</span><span class="lnt">17
</span><span class="lnt">18
</span><span class="lnt">19
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-org" data-lang="org"><span class="line"><span class="cl"><span class="gu">**</span> DOING Read The Structure And Interpretation of Computer Programs
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">   Read SICP everyday, at least 1 hour
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c">   :LOGBOOK:
</span></span></span><span class="line"><span class="cl"><span class="c"></span><span class="cs">   CLOCK: [2017-04-03 Mon 20:26]--[2017-04-03 Mon 21:25] =&gt;  0:59
</span></span></span><span class="line"><span class="cl"><span class="cs">   CLOCK: [2017-03-14 Tue 23:15]--[2017-03-14 Tue 23:40] =&gt;  0:25
</span></span></span><span class="line"><span class="cl"><span class="cs">   CLOCK: [2017-03-14 Tue 22:45]--[2017-03-14 Tue 23:10] =&gt;  0:25
</span></span></span><span class="line"><span class="cl"><span class="cs">   CLOCK: [2017-03-12 Sun 15:46]--[2017-03-12 Sun 16:11] =&gt;  0:25
</span></span></span><span class="line"><span class="cl"><span class="cs">   CLOCK: [2017-03-12 Sun 15:13]--[2017-03-12 Sun 15:38] =&gt;  0:25
</span></span></span><span class="line"><span class="cl"><span class="cs"></span><span class="c">   :END:</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">   &lt;<span class="s">2022-10-08 Sat</span>&gt;
</span></span><span class="line"><span class="cl"><span class="c">   #+begin_comment
</span></span></span><span class="line"><span class="cl"><span class="c">   读了6年了，还是没有读完，重新开始读
</span></span></span><span class="line"><span class="cl"><span class="c">   #+end_comment</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">   &lt;<span class="s">2025-05-25 Sun</span>&gt;
</span></span><span class="line"><span class="cl">   读了8年，还是没有读完，又开始读
</span></span></code></pre></td></tr></table>
</div>
</div><p>看到这里，可能没有读过 SICP 可能会奇怪，为什么读一本书要这么久，如果蜻蜓点水，水过鸭背那样子读完一本书，自然只需要不停地翻页即可。</p>
<p>而 SICP 为了帮助你掌控书中讲解的知识和要点，会有大量的习题，并且把非常多额外的知识点都嵌入到习题中，以练带学。</p>
<p>就数量而言，章节一有46道习题，章节二有97道习题，章节三有82道习题。
如果跳过这些习题，这本书的内容不仅少了一半，而且也失去其精髓，可谓是买椟还珠。</p>
<p>此外，习题不仅数量多，还有相当难度，我每天花一到两个小时阅读，只能完成1-2道习题。</p>
<p>习题完成情况:</p>
<ul>
<li>章节一: 43/46</li>
<li>章节二: 88/97</li>
<li>章节三: 72/82</li>
<li>章节四: TODO</li>
<li>章节五: TODO</li>
</ul>
<p>我把所有的题解都放到了 GitHub 项目: <a href="https://github.com/ramsayleung/sicp_solution">https://github.com/ramsayleung/sicp_solution</a>, 并为大部分的题解都配套了单元测试，以验证其正确性，还加上了 GitHub Action 作 CI.</p>
<p>经年累月，我的题解代码和笔记都接近一万行了，这也能侧面说明我为什么读得这么慢了：</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt"> 1
</span><span class="lnt"> 2
</span><span class="lnt"> 3
</span><span class="lnt"> 4
</span><span class="lnt"> 5
</span><span class="lnt"> 6
</span><span class="lnt"> 7
</span><span class="lnt"> 8
</span><span class="lnt"> 9
</span><span class="lnt">10
</span><span class="lnt">11
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-sh" data-lang="sh"><span class="line"><span class="cl">&gt; tokei .
</span></span><span class="line"><span class="cl"><span class="o">===============================================================================</span>
</span></span><span class="line"><span class="cl">Language            Files        Lines         Code     Comments       <span class="nv">Blanks</span>
</span></span><span class="line"><span class="cl"><span class="o">===============================================================================</span>
</span></span><span class="line"><span class="cl">Markdown                <span class="m">1</span>           <span class="m">65</span>            <span class="m">0</span>           <span class="m">46</span>           <span class="m">19</span>
</span></span><span class="line"><span class="cl">Org                    <span class="m">70</span>         <span class="m">2757</span>         <span class="m">2163</span>            <span class="m">0</span>          <span class="m">594</span>
</span></span><span class="line"><span class="cl">Racket                 <span class="m">71</span>         <span class="m">3976</span>         <span class="m">3086</span>          <span class="m">256</span>          <span class="m">634</span>
</span></span><span class="line"><span class="cl">Scheme                 <span class="m">77</span>         <span class="m">2479</span>         <span class="m">1898</span>          <span class="m">110</span>          <span class="nv">471</span>
</span></span><span class="line"><span class="cl"><span class="o">===============================================================================</span>
</span></span><span class="line"><span class="cl">Total                 <span class="m">219</span>         <span class="m">9277</span>         <span class="m">7147</span>          <span class="m">412</span>         <span class="nv">1718</span>
</span></span><span class="line"><span class="cl"><span class="o">===============================================================================</span>
</span></span></code></pre></td></tr></table>
</div>
</div><p>毕竟大部分真正让人进步的阅读，读起来都不是愉悦的：</p>
<blockquote>
<p>世之奇伟、瑰怪、非常之观，常在于险远，而人之所罕至焉，故非有志者不能至也。</p>
<p>&mdash;-王安石《游褒禅山记》</p></blockquote>
<h2 id="主旨"><span class="section-num">3</span> 主旨</h2>
<p>如果笼统地概括整本书，“无非”是「抽象」，通过使用一门非常简单的语言 <code>Scheme</code>, 以及几个非常简单的操作 <code>cons(构造一个序对)</code>, <code>car(取出序对的第一个值)</code>, <code>cdr(取出序对的第二个值)</code>:</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span><span class="lnt">2
</span><span class="lnt">3
</span><span class="lnt">4
</span><span class="lnt">5
</span><span class="lnt">6
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-scheme" data-lang="scheme"><span class="line"><span class="cl"><span class="nv">&gt;</span> <span class="p">(</span><span class="nb">cons </span><span class="mi">1</span> <span class="mi">2</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="o">&#39;</span><span class="p">(</span><span class="mi">1</span> <span class="o">.</span> <span class="mi">2</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="nv">&gt;</span> <span class="p">(</span><span class="nb">car </span><span class="p">(</span><span class="nb">cons </span><span class="mi">1</span> <span class="mi">2</span><span class="p">))</span>
</span></span><span class="line"><span class="cl"><span class="mi">1</span>
</span></span><span class="line"><span class="cl"><span class="nv">&gt;</span> <span class="p">(</span><span class="nb">cdr </span><span class="p">(</span><span class="nb">cons </span><span class="mi">1</span> <span class="mi">2</span><span class="p">))</span>
</span></span><span class="line"><span class="cl"><span class="mi">2</span>
</span></span></code></pre></td></tr></table>
</div>
</div><p>构造出各种数据结构，如链表，队列，哈希表以及更复杂的组合数据结构; 探寻各种概念，如递归，闭包，高阶函数，赋值，流，程序优化等；</p>
<p>而后两章更进一步，第四章介绍如何实现一个 Scheme 简单的解释器，一个简单的 Prolog 解释器；而第五章介绍计算机体系结构的 CPU 设计，编译器，垃圾回收等。</p>
<p>从括号中的几个简单函数，到最后造出整个计算机体系，有种《道德经》里道生万物的感觉：</p>
<blockquote>
<p>道生一，一生二，二生三，三生万物。</p></blockquote>
<h2 id="计算机科学与工程"><span class="section-num">4</span> 计算机科学与工程</h2>
<p>我本科专业读的是软件工程(Software Engineering )，翻看当初的专业培养计划，从计算机导论开始入门，到程序设计基础，面向对象程序设计基础，数据结构，操作系统，计算机组成原理，再到计算机网络，汇编与编译原理，数据库原理到软件工程等。</p>
<p>学习完这些课程，可以成为一个合格的软件工程师，但广义的计算机专业还有一门专业，叫计算机科学(Computer Science)，我一直很疑惑两者之间的差别是什么，就我所见过的不同学校的培养计划里面，两者的课程都非常相似。</p>
<p>而在阅读这本1984年麻省理工就出版的计算机科学的教材时，我找到了我想要的答案。</p>
<p>最初的计算机科学是数学，电子工程和软件设计的交叉学科，计算机科学的学生需要兼备这三者的专业知识。</p>
<p>而三位作者也是高屋建瓴，在数学，电子工程和软件领域旁征博引，各种知识信手拈来，
如练习3.59关于微积分的内容，通过流来处理幂等数积分，练习3.60-3.62都是关于积分的内容。</p>
<p>如3.5章里面，通过流来描述信号处理系统中的「信号」，
练习3.73用程序的流(stream)来表示电流或者电压在时间序列上的值，用以模拟电子线路。</p>
<p>如 3.3章里面，通过程序来建立数字电路的反门，与门，或门，再通过这样的电子元件建立起半加器，
再通过多个半加器实现全加器，实现二进制的加法，从程序到模拟电路，再用模拟电路来构造计算机的处理器。</p>
<p>不同学科的知识在一本书中融会贯通，再配合这个 <code>eval-apply</code> 表达式的配图，总有一种太极的感觉，难免让我有种读计算机哲学书的感觉:</p>

<figure>
    
    
    <input type="checkbox" id="zoomCheck-28ab8" hidden>
    <label for="zoomCheck-28ab8">
    
    
    <img class="zoomCheck" loading="lazy" src="/ox-hugo/apply_eval.jpg"/> 
    
    
    </label>
</figure>

<h2 id="优美的括号"><span class="section-num">5</span> 优美的括号</h2>
<p>书中那些非常有趣或者优美的代码</p>
<h3 id="图形构造-从点到面的抽象"><span class="section-num">5.1</span> 图形构造：从点到面的抽象</h3>
<p>第二章介绍了复合的数据结构时，就提到了如何去画图，先画点，再画线，然后要求完成习题连线成面，构造出图形。</p>

<figure>
    
    
    <input type="checkbox" id="zoomCheck-91228" hidden>
    <label for="zoomCheck-91228">
    
    
    <img class="zoomCheck" loading="lazy" src="/ox-hugo/exercise-2-52-wave.png"/> 
    
    
    </label>
</figure>

<p>新的习题再要求通过变换，组合图形，构造新的复杂图形:</p>

<figure>
    
    
    <input type="checkbox" id="zoomCheck-f815c" hidden>
    <label for="zoomCheck-f815c">
    
    
    <img class="zoomCheck" loading="lazy" src="/ox-hugo/wave-square-limit.png"/> 
    
    
    </label>
</figure>

<p>最后把类似的变换应用到图片上:</p>

<figure>
    
    
    <input type="checkbox" id="zoomCheck-93de8" hidden>
    <label for="zoomCheck-93de8">
    
    
    <img class="zoomCheck" loading="lazy" src="/ox-hugo/square-limit-einstein.png"/> 
    
    
    </label>
</figure>

<h3 id="蒙特卡罗模拟来计算-π"><span class="section-num">5.2</span> 蒙特卡罗模拟来计算 π</h3>
<p>所谓的蒙特卡罗模拟（Monte Carlo Simulation）是一种通过随机采样和统计计算来求解的数值方法，通过大量随机实验模拟不确定性，从而估算复杂系统的可能结果。</p>
<p>用人话来说就是不断地试，在试错的过程中逼近确定解，试的次数越多，结果越准确。</p>
<p>书中就介绍了一种通过蒙特卡罗模拟来计算 π 的方法, 就像通过随机撒豆子估算圆的面积，概率统计将抽象的π转化为可计算的实验：</p>
<blockquote>
<p>举例来说，6/π^2 是随机选取的两个整数之间没有公因子（也就是说，它们的最大公因子是1）的概率。我们可以利用这一事实做出π的近似值。</p></blockquote>
<p>完全读不懂这段话，没理解是怎么可以算出π的近似值的。</p>
<p>查阅资料后得知:</p>
<p>随机选取两个正整数，它们互质（即最大公约数GCD为1）的概率是 \(\frac{6}{\pi^2}\) , 所谓的 互质指两个数没有公共因子（如8和15互质，但8和12不互质，因为公约数为4）。</p>
<p>这一结论源自数论中的经典定理（涉及黎曼ζ函数），我们只需利用其概率公式反推π即可。</p>
<p>而用蒙特卡罗模拟步骤来计算 \({\pi}\):</p>
<p>随机实验：重复多次随机选取两个整数，检查它们的GCD是否为1。</p>
<p>例如：</p>
<ul>
<li>(3, 5) → GCD=1（计数+1）</li>
<li>(4, 6) → GCD=2（不计数）</li>
</ul>
<p>统计概率：</p>
<p>若总实验次数为 N，其中 k 次GCD=1，则互质概率的估计值为 \(\frac{k}{N}\)</p>
<p>关联π：</p>
<p>根据数论结论 \(\frac{k}{N} \approx \frac{6}{\pi^2}\)，解得 \(\pi \approx \sqrt{\frac{6N}{k}}\)。</p>
<p>当直接计算π困难时，可通过概率实验间接逼近。</p>
<p>这里利用了数论中的概率规律，将π与随机事件联系起来。(高等数学对于我来说已是雪泥鸿爪，更遑论数论的知识了)</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt"> 1
</span><span class="lnt"> 2
</span><span class="lnt"> 3
</span><span class="lnt"> 4
</span><span class="lnt"> 5
</span><span class="lnt"> 6
</span><span class="lnt"> 7
</span><span class="lnt"> 8
</span><span class="lnt"> 9
</span><span class="lnt">10
</span><span class="lnt">11
</span><span class="lnt">12
</span><span class="lnt">13
</span><span class="lnt">14
</span><span class="lnt">15
</span><span class="lnt">16
</span><span class="lnt">17
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-racket" data-lang="racket"><span class="line"><span class="cl"><span class="kn">#lang </span><span class="nn">racket</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="p">(</span><span class="k">define</span> <span class="p">(</span><span class="n">estimate-pi</span> <span class="n">trials</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">  <span class="p">(</span><span class="nb">sqrt</span> <span class="p">(</span><span class="nb">/</span> <span class="mi">6</span> <span class="p">(</span><span class="n">monte-carlo</span> <span class="n">trials</span> <span class="n">cesaro-test</span><span class="p">))))</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="p">(</span><span class="k">define</span> <span class="p">(</span><span class="n">cesaro-test</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">  <span class="p">(</span><span class="nb">=</span> <span class="p">(</span><span class="nb">gcd</span> <span class="p">(</span><span class="n">rand</span><span class="p">)</span> <span class="p">(</span><span class="n">rand</span><span class="p">))</span> <span class="mi">1</span><span class="p">))</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="p">(</span><span class="k">define</span> <span class="p">(</span><span class="n">monte-carlo</span> <span class="n">trials</span> <span class="n">experiment</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">  <span class="p">(</span><span class="k">define</span> <span class="p">(</span><span class="n">iter</span> <span class="n">trials-remaining</span> <span class="n">trial-passed</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="p">(</span><span class="k">cond</span> <span class="p">((</span><span class="nb">=</span> <span class="n">trials-remaining</span> <span class="mi">0</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">           <span class="p">(</span><span class="nb">/</span> <span class="n">trials-passed</span> <span class="n">trials</span><span class="p">))</span>
</span></span><span class="line"><span class="cl">          <span class="p">((</span><span class="n">experiment</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">           <span class="p">(</span><span class="n">iter</span> <span class="p">(</span><span class="nb">-</span> <span class="n">trials-remaining</span> <span class="mi">1</span><span class="p">)</span> <span class="p">(</span><span class="nb">+</span> <span class="n">trials-passed</span> <span class="mi">1</span><span class="p">)))</span>
</span></span><span class="line"><span class="cl">          <span class="p">(</span><span class="k">else</span>
</span></span><span class="line"><span class="cl">           <span class="p">(</span><span class="n">iter</span> <span class="p">(</span><span class="nb">-</span> <span class="n">trials-remaining</span> <span class="mi">1</span><span class="p">)</span> <span class="n">trials-passed</span><span class="p">))))</span>
</span></span><span class="line"><span class="cl">  <span class="p">(</span><span class="n">iter</span> <span class="n">trials</span> <span class="mi">0</span><span class="p">))</span><span class="err">
</span></span></span></code></pre></td></tr></table>
</div>
</div><p>这里的蒙特卡罗实现真的是优雅，它将数学理论（互质概率）转化为寥寥数行的递归实验。</p>
<p>而基于流的实现更是优美:</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt"> 1
</span><span class="lnt"> 2
</span><span class="lnt"> 3
</span><span class="lnt"> 4
</span><span class="lnt"> 5
</span><span class="lnt"> 6
</span><span class="lnt"> 7
</span><span class="lnt"> 8
</span><span class="lnt"> 9
</span><span class="lnt">10
</span><span class="lnt">11
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-scheme" data-lang="scheme"><span class="line"><span class="cl"><span class="p">(</span><span class="k">define </span><span class="p">(</span><span class="nf">monte-carlo</span> <span class="nv">experiment-stream</span> <span class="nv">passed</span> <span class="nv">failed</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">  <span class="p">(</span><span class="k">define </span><span class="p">(</span><span class="nf">next</span> <span class="nv">passed</span> <span class="nv">failed</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="p">(</span><span class="nf">cons-stream</span>
</span></span><span class="line"><span class="cl">     <span class="p">(</span><span class="nb">/ </span><span class="nv">passed</span> <span class="p">(</span><span class="nb">+ </span><span class="nv">passed</span> <span class="nv">failed</span><span class="p">))</span>
</span></span><span class="line"><span class="cl">     <span class="p">(</span><span class="nf">monte-carlo</span>
</span></span><span class="line"><span class="cl">      <span class="p">(</span><span class="nf">stream-cdr</span> <span class="nv">experiment-stream</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">      <span class="nv">passed</span>
</span></span><span class="line"><span class="cl">      <span class="nv">failed</span><span class="p">)))</span>
</span></span><span class="line"><span class="cl">  <span class="p">(</span><span class="k">if </span><span class="p">(</span><span class="nf">stream-car</span> <span class="nv">experiment-stream</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">      <span class="p">(</span><span class="nf">next</span> <span class="p">(</span><span class="nb">+ </span><span class="nv">passed</span> <span class="mi">1</span><span class="p">)</span> <span class="nv">failed</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">      <span class="p">(</span><span class="nf">next</span> <span class="nv">passed</span> <span class="p">(</span><span class="nb">+ </span><span class="nv">failed</span> <span class="mi">1</span><span class="p">))))</span>
</span></span></code></pre></td></tr></table>
</div>
</div><h2 id="尾声-括号里的计算机哲学"><span class="section-num">6</span> 尾声：括号里的计算机哲学</h2>
<p>直到今天，我也只读完前三章。有时我会问自己：这本书究竟给了我什么？</p>
<p>它没有教我实用的编程技巧，也无关面试刷题。</p>
<p>但是我好像又抓住了一些东西，尤如用手拢过一团烟雾，张开手，并未见留下什么，但是手上还残留着它的气味。</p>
<p>如今，MIT 的课程已用 Python 替代 Scheme，但 SICP 的价值从未褪色。</p>
<p>SICP 不是一本教你「如何编程」的书，而是一把钥匙，是一座桥，连接着工程的实用与科学的纯粹。</p>
<p>那些括号中的表达式，最终在我脑中化成了某种朦胧却持久的气味：</p>
<p><strong><strong>一种对抽象本质的直觉</strong></strong></p>
<h3 id="推荐阅读">推荐阅读</h3>
<ul>
<li>旅加经历
<ul>
<li><a href="https://ramsayleung.github.io/zh/post/2023/%E8%BF%99%E4%BA%9B%E5%B9%B4%E8%B5%B0%E8%BF%87%E7%9A%84%E8%B7%AF_%E4%BB%8E%E5%B9%BF%E5%B7%9E%E5%88%B0%E6%B8%A9%E5%93%A5%E5%8D%8E/">这些年走过的路：从广州到温哥华</a></li>
<li><a href="https://ramsayleung.github.io/zh/post/2023/%E5%8A%A0%E6%8B%BF%E5%A4%A7%E4%B9%8B%E5%88%9D%E4%BD%93%E9%AA%8C/">加拿大之初体验</a></li>
<li><a href="https://ramsayleung.github.io/zh/post/2024/%E7%99%BB%E9%99%86%E5%8A%A0%E6%8B%BF%E5%A4%A7%E4%B8%80%E5%B9%B4%E7%9A%84%E4%BD%93%E4%BC%9A/">登陆加拿大一年后的体会</a></li>
</ul>
</li>
<li>工具流分享
<ul>
<li><a href="https://ramsayleung.github.io/zh/post/2024/%E7%AE%80%E6%98%8E%E5%86%99%E4%BD%9C%E6%8C%87%E5%8D%97/">简明写作指南</a></li>
<li><a href="https://ramsayleung.github.io/zh/post/2023/%E6%88%91%E7%9A%84%E5%86%99%E4%BD%9C%E6%B5%81/">我的写作流</a></li>
<li><a href="https://ramsayleung.github.io/zh/post/2023/%E6%88%91%E7%9A%84%E7%94%BB%E5%9B%BE%E6%B5%81/">我的画图流：画图工具与技巧分享</a></li>
<li><a href="https://ramsayleung.github.io/zh/post/2023/%E6%88%91%E7%9A%84%E6%90%9C%E7%B4%A2%E6%B5%81/">我的搜索流：高效搜索经验分享</a></li>
<li><a href="https://ramsayleung.github.io/zh/post/2022/feynman_technique/">最好的学习方式：费曼学习法(Feynman Technique)</a></li>
<li><a href="https://ramsayleung.github.io/zh/post/2021/%E7%B3%BB%E7%BB%9F%E6%80%9D%E8%80%83/">系统思考：既见树木，又见森林</a></li>
</ul>
</li>
<li>思考感悟
<ul>
<li><a href="https://ramsayleung.github.io/zh/post/2024/%E7%BC%96%E7%A8%8B%E5%8D%81%E5%B9%B4%E7%9A%84%E6%84%9F%E6%82%9F/">编程十年的感悟</a></li>
<li><a href="https://ramsayleung.github.io/zh/post/2023/%E4%BB%8E%E5%BE%AE%E4%BF%A1%E6%94%AF%E4%BB%98%E7%A6%BB%E7%BA%BF_%E6%88%91%E5%B8%A6%E8%B5%B0%E4%BA%86%E4%BB%80%E4%B9%88/">那些年，我从微信支付学到的东西</a></li>
<li><a href="https://ramsayleung.github.io/zh/post/2025/%E6%9D%82%E8%B0%88ai%E5%8F%96%E4%BB%A3%E7%A8%8B%E5%BA%8F%E5%91%98/">杂谈ai取代程序员</a></li>
<li><a href="https://ramsayleung.github.io/zh/post/2023/%E7%BD%AE%E8%BA%AB%E4%BA%8B%E5%86%85/">为什么梦想买不起，故乡回不去</a></li>
</ul>
</li>
<li>软件工程
<ul>
<li><a href="https://ramsayleung.github.io/zh/post/2025/a_philosophy_of_software_design/">软件设计的哲学</a></li>
<li><a href="https://ramsayleung.github.io/zh/post/2024/%E6%B5%8B%E8%AF%95%E6%8A%80%E8%83%BD%E8%BF%9B%E9%98%B6%E4%B8%80_%E8%BD%AF%E4%BB%B6%E8%B4%A8%E9%87%8F%E8%AE%A4%E7%9F%A5/">测试技能进阶(一): 软件质量认知</a></li>
<li><a href="https://ramsayleung.github.io/zh/post/2024/%E6%B5%8B%E8%AF%95%E6%8A%80%E8%83%BD%E8%BF%9B%E9%98%B6%E4%BA%8C_parameterized_tests/">测试技能进阶(二): Parameterized Tests</a></li>
<li><a href="https://ramsayleung.github.io/zh/post/2024/%E6%B5%8B%E8%AF%95%E6%8A%80%E8%83%BD%E8%BF%9B%E9%98%B6%E4%B8%89_property_based_testing/">测试技能进阶(三): Property Based Testing</a></li>
</ul>
</li>
</ul>
<div class="qr-container" center>
<img src="/ox-hugo/qrcode_gh_e06d750e626f_1.jpg" alt="qrcode_gh_e06d750e626f_1.jpg" class="qr-container" width="160px" height="160px" center="t" />
公号同步更新，欢迎关注👻
</div>
<div class="footnotes" role="doc-endnotes">
<hr>
<ol>
<li id="fn:1">
<p><a href="https://ramsayleung.github.io/zh/post/2023/%E8%BF%99%E4%BA%9B%E5%B9%B4%E8%B5%B0%E8%BF%87%E7%9A%84%E8%B7%AF_%E4%BB%8E%E5%B9%BF%E5%B7%9E%E5%88%B0%E6%B8%A9%E5%93%A5%E5%8D%8E/">https://ramsayleung.github.io/zh/post/2023/%E8%BF%99%E4%BA%9B%E5%B9%B4%E8%B5%B0%E8%BF%87%E7%9A%84%E8%B7%AF_%E4%BB%8E%E5%B9%BF%E5%B7%9E%E5%88%B0%E6%B8%A9%E5%93%A5%E5%8D%8E/</a>&#160;<a href="#fnref:1" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:2">
<p><a href="https://www.linkedin.com/in/yingliu37">https://www.linkedin.com/in/yingliu37</a>&#160;<a href="#fnref:2" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:3">
<p><a href="https://book.douban.com/subject/1148282/">https://book.douban.com/subject/1148282/</a>&#160;<a href="#fnref:3" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
</ol>
</div>
]]></content:encoded>
    </item>
    <item>
      <title>软件设计的哲学</title>
      <link>https://ramsayleung.github.io/zh/post/2025/a_philosophy_of_software_design/</link>
      <pubDate>Fri, 30 May 2025 00:39:00 -0700</pubDate>
      <guid>https://ramsayleung.github.io/zh/post/2025/a_philosophy_of_software_design/</guid>
      <description>&lt;h2 id=&#34;前言&#34;&gt;&lt;span class=&#34;section-num&#34;&gt;1&lt;/span&gt; 前言&lt;/h2&gt;
&lt;p&gt;知道这本书是因为在 Hacker News 上有人提问：&lt;a href=&#34;https://news.ycombinator.com/item?id=31713756&#34;&gt;你读过最好的技术书是什么&lt;/a&gt; &lt;sup id=&#34;fnref:1&#34;&gt;&lt;a href=&#34;#fn:1&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;1&lt;/a&gt;&lt;/sup&gt;?&lt;/p&gt;
&lt;p&gt;最高赞的书是 Design Data Intensive Application(DDIA, 即《&lt;a href=&#34;https://book.douban.com/subject/30329536/&#34;&gt;数据密集型应用系统设计&lt;/a&gt;》&lt;sup id=&#34;fnref:2&#34;&gt;&lt;a href=&#34;#fn:2&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;2&lt;/a&gt;&lt;/sup&gt;), 我觉得 DDIA 也担得起这个赞誉，然后最高赞的回答顺势提到了 &lt;a href=&#34;https://book.douban.com/subject/30218046/&#34;&gt;A Philosophy Of Software Design&lt;/a&gt; &lt;sup id=&#34;fnref:3&#34;&gt;&lt;a href=&#34;#fn:3&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;3&lt;/a&gt;&lt;/sup&gt;, 想来能与 DDIA 齐名的书，肯定不会差得哪里去。&lt;/p&gt;</description>
      <content:encoded><![CDATA[<h2 id="前言"><span class="section-num">1</span> 前言</h2>
<p>知道这本书是因为在 Hacker News 上有人提问：<a href="https://news.ycombinator.com/item?id=31713756">你读过最好的技术书是什么</a> <sup id="fnref:1"><a href="#fn:1" class="footnote-ref" role="doc-noteref">1</a></sup>?</p>
<p>最高赞的书是 Design Data Intensive Application(DDIA, 即《<a href="https://book.douban.com/subject/30329536/">数据密集型应用系统设计</a>》<sup id="fnref:2"><a href="#fn:2" class="footnote-ref" role="doc-noteref">2</a></sup>), 我觉得 DDIA 也担得起这个赞誉，然后最高赞的回答顺势提到了 <a href="https://book.douban.com/subject/30218046/">A Philosophy Of Software Design</a> <sup id="fnref:3"><a href="#fn:3" class="footnote-ref" role="doc-noteref">3</a></sup>, 想来能与 DDIA 齐名的书，肯定不会差得哪里去。</p>
<p>作者是 John Ousterhout, 斯坦福大学的教授，TCL 编程语言的创造者(Redis 的初始化版本就是用 TCL 写的)，共识算法 Raft 的作者之一.</p>
<p>这本书并不厚，全书只有200多页，读起来也并不费劲。</p>
<p>而这本书的主旨，开篇就点出来了:</p>
<blockquote>
<p>This book is about how to design software systems to minimize their complexity.</p>
<p>本书讲述如何设计软件系统以最小化其复杂度</p></blockquote>
<p>而软件工程的本质就是如何管理复杂度，全书围绕如何降低软件复杂性提出的思考和解决方案，
主要围绕抽象，异常，文档，一致性，设计原则这五个方向。</p>
<p>许多原则我看着都深有共鸣，尤其在设计过相当多的系统之后，犯过许多错误之后，才会意识到这些原则的重要之处。</p>
<p>很多原则看上去说的和没说一样，但只有踩过坑，实践起来都知道是金科玉律, 除了道出「软件设计」的真谛之外, 这本书其他论点也可谓字字珠玑.</p>
<p>关于谨慎暴露过多的配置给用户，尽量让程序动态计算各种参数值，尽量提供默认参数。</p>
<blockquote>
<p>开发软件时，开发者主动承担一些额外痛苦，从而减少用户的痛苦。</p>
<p>When developing a module, look for opportunities to take a little bit of extra suffering upon yourself in order to reduce the suffering of your users.</p></blockquote>
<p>关于接口设计的原则:</p>
<blockquote>
<p>模块拥有简单的接口比简单的实现更重要。</p>
<p>it&rsquo;s more important for a module to have simple interface than a simple implementation</p></blockquote>
<p>关于异常处理的洞见:</p>
<blockquote>
<p>解决问题的最好方式是避免出现问题。</p>
<p>The best way to eliminate exception handling complexity is to define your APIs so that there are no exceptions to handle: <strong><strong>define errors out of existence</strong></strong></p>
<p>归根结底，减少 Bug 的最佳方法是让软件更简单(少即是多)</p>
<p><strong><strong>Overall, the best way to reduce bugs is to make software simpler.</strong></strong></p></blockquote>
<h2 id="抽象"><span class="section-num">2</span> 抽象</h2>
<p>所谓的抽象，用我自己的话来说的就是把复杂的东西简单地呈现出来。</p>
<h3 id="模块深度"><span class="section-num">2.1</span> 模块深度</h3>
<p>为了直观地感受一个模块设计是否足够抽象，作者提出一个模块深度的概念:</p>

<figure>
    
    
    <input type="checkbox" id="zoomCheck-ff3dd" hidden>
    <label for="zoomCheck-ff3dd">
    
    
    <img class="zoomCheck" loading="lazy" src="/ox-hugo/deep_module.jpg"/> 
    
    
    </label>
</figure>

<p>矩形的表层长度即是接口的复杂程度，而矩形的面积代表模块实现的功能，好的模块应该是深的(deep), 这意味着它有简单的接口，但是内部有复杂且丰富的实现.</p>
<p>例如 Unix 的文件读写接口:</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span><span class="lnt">2
</span><span class="lnt">3
</span><span class="lnt">4
</span><span class="lnt">5
</span><span class="lnt">6
</span><span class="lnt">7
</span><span class="lnt">8
</span><span class="lnt">9
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-c" data-lang="c"><span class="line"><span class="cl"><span class="kt">int</span> <span class="nf">open</span><span class="p">(</span><span class="k">const</span> <span class="kt">char</span><span class="o">*</span> <span class="n">path</span><span class="p">,</span> <span class="kt">int</span> <span class="n">flags</span><span class="p">,</span> <span class="kt">mode_t</span> <span class="n">permissions</span><span class="p">);</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="kt">ssize_t</span> <span class="nf">read</span><span class="p">(</span><span class="kt">int</span> <span class="n">fd</span><span class="p">,</span> <span class="kt">void</span><span class="o">*</span> <span class="n">buffer</span><span class="p">,</span> <span class="kt">size_t</span> <span class="n">count</span><span class="p">);</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="kt">ssize_t</span> <span class="nf">write</span><span class="p">(</span><span class="kt">int</span> <span class="n">fd</span><span class="p">,</span> <span class="k">const</span> <span class="kt">void</span><span class="o">*</span> <span class="n">buffer</span><span class="p">,</span> <span class="kt">size_t</span> <span class="n">count</span><span class="p">);</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="kt">off_t</span> <span class="nf">lseek</span><span class="p">(</span><span class="kt">int</span> <span class="n">fd</span><span class="p">,</span> <span class="kt">off_t</span> <span class="n">offset</span><span class="p">,</span> <span class="kt">int</span> <span class="n">referencePosition</span><span class="p">);</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="kt">int</span> <span class="nf">close</span><span class="p">(</span><span class="kt">int</span> <span class="n">fd</span><span class="p">);</span>
</span></span></code></pre></td></tr></table>
</div>
</div><p>接口非常简单，但是其内部的实现可能需要成千上万行的代码，
需要支持文件目录的读写，文件权限，读写缓冲区，磁盘读写等等功能，这就是「深的」模块。</p>
<p>与其相反的就是浅的模块(shallow), 接口很复杂，但是功能却很简单。</p>
<h3 id="信息的漏与藏"><span class="section-num">2.2</span> 信息的漏与藏</h3>
<p>实现抽象的关键手段就是辨别出信息的重要程度，对于不重要的信息，就要对用户隐藏起来，关键的信息，就要暴露给用户, 实现「去粗存精，开箱即用」。</p>
<p>一个典型的例子就是参数配置，把参数暴露给用户，除非用户非常熟悉这个系统，不然他也不知道怎么算，
不需要用户关注的参数就提供默认值，能程序动态计算就由程序自己来算.</p>
<p>我很反感的一种设计就是引入一个配置系统，系统的运行参数都要由工程师配置，美其名是提供灵活度。</p>
<p>但这不仅引入额外的系统依赖（须知复杂度的根源就来自依赖与不明确），还大大增加了的运维成本，
更何况这样的配置还无法自适应，换种机型又要重新配置，导致配置越来越复杂。</p>
<p>除非是业务的黑名单或者白名单，系统的运行参数能用默认的就用默认，能动态计算就动态计算。</p>
<p>想想TCP/IP 的重试延迟时长如果不是动态计算，那么配置什么值比较合适，网络畅通和网络延迟又该是什么值，
开始恢复时和开始堵塞时又应该是什么值的呢?</p>
<h2 id="异常"><span class="section-num">3</span> 异常</h2>
<p>异常处理是系统复杂度的关键来源之一，异常就是一种特殊的分支，系统为了处理特殊 case难免需要写很多额外的逻辑。</p>
<p>而作者提出的降低异常处理来系统复杂度影响的方法，就是优化设计，减少必须处理异常的地方。</p>
<p>解决一个问题最好的方法是避免其发生，听起来很空洞或者是很不可思议，作者举出来的例子就是 Java 的 <code>substring(int beginIndex, int endIndex)</code> 用于截取子字符串的接口, 如果 <code>endIndex</code> 超出字符长度，Java 就会抛出一个 <code>IndexOutOfBoundException</code>, 调用方就是需要考虑越界的问题。</p>
<p>但是如果 Java 的 <code>substring</code> 接口本身可以像 Python 那样支持越界，返回一个空字符串，那么调用方就完全不需要考虑越界导致的异常</p>
<p>另外一个例子是作者设计的TCL脚本中的 <code>unset</code> 指令，原意是用来删除一个变量，因为他最初的设想是变量如果不存在，用户不可能调用 <code>unset</code> 的，那么当 <code>unset</code> 操作的变量不存在，那么就会抛出异常。</p>
<p>但是很多用户就是用 <code>unset</code> 来清理可能被初始化或者未初始化的变量，现在的设计就意味用户还需要包一层 <code>try/catch</code> 才能使用 <code>unset</code>.</p>
<p>意识到这个设计错误之后，作者对 <code>unset</code> 的语义作了稍微的修正，用 <code>unset</code> 来确保指定的变量不再存在(如果变量本身不存在，那么它什么都不需要做)</p>
<p>更经典的例子就是 Windows 下面删除一个文件，相信使用过 Windows 的朋友尝试删除文件时都会遇到这样的弹窗：「文件已被打开，无法删除，请重试」</p>

<figure>
    
    
    <input type="checkbox" id="zoomCheck-bbb1b" hidden>
    <label for="zoomCheck-bbb1b">
    
    
    <img class="zoomCheck" loading="lazy" src="/ox-hugo/windows_delete_opening_file.png"/> 
    
    
    </label>
</figure>

<p>用户只能费尽心思去找打开这个文件的进程，然后把它杀掉再尝试删除，甚至只能通过关机重启来尝试删除文件。</p>
<p>但是 Unix 的处理方式就更优雅，它允许用户删除已经被其他进程打开的文件，它会对该文件做标记，让用户看来它已经被删除了，但是在打开它的进程结束前文件对应的数据都会一直存在。</p>
<p>只有在进程结束后，文件数据才会被删除掉，这样用户在删除文件时就不需要担心文件是否被使用。</p>
<p>通过优化以上的设计，减少需要用户处理的异常，这也是一个「去粗留精」的过程, 减少用户需要感知的内容。</p>
<h2 id="注释"><span class="section-num">4</span> 注释</h2>
<p>本书用了好几个章节来介绍文档与注释的重要性，命名的重要性，如何写好注释和起好名字。</p>
<p>好的文档可以大幅改善一个系统的设计，因为文档的作用就是把「对用户重要的，但是无法直接从代码中得知的关键信息告知用户」, 相当于帮用户把一个系统的关键信息给找出来。</p>
<p>不是有这么一句话： <strong><strong>程序员都讨厌写文档，但是更痛恨其他程序员不写文档。</strong></strong></p>
<p><strong><strong>而注释就是离源码最近的文档.</strong></strong></p>
<p>程序员不写注释的借口大概有这么几个（可惜它们都是不成立的）, 常见的借口与它们不成立的原因可见:</p>
<h3 id="好的代码是自解释的"><span class="section-num">4.1</span> 好的代码是自解释的</h3>
<p>如果用户必须阅读方法源码才能使用它，那就没有抽象，你相当于把实现的所有复杂度都直接暴露给用户。</p>
<p>若想通过抽象隐藏复杂性，注释必不可少</p>
<h3 id="我没有时间写注释"><span class="section-num">4.2</span> 我没有时间写注释</h3>
<p>如果你一直把写代码的优先级置于写注释之上，那么你会一直没有时间写注释，
因为一个项目结束之后总会有新的项目到来，如果你一直把写注释的优先级放在代码之后，那么你永远都不会去写注释。</p>
<p>写注释实际并不需要那么多的时间</p>
<h3 id="注释都会过期的啦"><span class="section-num">4.3</span> 注释都会过期的啦</h3>
<p>注释虽然难免会过期，但是保持与代码一致也并不会花费太多时间。</p>
<p>只有大幅需要修改代码时才需要更新注释，更何况，只有每次都不更新注释，注释才会难免过期</p>
<h3 id="我见过的注释都很烂-我为啥还要写"><span class="section-num">4.4</span> 我见过的注释都很烂，我为啥还要写</h3>
<p>别人的注释写得不好，那不正说明你可以写出好的注释嘛。</p>
<p>不能用别人的低标准来要求自己嘛。</p>
<h3 id="注释的原则"><span class="section-num">4.5</span> 注释的原则</h3>
<p>说起接口注释和文档，我一直觉得我描述下接口功能和使用场景，已经比绝大多数的同行做得好了。</p>
<p>在和现在的 L7 大佬一起工作之后，着实被他的文档所震撼。</p>
<p>不知道是因为其对代码质量和文档都有非常高的要求，还是读博士时训练出来的写作能力，
其对接口的功能，使用场景以及异常的描述都非常详尽，甚至包括代码使用示例，质量与 JDK 源码的注释不相上下, 原来真的有程序员花这么多精力写代码注释的。</p>
<h4 id="注释应当描述代码中不明显的内容"><span class="section-num">4.5.1</span> 注释应当描述代码中不明显的内容</h4>
<p><strong><strong>注释应当描述代码中不明显的内容</strong></strong>,</p>
<p>简单来说，就是要描述代码为什么要这么做，而不是描述代码是怎么做的，这相当于是把代码换成注释再写一次。</p>
<h4 id="注释先行"><span class="section-num">4.5.2</span> 注释先行</h4>
<p>很多程序员都习惯在写完代码之后才写注释，作者反其道而行， 作者推荐在定义完函数或者模块接口之后，不要马上动手写实现，
而是在这个时候在接口上把接口注释写下来，这相当于是在脑海把模块的设计再过一次。</p>
<p>写完代码再写注释，设计思路已经记不大清了，脑中更多的是实现细节，既容易把实现写成注释，又容易陷入「写完代码就不写注释」的陷阱。</p>
<h2 id="一致性"><span class="section-num">5</span> 一致性</h2>
<p>前文提到，系统的复杂度来自于两个方面「依赖」与「不明确」，
而「一致性」就是让系统的行为更加清晰明确。</p>
<p><strong><strong>它意味着相似的事情以相似的方式处理，不同的事情以不同的方式处理。</strong></strong></p>
<p>即所谓的「规圆矩方」，通过规范约束降低随意性，以及「一法通，万法通」，统一模式提升可维护性，让行为可预期。</p>
<p>一个系统的一致性一般体现在以下方面：</p>
<ol>
<li>命名(驼峰还是下划线)</li>
<li>代码风格(缩进，空格还是tab)</li>
<li>设计模式(使用特定的设计模式解决特定的问题)</li>
</ol>
<p>当然，还有通过「一致性」降低系统复杂度，走得比较极端的:</p>
<p>之前还在微信支付的时候，除上述的要求外，还要求后端只能使用一种语言(C++, Golang/JavaScript就别想了), 存储组件只能使用微信内部研发的KV(使用MySql需要向总经理申请)等等的要求.</p>
<h2 id="设计原则"><span class="section-num">6</span> 设计原则</h2>
<h3 id="通用设计"><span class="section-num">6.1</span> 通用设计</h3>
<p>好的设计应该是通用的，优先采用通用设计而非特殊场景的定制化方案，这个是减少复杂度和改善软件系统的根本原则。</p>
<p>过度定制通常是成为软件复杂度增加的首要诱因。</p>
<p>通用设计可以降低系统的整体复杂度(更少处理特殊分支的逻辑), 更深的模块(接口简单，功能丰富), 隐藏非关键信息.</p>
<p>文中提到的例子就是文本编辑器的文字插入与删除操作:</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt"> 1
</span><span class="lnt"> 2
</span><span class="lnt"> 3
</span><span class="lnt"> 4
</span><span class="lnt"> 5
</span><span class="lnt"> 6
</span><span class="lnt"> 7
</span><span class="lnt"> 8
</span><span class="lnt"> 9
</span><span class="lnt">10
</span><span class="lnt">11
</span><span class="lnt">12
</span><span class="lnt">13
</span><span class="lnt">14
</span><span class="lnt">15
</span><span class="lnt">16
</span><span class="lnt">17
</span><span class="lnt">18
</span><span class="lnt">19
</span><span class="lnt">20
</span><span class="lnt">21
</span><span class="lnt">22
</span><span class="lnt">23
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-java" data-lang="java"><span class="line"><span class="cl"><span class="c1">// 反例：过度定制（绑定特殊场景）, 实现删除键功能</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="kd">class</span> <span class="nc">TextEditor</span><span class="w"> </span><span class="p">{</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="kt">void</span><span class="w"> </span><span class="nf">handleBackspaceKey</span><span class="p">()</span><span class="w"> </span><span class="p">{</span><span class="w"> </span><span class="c1">// 耦合UI事件</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">        </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">cursorPosition</span><span class="w"> </span><span class="o">&gt;</span><span class="w"> </span><span class="n">0</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">            </span><span class="n">text</span><span class="p">.</span><span class="na">deleteCharAt</span><span class="p">(</span><span class="n">cursorPosition</span><span class="w"> </span><span class="o">-</span><span class="w"> </span><span class="n">1</span><span class="p">);</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">            </span><span class="n">cursorPosition</span><span class="o">--</span><span class="p">;</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">        </span><span class="p">}</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="p">}</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="p">}</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="c1">// 正例：通用设计（解耦核心逻辑）</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="kd">class</span> <span class="nc">Text</span><span class="w"> </span><span class="p">{</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="kt">void</span><span class="w"> </span><span class="nf">delete</span><span class="p">(</span><span class="kt">int</span><span class="w"> </span><span class="n">start</span><span class="p">,</span><span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">end</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"> </span><span class="c1">// 纯文本操作</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">        </span><span class="n">content</span><span class="p">.</span><span class="na">delete</span><span class="p">(</span><span class="n">start</span><span class="p">,</span><span class="w"> </span><span class="n">end</span><span class="p">);</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="p">}</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="p">}</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="kd">class</span> <span class="nc">UI</span><span class="w"> </span><span class="p">{</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="kt">void</span><span class="w"> </span><span class="nf">onBackspacePressed</span><span class="p">()</span><span class="w"> </span><span class="p">{</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">        </span><span class="n">text</span><span class="p">.</span><span class="na">delete</span><span class="p">(</span><span class="n">cursor</span><span class="p">.</span><span class="na">position</span><span class="p">(),</span><span class="w"> </span><span class="n">cursor</span><span class="p">.</span><span class="na">position</span><span class="p">()</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="n">1</span><span class="p">);</span><span class="w"> </span><span class="c1">// 调用通用API</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">        </span><span class="n">cursor</span><span class="p">.</span><span class="na">moveLeft</span><span class="p">();</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="p">}</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="p">}</span><span class="w">
</span></span></span></code></pre></td></tr></table>
</div>
</div><p>通过 <code>delete(int start, int end)</code> 既可以实现删除键功能，也可以实现选中并删除的功能。</p>
<h3 id="性能"><span class="section-num">6.2</span> 性能</h3>
<p>在设计系统的时候，一般不需要太多地考虑性能的问题，因为简单，通用的系统要做性能优化通常都是比较容易；
相反而言，深度定制的系统因为耦合了定义逻辑，要优化性能并没有那么容易。</p>
<h3 id="设计两次"><span class="section-num">6.3</span> 设计两次</h3>
<p>Design it twice</p>
<p>因为很难一次就把事情做到极致, 那就再来一次, 设计时把能想到的选项都列下来.</p>
<p>反直觉的是，第一直觉通常不是最优的, 所以不要只考虑一种设计方案，无论它看起来多么合理，多对比下其他方案总没有害处的。</p>
<p>只用第一直觉的方案，其实你是在低估自己的潜力，你错失了找到更好方案的机会。</p>
<p>这也是我在写设计方案时候的做法，把自己能想到的，和同事讨论出来的所有方案都写上，然后分析各种方案的优劣, 最好的方案可能并不在原有方案列表里面，而是其中几个方案的合体。</p>
<h3 id="大局观"><span class="section-num">6.4</span> 大局观</h3>
<p>做任何事都要有大局观, 编程也不例外，战略编程优于战术编程(Strategic Programming over Tactical Programming);</p>
<p>虽然我们一直说「又不是不能跑」，但是我们对代码的要求，不能是「能跑就行啦」.</p>
<p>再者就是要和扁鹊他大哥治病一样，把功夫都做在前期，防范于未然，修补错误成本往往也越往后越高，病入膏肓之后，扁鹊来了也要提桶跑路:</p>
<blockquote>
<p>治不了，等死吧，告辞</p></blockquote>
<h2 id="代码整洁之道vs软件设计哲学"><span class="section-num">7</span> 代码整洁之道vs软件设计哲学</h2>
<p>本书的作者对<a href="https://book.douban.com/subject/34986245/">《代码整洁之道》</a>(Clean Code)<sup id="fnref:4"><a href="#fn:4" class="footnote-ref" role="doc-noteref">4</a></sup> 的作者(Robert C. Martin, 即 Uncle Bob)的诸多观点作了反驳</p>
<h3 id="函数拆分"><span class="section-num">7.1</span> 函数拆分</h3>
<p>比如关于什么时候应该拆分一个函数，Uncle Bob 的观点是，基于函数的代码行数，一个函数需要相当短，甚至10行都有太长了。</p>
<p>Uncle Bob 原话:</p>
<blockquote>
<p>In the book Clean Code1, Robert Martin argues that functions should be broken up on length alone. He says that functions should be extremely short, and that even 10 lines is too long.</p></blockquote>
<p>而本书作者 John 的观点是: <strong><strong>每个函数应只做一件事，并完整地做好</strong></strong></p>
<p>函数的接口应当简洁，这样调用者无需记住大量信息就能正确使用它。</p>
<p>函数应当具备深度：其接口应远比实现更简单。如果一个函数满足以上所有特性，那么它的长度通常并不重要。</p>
<p><strong><strong>除非能让整个系统更简单，否则不应拆分函数</strong></strong></p>
<h3 id="文档注释"><span class="section-num">7.2</span> 文档注释</h3>
<p>Uncle Bob 认为需要给函数「注释始终是一种失败(<strong><strong>Comments are always failures</strong></strong>)」</p>
<p>如果我们的编程语言足够富有表现力，或者如果我们有能力用好这些语言来传达意图，那么我们就不太需要注释——甚至可能完全不需要.</p>
<p><strong><strong>注释的正确用途，是弥补我们无法用代码清晰表达的缺陷……注释始终是一种失败</strong></strong></p>
<blockquote>
<p>If our programming languages were expressive enough, or if we had the talent to subtly wield those languages to express our intent, we would not need comments very much — perhaps not at all.</p>
<p>he proper use of comments is to compensate for our failure to express ourselves in code&hellip;. Comments are always failures.</p></blockquote>
<p>而 John 的观点是</p>
<p>但注释并非失败的表现。</p>
<p><strong><strong>它们提供的信息与代码截然不同，而这些信息目前无法通过代码本身来表达。</strong></strong></p>
<p><strong><strong>注释的作用之一，正是让人无需阅读代码即可理解其含义</strong></strong></p>
<p>甚至直接反驳其观点:</p>
<blockquote>
<p>I worry that Martin’s philosophy encourages a bad attitude in programmers, where they avoid comments so as not to seem like failures.</p></blockquote>
<h3 id="网上对线"><span class="section-num">7.3</span> 网上对线</h3>
<p>所以也难怪 Uncle Bob 和 John Ousterhout 几个月前直接在网上论坛来了一次 <del>对线</del> (<a href="https://news.ycombinator.com/item?id=43166362">辩论)</a> <sup id="fnref:5"><a href="#fn:5" class="footnote-ref" role="doc-noteref">5</a></sup></p>
<p>然后有看热闹不嫌事大的播主，把两人邀请到直播上，让他们直接面对面再来了一次对线</p>
<p>对应的Youtube视频: <a href="https://www.youtube.com/watch?v=3Vlk6hCWBw0">https://www.youtube.com/watch?v=3Vlk6hCWBw0</a></p>
<p>两位的书我都看过，我个人的感觉是《代码整洁之道》更适合入门的工程师，它可以教你如何写出好的「代码片段」；
而《软件设计的哲学》更适合需要做系统设计的工程师，它指导你如何设计好的「软件」。</p>
<p>考虑到两位作者的背景和作品，我可以说两位的差别可以说是 <strong><strong>以编程为生的人与以写编程相关的东西为生的人</strong></strong></p>
<h2 id="总结"><span class="section-num">8</span> 总结</h2>
<p>全书读完，我觉得《软件设计的哲学》绝对是配得上最好的技术书籍之一的赞誉。</p>
<p>但是不同的人读起来可能会有不同的感觉，其中的许多原则真的是做过设计，踩过坑才会有所共鸣, 否则会觉得其泛泛其谈。</p>
<p>当然，我也不是完全同意书中的所有观点的。</p>
<p>比如书中提到的会导致代码意图不「明显」的其中一种做法是声明的类型与初始化的类型不一致的情况:</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span><span class="lnt">2
</span><span class="lnt">3
</span><span class="lnt">4
</span><span class="lnt">5
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-java" data-lang="java"><span class="line"><span class="cl"><span class="kd">private</span><span class="w"> </span><span class="n">List</span><span class="o">&lt;</span><span class="n">Message</span><span class="o">&gt;</span><span class="w"> </span><span class="n">incomingMessageList</span><span class="p">;</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="p">...</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="n">incomingMessageList</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="k">new</span><span class="w"> </span><span class="n">ArrayList</span><span class="o">&lt;</span><span class="n">Message</span><span class="o">&gt;</span><span class="p">();</span><span class="w">
</span></span></span></code></pre></td></tr></table>
</div>
</div><p>上面声明的是 <code>List&lt;Message&gt;</code>, 实际使用的 <code>ArrayList&lt;Message&gt;</code>, 这可能会误导用户，因为意图不清晰，阅读代码的人可能不确定是否需要使用 <code>List</code> 或者 <code>ArrayList</code>, 最好是声明和初始化都换成相同的类型。</p>
<p>但是 <code>List</code> 是接口, <code>ArrayList</code> 是接口的具体实现，这个就是非常标准的面向对象编程中的多态，这并不什么问题。</p>
<p>但瑕不掩瑜，全书读完，把书盖上后，我有种齿颊留香, 余音绕梁的感觉，书里有很多「熟悉的味道」，总是让我想起经手过的项目中种种的好代码和「坏」代码.</p>
<h2 id="推荐阅读">推荐阅读</h2>
<ul>
<li>旅加经历
<ul>
<li><a href="https://ramsayleung.github.io/zh/post/2023/%E8%BF%99%E4%BA%9B%E5%B9%B4%E8%B5%B0%E8%BF%87%E7%9A%84%E8%B7%AF_%E4%BB%8E%E5%B9%BF%E5%B7%9E%E5%88%B0%E6%B8%A9%E5%93%A5%E5%8D%8E/">这些年走过的路：从广州到温哥华</a></li>
<li><a href="https://ramsayleung.github.io/zh/post/2023/%E5%8A%A0%E6%8B%BF%E5%A4%A7%E4%B9%8B%E5%88%9D%E4%BD%93%E9%AA%8C/">加拿大之初体验</a></li>
<li><a href="https://ramsayleung.github.io/zh/post/2024/%E7%99%BB%E9%99%86%E5%8A%A0%E6%8B%BF%E5%A4%A7%E4%B8%80%E5%B9%B4%E7%9A%84%E4%BD%93%E4%BC%9A/">登陆加拿大一年后的体会</a></li>
</ul>
</li>
<li>工具流分享
<ul>
<li><a href="https://ramsayleung.github.io/zh/post/2024/%E7%AE%80%E6%98%8E%E5%86%99%E4%BD%9C%E6%8C%87%E5%8D%97/">简明写作指南</a></li>
<li><a href="https://ramsayleung.github.io/zh/post/2023/%E6%88%91%E7%9A%84%E5%86%99%E4%BD%9C%E6%B5%81/">我的写作流</a></li>
<li><a href="https://ramsayleung.github.io/zh/post/2023/%E6%88%91%E7%9A%84%E7%94%BB%E5%9B%BE%E6%B5%81/">我的画图流：画图工具与技巧分享</a></li>
<li><a href="https://ramsayleung.github.io/zh/post/2023/%E6%88%91%E7%9A%84%E6%90%9C%E7%B4%A2%E6%B5%81/">我的搜索流：高效搜索经验分享</a></li>
<li><a href="https://ramsayleung.github.io/zh/post/2022/feynman_technique/">最好的学习方式：费曼学习法(Feynman Technique)</a></li>
<li><a href="https://ramsayleung.github.io/zh/post/2021/%E7%B3%BB%E7%BB%9F%E6%80%9D%E8%80%83/">系统思考：既见树木，又见森林</a></li>
</ul>
</li>
<li>思考感悟
<ul>
<li><a href="https://ramsayleung.github.io/zh/post/2024/%E7%BC%96%E7%A8%8B%E5%8D%81%E5%B9%B4%E7%9A%84%E6%84%9F%E6%82%9F/">编程十年的感悟</a></li>
<li><a href="https://ramsayleung.github.io/zh/post/2023/%E4%BB%8E%E5%BE%AE%E4%BF%A1%E6%94%AF%E4%BB%98%E7%A6%BB%E7%BA%BF_%E6%88%91%E5%B8%A6%E8%B5%B0%E4%BA%86%E4%BB%80%E4%B9%88/">那些年，我从微信支付学到的东西</a></li>
<li><a href="https://ramsayleung.github.io/zh/post/2025/%E6%9D%82%E8%B0%88ai%E5%8F%96%E4%BB%A3%E7%A8%8B%E5%BA%8F%E5%91%98/">杂谈ai取代程序员</a></li>
<li><a href="https://ramsayleung.github.io/zh/post/2023/%E7%BD%AE%E8%BA%AB%E4%BA%8B%E5%86%85/">为什么梦想买不起，故乡回不去</a></li>
</ul>
</li>
<li>软件工程
<ul>
<li><a href="https://ramsayleung.github.io/zh/post/2025/structure_and_interpretation_of_computer_programs/">一本读了八年还没读完的书</a></li>
<li><a href="https://ramsayleung.github.io/zh/post/2024/%E6%B5%8B%E8%AF%95%E6%8A%80%E8%83%BD%E8%BF%9B%E9%98%B6%E4%B8%80_%E8%BD%AF%E4%BB%B6%E8%B4%A8%E9%87%8F%E8%AE%A4%E7%9F%A5/">测试技能进阶(一): 软件质量认知</a></li>
<li><a href="https://ramsayleung.github.io/zh/post/2024/%E6%B5%8B%E8%AF%95%E6%8A%80%E8%83%BD%E8%BF%9B%E9%98%B6%E4%BA%8C_parameterized_tests/">测试技能进阶(二): Parameterized Tests</a></li>
<li><a href="https://ramsayleung.github.io/zh/post/2024/%E6%B5%8B%E8%AF%95%E6%8A%80%E8%83%BD%E8%BF%9B%E9%98%B6%E4%B8%89_property_based_testing/">测试技能进阶(三): Property Based Testing</a></li>
</ul>
</li>
</ul>
<div class="qr-container" center>
<img src="/ox-hugo/qrcode_gh_e06d750e626f_1.jpg" alt="qrcode_gh_e06d750e626f_1.jpg" class="qr-container" width="160px" height="160px" center="t" />
公号同步更新，欢迎关注👻
</div>
<div class="footnotes" role="doc-endnotes">
<hr>
<ol>
<li id="fn:1">
<p><a href="https://news.ycombinator.com/item?id=31713756">https://news.ycombinator.com/item?id=31713756</a>&#160;<a href="#fnref:1" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:2">
<p><a href="https://book.douban.com/subject/30329536/">https://book.douban.com/subject/30329536/</a>&#160;<a href="#fnref:2" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:3">
<p><a href="https://book.douban.com/subject/30218046/">https://book.douban.com/subject/30218046/</a>&#160;<a href="#fnref:3" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:4">
<p><a href="https://book.douban.com/subject/34986245/">https://book.douban.com/subject/34986245/</a>&#160;<a href="#fnref:4" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:5">
<p><a href="https://news.ycombinator.com/item?id=43166362">https://news.ycombinator.com/item?id=43166362</a>&#160;<a href="#fnref:5" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
</ol>
</div>
]]></content:encoded>
    </item>
    <item>
      <title>《过河卒》: 比特币雏形之父之父的故事</title>
      <link>https://ramsayleung.github.io/zh/post/2025/%E8%BF%87%E6%B2%B3%E5%8D%92/</link>
      <pubDate>Wed, 09 Apr 2025 23:08:00 -0700</pubDate>
      <guid>https://ramsayleung.github.io/zh/post/2025/%E8%BF%87%E6%B2%B3%E5%8D%92/</guid>
      <description>&lt;h2 id=&#34;缘起&#34;&gt;&lt;span class=&#34;section-num&#34;&gt;1&lt;/span&gt; 缘起&lt;/h2&gt;
&lt;p&gt;在《软件那些事儿》播客采访听众故事的系列里面，有一期名为《&lt;a href=&#34;https://podcasts.apple.com/us/podcast/no-502-%E8%B7%9F35%E5%B2%81%E7%9A%84%E7%A8%8B%E5%BA%8F%E5%91%98%E8%81%8A%E8%81%8A%E6%AF%94%E7%89%B9%E5%B8%81/id1147186605?i=1000697534091&#34;&gt;No.502 跟35岁的程序员聊聊比特币&lt;/a&gt;》&lt;sup id=&#34;fnref:1&#34;&gt;&lt;a href=&#34;#fn:1&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;1&lt;/a&gt;&lt;/sup&gt; 长达三个多小时的播客，主人公分享自己与比特币的故事，还谈到其在2020年卖房买比特币的故事。&lt;/p&gt;</description>
      <content:encoded><![CDATA[<h2 id="缘起"><span class="section-num">1</span> 缘起</h2>
<p>在《软件那些事儿》播客采访听众故事的系列里面，有一期名为《<a href="https://podcasts.apple.com/us/podcast/no-502-%E8%B7%9F35%E5%B2%81%E7%9A%84%E7%A8%8B%E5%BA%8F%E5%91%98%E8%81%8A%E8%81%8A%E6%AF%94%E7%89%B9%E5%B8%81/id1147186605?i=1000697534091">No.502 跟35岁的程序员聊聊比特币</a>》<sup id="fnref:1"><a href="#fn:1" class="footnote-ref" role="doc-noteref">1</a></sup> 长达三个多小时的播客，主人公分享自己与比特币的故事，还谈到其在2020年卖房买比特币的故事。</p>
<p>既钦佩这位仁兄知行合一的投资理念，也羡慕他卖房买比特币的财力，胆识与机遇。</p>
<p>这位同行在节目结束前分享了一本名为《过河卒》<sup id="fnref:2"><a href="#fn:2" class="footnote-ref" role="doc-noteref">2</a></sup>的书籍，其作者戴习为是文革前就读于中国科技大学电子系的高材生。</p>
<p>为什么他会在聊比特币故事的播客节目中提及这位书呢？</p>
<p>因为比特币的作者中本聪的第一封<a href="https://www.bitcoin.com/satoshi-archive/emails/wei-dai/1/">已知公开的邮件</a><sup id="fnref:3"><a href="#fn:3" class="footnote-ref" role="doc-noteref">3</a></sup>，即讨论比特币白皮书草稿的邮件，就是发给戴习为之子，<a href="http://www.weidai.com/">戴维</a> <sup id="fnref:4"><a href="#fn:4" class="footnote-ref" role="doc-noteref">4</a></sup>的:</p>
<p>戴维的项目 <a href="http://www.weidai.com/bmoney.txt">b-money</a> <sup id="fnref:5"><a href="#fn:5" class="footnote-ref" role="doc-noteref">5</a></sup>与比特币有诸多的相似之处，甚至可以称为比特币的雏形, 所以中本聪在白本书中引用了 b-money , 原文:</p>
<blockquote>
<p>I was very interested to read your b-money page.  I&rsquo;m getting ready to release a paper that expands on your ideas into a complete working system.</p></blockquote>
<p>而戴维是著名的密码学专家，在大一的时候就写出了被诸多公司和开源项目使用的支持多种加密算法的C++加密库 <a href="https://cryptopp.com/">Cryptocpp</a> <sup id="fnref:6"><a href="#fn:6" class="footnote-ref" role="doc-noteref">6</a></sup></p>
<p>虽然错过了买比特币的致富之路，但是多读点书，多学点知识终究是不会晚的，所以对《过河卒》这本书产生了浓厚的兴趣，不到一周就读完了。</p>
<h2 id="太平洋两岸"><span class="section-num">2</span> 太平洋两岸</h2>
<h3 id="年少时分"><span class="section-num">2.1</span> 年少时分</h3>
<p>戴习为（下文称老戴）生于1947年，比共和国还要年长2岁，其祖父为武汉名医，
父亲亦师承其父，学得一手好医术，又学过高能物理，还是少数能扣操流利英语和日语的人材，母亲为中学教师。</p>
<p>老戴说起来是湖北人，但实际并没有在湖北生活过，满月不久就随父母迁居湖南长沙, 到1956年，老戴独自一人离开了父母，到北京投奔了奶奶。</p>
<p>年少时的老戴对一切都充满好奇心，9岁的时候，他决定做一个属于自己的矿石收音机，
费尽九牛二虎之力终于成功，当他在自制的收音机里面听到《杨家将》的评书时，心中那份得意就别提了。</p>
<p>初中时候，老戴通过杂志，自制了一台有两个直流电子管的再生式便携式收音机，
不久后他凭借同龄人中明显的技术优势考进了北海公园内的中国少年科技馆，拥有了帝王才可免费享用的北海公园。</p>
<p>1964年，毛主席再次发出以阶级斗争为纲的路线指引，教育界在批判了1962年，1963年以「智育第一」的错误招生倾向后，
提出了1964年的高考招生要优先选拔工人，贫下中农的子弟，教育要为无产阶级政治服务。</p>
<p>而对那些非红五类家庭出身的考生而言，如果又不是党团员，
那么他们只有表现得格外优秀才可能赢得本属于你的权利。</p>
<p>而对于家境殷实的老戴家庭而言，虽然没有被打为「地主阶级」之类的黑五类，但也被毕业鉴定上写上了「学习目的不明确」的标语。</p>
<p>但偏偏不信邪的老戴除了刻苦学习，还把目标放在了中国科技大学，因为班主任每次和他谈话结束都要加句：
「像你这样的表现科技大学能收你吗？」，在当时，中科大专业设置和毕业后的去向对家庭出身的要求要比清华，北大更苛刻。</p>
<p>发榜之后，他如愿考上了中国科技大学的电子系，1964年的中科大，含金量可见一斑。</p>
<h3 id="大学时光"><span class="section-num">2.2</span> 大学时光</h3>
<p>在中科大读了两年大学之后，阅读了各种书籍之后，文革爆发。</p>
<p>在文革初期，红卫兵们流行「大串联」，即大中学生红卫兵组织或个人为主体，在全国范围内免费乘车，接待（食宿），
互相串联，交流和宣传造反的活动。</p>
<p>但老戴作为「逍遥派」，对政治活动并没有太多兴趣，他却利用了「大串联」的机会，游历起了祖国的大江南北：
从北京到广州，从广州到杭州，再从杭州到上海。</p>
<p>又尝试过「星火燎原」之行，从北京步行到上海。</p>
<h3 id="走进社会"><span class="section-num">2.3</span> 走进社会</h3>
<p>毕业之后，老戴和其同学兼女友被分配到商丘的军队参军两年，而后复业在商丘无线电厂参加了三年工作, 机缘巧合之下被调至中科院天文台，参加天文台的建设。</p>
<p>后来，为了解决北京户口问题，老戴与妻子借调到了新组建的科学院空间科学技术中心，
没想到困扰无数北漂的户口问题，在上世纪七十年代的时候，也同样困扰着像老戴之样的高材生。</p>
<p>老戴在任期间，陪同妻子，完成了新部门「地面部」的搭建，并出色地完成密云遥感卫星地面接收站的选址与建设，至今仍发光发热。</p>
<p>1977年，中国恢复了高考，1978年，中国恢复了研究生招考，1979年，第一批留学生选派出国。</p>
<p>1981年，时年34岁，担任快视课题组组长的老戴决定出国，申请了东北大学应用数学系公派自费的博士，并「幸运」被录取。</p>
<h3 id="留学美利坚"><span class="section-num">2.4</span> 留学美利坚</h3>
<p>仅身揣20美元的老戴，在美国举目无亲的老戴，登上飞往美国的飞机。</p>
<p>按照老戴的说法，像他这一拨在举国上下一穷二白的大旗下长大的一代，没钱的好处就是做任何决定时，钱的分量也不重。</p>
<p>他在波士顿的第一晚，是在美国「派出所」的沙发上度过了，虽然东北大学减免了学费，但并未提供任何的生活费的。</p>
<p>因此在「朋友的朋友的朋友」的介绍下，
老戴在名为「杭州楼」的餐馆后来做起了包食住，无工资的工作，过上了白天上课读书，晚上工作帮厨的生活, 老戴称之为「洋插队」.</p>
<p>34岁的老戴在东北大学攻读博士，先在应用数学系研究数学，后转向计算机系，研究并行计算，但历经4年都未有突破性进展，
也未有影响力的论文发表，老戴陷入进退两难的局面。</p>
<p>因此39岁的时候，老戴不想再等待了，于东北大学博士缀学, 重新步入社会，自个刨食。</p>
<h3 id="创业种种"><span class="section-num">2.5</span> 创业种种</h3>
<p>老戴先是与朋友合伙，为华人公司定制中文系统，却不料受朋友坑骗，公司破产，还牵涉到一桩官司；</p>
<p>后来老戴与一名博士合并开发并行电脑，但历时一年未果，最后净身离开；后又与朋友合作于加拿大，结果不欢而散。</p>
<p>鉴于种种与人合作的失败经历，老戴决定自己单干，开发模式识别系统，用于电脑识别手写的文字与语音，后被仅此于IBM的第二大电脑公司 DEC 赏识，重金招募至麾下。</p>
<p>90年代，PC电脑风起云涌，日新月异，以Window + Intel 的Wintel 联盟强势崛起，以小型机为主的 DEC 不得不裁员应对，老戴也恰逢时分，离开 DEC，创立自己的 DTech 公司单干，专注手写文字与语音识别。</p>
<p>而当时华尔街正吹起了「笔电脑」的风，使用「笔」作为输入设备的电脑，而识别输入文字自然成为「笔电脑」必不可少的功能，老戴的 DTech 凭借其技术优势，成为了「风口上的猪」，苹果，微软，IBM纷纷递来橄榄枝。</p>
<p>最后，在比尔盖茨的亲自决策下，以「x位数」的价格收购了 DTech, 老戴也就顺势入职微软，成为总经理，后来领导了打赢IBM与苹果的笔电脑战役。</p>
<p>虽然老戴未透露「x位数」的具体数额，但是相信肯定是超过千万美元级别，90年代的千万美元也足以一辈子生活富足无忧了。</p>
<p>在1994年，比尔盖茨首次访华，老戴作为唯一的随员相随，陪同比尔盖茨会见了中国相关的领导人。</p>
<h2 id="感悟"><span class="section-num">3</span> 感悟</h2>
<h3 id="将相本无种-书成自有神"><span class="section-num">3.1</span> 将相本无种，书成自有神</h3>
<p>读完老戴的同事，让我总是会想起之前读的一本书：<a href="https://ramsayleung.github.io/zh/post/2024/%E8%B5%B0%E5%87%BA%E6%88%88%E5%A3%81/">《走出戈壁》：从沙漠苦力到常青藤教授</a> <sup id="fnref:7"><a href="#fn:7" class="footnote-ref" role="doc-noteref">7</a></sup>, 作者从小学未毕业戈壁的苦力，一直努力到成为常青藤的教授，老戴也是类似的经历。</p>
<p>虽然努力并不一定能成功，毕竟汗水，才华，运气都是成功不可或缺的因素，但是没有能力，机会即使飞到你面前，你也无法抓住。</p>
<p>读完全书，令我印象深刻的是两件关于读书的事:</p>
<p>1970年，在河南商丘无线电厂工作的老戴，工作之余，仍不忘学习，不断收集在那个时代与那个环境能够找到的新技术书籍，
不久，一门新的技术「数字电路与计算机」开始吸引并迷住了老戴。</p>
<p>作为一个学习过程，老戴争取机会，在一个与河南省的轻工技术研究所合作改造商丘市一个玻璃瓶厂的程序控制的工程中，
担当了数字电子技术这一部分的技术骨干，并出色完成了这一项目。</p>
<p>从此，老戴从一个学习模拟电子技术的工程师开始走进了数字时代。</p>
<p>在1988年，老戴在并行公司创业失败离开时，他充满了苦涩，他开始怀疑自己，对自己的命运是否期许过高，他不断地问自己，
或许他是那只在田地里不断掰玉米的狗熊? 是那只饶有兴致在水中捞着月亮的猴子?</p>
<p>他想起自己在美国学了4年的数学，学习了并行计算机的理论与算法，他还想起了自己在1976年唐山大地震的时候，
他还住在北京地震棚时，苦读过一番的《数字图像处理》，《傅里叶光学》与《模式识别理论》​。</p>
<p>他决定凭借曾经苦读的知识，使用模式识别来识别手写文字与语音, 最终成就了 DTech 公司.</p>
<p>「狐狸固然吃不到高架上的葡萄，但它可以在矮架上种上一棵」，来自「吃不了葡萄说葡萄酸」故事的启发。</p>
<h3 id="家庭的影响"><span class="section-num">3.2</span> 家庭的影响</h3>
<p>对于老戴的成功，其努力自然不容置喙, 但是我现在越发觉得个人的成就不仅和个人的努力及才华相关，还与其家庭息息相关，环境对个人成长太重要了。</p>
<p>古人也是类似的看法，不然孟母又何必三迁呢。</p>
<p>而作为被中本聪引用的论文作者戴维(下称小戴)，身为中国第一代程序员的父母对其影响不可谓不大。</p>
<p>小戴80年代就能接触并学习编程，以至于在小学时期，就能帮一个台湾来美的研究生做数据结构的作业；</p>
<p>初二时，小戴与大多数孩子一样，开始了暑假打工生涯，不同的是，在其他同龄人只能选择在社区送报纸，擦洗车之类的工作时。</p>
<p>小戴跑到了妈妈正在工作的，一个为全球几大石油公司提供油井数据分析的石油软件公司当程序员。</p>
<p>小戴用C语言写了一个子程序：</p>
<p>将公司软件产品中正在使用的，因不同类的客户机器而使用的不同格式的浮点数据转换成IEEE规定的标准格式浮点数据，
使本公司产品与其他公司产品的数据衔接更方便。</p>
<p>高一时，小戴即被学生推荐到哈佛大学计算机系选修课程，并计入学分，被由中学（实际是州政府）支付学费，
理论上，小戴可以在高中毕业的同时在哈佛大学毕业，类似国内的少年班。</p>
<p>在高中毕业后，小戴非常轻松地被华盛顿州立大学的计算机系录取，华大的计算系可以在全美排前十的。</p>
<p>小戴在大一的时候，用 C++ 实现了一个涵盖已公开发表过的主要加密与解密算法的软件库，
成为北美第一个被全民共享，而已至今仍被全世界（包括中国）广泛使用的加解密算法库。</p>
<p>读过计算机专业的同学应该听过一句名言：不要实现你自己的加解密算法库（和共识算法库），因为非常难实现正确，一旦出问题后果又非常严重。</p>
<p>所以小戴的水平可想而知。</p>
<h3 id="大厂感悟"><span class="section-num">3.3</span> 大厂感悟</h3>
<p>书中还有不少篇幅是描写在微软的工作体验，这让我这个从毕业起就在国内外大厂后辈非常有感悟，其实都是一样的。</p>
<p>微软有着非常好的员工福利，有着委托给星级酒店的食堂，弹性的上下班时间，
有非常优美的园区，非常自由和充满活力的文化氛围。</p>
<p>除不考勤上下班时间之外，公司还从早10点到下午2点，每一小时一趟的班车，在园区内与园区边设备豪华的健身俱乐部间穿梭。</p>
<p>公司支付健身的一切费用，员工可游泳，或网球……，活动筋骨，锻炼身体;一年四季，或小组，或大组，或整个公司，三日一小宴，五日一大宴。</p>
<p>美食美酒，Party不断; 新上影的电影、热门棒球赛、NBA篮球赛、橄榄球大赛、歌星演唱会，公司赠票给员工全家，请你务必赏光。</p>
<p>一年三百六十五天，公司开满了各式各样的进修课程，鼓励诸位踊跃参加。</p>
<p>如诸位能大体上不影响日常工作，而学校又肯收你，读博士、读硕士，公司均乐于为你支付学费。</p>
<p>听起来真是神仙过的日子。</p>
<p>甚至过年的时候包下了几百英亩的地方来搞年会，把加拿大马术队，奥林匹克跳伞队也请过来表演。</p>
<p>但是公司终究不是疗养院，公司更不可能养大爷，任务已经明确了，只是为了让工程师们能赶上 milestone (也就是 deadline)</p>
<p>好酒好饭无非是让你上阵时精力充沛、生龙活虎罢了。就如同那第一流的奶牛场，请你听音乐，给你做按摩，为的是请你多出牛奶。</p>
<p>更何况，羊毛出自羊身上，微软给的薪资只有同期硅谷同行的一半略多，直到现在也是如此，也难怪人送外号「花生厂」(薪水相对较低的戏称).</p>
<p>而弹性上下班，就可以加班不给加班费了。</p>
<p>更何况，现在不流行给奶牛弹音乐，做按摩来多产奶了，现在流行用鞭子抽奶牛，还威胁奶牛，不多产奶就以绩效差把你开了，让你自生自灭。</p>
<p>对于 milestone, 弹性加班之类的「资本主义把戏」，我是再熟悉不过了。</p>
<p>我在<a href="https://ramsayleung.github.io/zh/post/2023/%E4%BB%8E%E5%BE%AE%E4%BF%A1%E6%94%AF%E4%BB%98%E7%A6%BB%E7%BA%BF_%E6%88%91%E5%B8%A6%E8%B5%B0%E4%BA%86%E4%BB%80%E4%B9%88/">微信支付</a> <sup id="fnref:8"><a href="#fn:8" class="footnote-ref" role="doc-noteref">8</a></sup>的时候，微信支付推行的是所谓的「精益迭代」研发模式，
大意每两周作为一个周期，把任务拆分到能两周内完成的颗粒度，
在第二周的周五进行「复盘」，由领导（或是经理，或是总监）开会对着需求单与工程师逐个核对进度。</p>
<p>也就意味着每两周就有一次 deadline, 完成这两周的任务并不能影响下一个两周的任务的轮转，迭代总是周而复始，直到你被滚动的车轮碾碎。</p>
<p>任务太大怎么办，总能拆小的，两周总要交付什么东西的。</p>
<p>没有完成怎么办？不用担心，你总可以想办法完成的, 不然要怎么向领导交待呢, 这些都是数据和指标。</p>
<p>这样洗礼了三年后，现在无论多少任务，都有种羽扇纶巾，谈笑间，需求灰飞烟灭的淡定从容了。</p>
<h3 id="better-than-before"><span class="section-num">3.4</span> Better than before</h3>
<p>老戴通过自己的经历告诉我们:</p>
<p>无论是白人，黑人，黄种人，无论在农村还是城市，也无论是出生在穷家还是富户，追求成功的人们，只要你努力，只要你执着，做得到的。</p>
<p>社会对成功的定义往往固化,「出将入相」「成名成家」「腰缠万贯」，但「将相本无种」，真正的成功，是超越昨天的自己。</p>
<p>过好每一个今天，就是通往成功的路。 立足当下，辨明方向，踮起脚尖，哪怕只比昨天前进一寸。</p>
<p>这或许像「鸡汤」，但真理往往朴素，从翻开一本书、迈出第一步开始，让身体或思想始终在路上。</p>
<p>秉持「Better than before」的信念，「卒子」一步步向前，直到跨过那条「河」，化身为「车」.</p>
<p>如卒过河，日拱一卒，终有一日，平凡亦可蜕变为非凡。</p>
<h2 id="推荐阅读">推荐阅读</h2>
<ul>
<li>旅加经历
<ul>
<li><a href="https://ramsayleung.github.io/zh/post/2023/%E8%BF%99%E4%BA%9B%E5%B9%B4%E8%B5%B0%E8%BF%87%E7%9A%84%E8%B7%AF_%E4%BB%8E%E5%B9%BF%E5%B7%9E%E5%88%B0%E6%B8%A9%E5%93%A5%E5%8D%8E/">这些年走过的路：从广州到温哥华</a></li>
<li><a href="https://ramsayleung.github.io/zh/post/2023/%E5%8A%A0%E6%8B%BF%E5%A4%A7%E4%B9%8B%E5%88%9D%E4%BD%93%E9%AA%8C/">加拿大之初体验</a></li>
<li><a href="https://ramsayleung.github.io/zh/post/2024/%E7%99%BB%E9%99%86%E5%8A%A0%E6%8B%BF%E5%A4%A7%E4%B8%80%E5%B9%B4%E7%9A%84%E4%BD%93%E4%BC%9A/">登陆加拿大一年后的体会</a></li>
<li><a href="https://ramsayleung.github.io/zh/post/2024/%E5%A4%8F%E6%97%A5%E6%8D%95%E8%9F%B9%E8%AE%B0/">夏日捕蟹记</a></li>
</ul>
</li>
<li>历史思考
<ul>
<li><a href="https://ramsayleung.github.io/zh/post/2023/%E7%BD%AE%E8%BA%AB%E4%BA%8B%E5%86%85/">为什么梦想买不起，故乡回不去</a></li>
<li><a href="https://ramsayleung.github.io/zh/post/2023/%E9%97%B2%E8%81%8A%E5%86%99%E4%BD%9C/">闲聊写作的好处</a></li>
<li><a href="https://ramsayleung.github.io/zh/post/2024/%E9%87%91%E6%A6%9C%E9%A2%98%E5%90%8D%E4%B9%8B%E5%90%8E/">金榜题名之后</a></li>
</ul>
</li>
<li>工具流分享
<ul>
<li><a href="https://ramsayleung.github.io/zh/post/2024/%E7%AE%80%E6%98%8E%E5%86%99%E4%BD%9C%E6%8C%87%E5%8D%97/">简明写作指南</a></li>
<li><a href="https://ramsayleung.github.io/zh/post/2023/%E6%88%91%E7%9A%84%E5%86%99%E4%BD%9C%E6%B5%81/">我的写作流</a></li>
<li><a href="https://ramsayleung.github.io/zh/post/2023/%E6%88%91%E7%9A%84%E7%94%BB%E5%9B%BE%E6%B5%81/">我的画图流：画图工具与技巧分享</a></li>
<li><a href="https://ramsayleung.github.io/zh/post/2023/%E6%88%91%E7%9A%84%E6%90%9C%E7%B4%A2%E6%B5%81/">我的搜索流：高效搜索经验分享</a></li>
<li><a href="https://ramsayleung.github.io/zh/post/2022/feynman_technique/">最好的学习方式：费曼学习法(Feynman Technique)</a></li>
<li><a href="https://ramsayleung.github.io/zh/post/2021/%E7%B3%BB%E7%BB%9F%E6%80%9D%E8%80%83/">系统思考：既见树木，又见森林</a></li>
</ul>
</li>
<li>职场思考
<ul>
<li><a href="https://ramsayleung.github.io/zh/post/2024/%E7%BC%96%E7%A8%8B%E5%8D%81%E5%B9%B4%E7%9A%84%E6%84%9F%E6%82%9F/">编程十年的感悟</a></li>
<li><a href="https://ramsayleung.github.io/zh/post/2023/%E4%BB%8E%E5%BE%AE%E4%BF%A1%E6%94%AF%E4%BB%98%E7%A6%BB%E7%BA%BF_%E6%88%91%E5%B8%A6%E8%B5%B0%E4%BA%86%E4%BB%80%E4%B9%88/">那些年，我从微信支付学到的东西</a></li>
<li><a href="https://ramsayleung.github.io/zh/post/2025/%E6%9D%82%E8%B0%88ai%E5%8F%96%E4%BB%A3%E7%A8%8B%E5%BA%8F%E5%91%98/">杂谈AI取代程序员</a></li>
</ul>
</li>
</ul>
<div center class="qr-container">
<img src="/ox-hugo/qrcode_gh_e06d750e626f_1.jpg" alt="qrcode_gh_e06d750e626f_1.jpg" width="160px" height="160px" center="t" class="qr-container" />
公号同步更新，欢迎关注👻
</div>
<div class="footnotes" role="doc-endnotes">
<hr>
<ol>
<li id="fn:1">
<p><a href="https://podcasts.apple.com/us/podcast/no-502-%E8%B7%9F35%E5%B2%81%E7%9A%84%E7%A8%8B%E5%BA%8F%E5%91%98%E8%81%8A%E8%81%8A%E6%AF%94%E7%89%B9%E5%B8%81/id1147186605?i=1000697534091">https://podcasts.apple.com/us/podcast/no-502-%E8%B7%9F35%E5%B2%81%E7%9A%84%E7%A8%8B%E5%BA%8F%E5%91%98%E8%81%8A%E8%81%8A%E6%AF%94%E7%89%B9%E5%B8%81/id1147186605?i=1000697534091</a>&#160;<a href="#fnref:1" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:2">
<p><a href="https://book.douban.com/subject/1106247/">https://book.douban.com/subject/1106247/</a>&#160;<a href="#fnref:2" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:3">
<p><a href="https://www.bitcoin.com/satoshi-archive/emails/wei-dai/1/">https://www.bitcoin.com/satoshi-archive/emails/wei-dai/1/</a>&#160;<a href="#fnref:3" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:4">
<p><a href="http://www.weidai.com/">http://www.weidai.com/</a>&#160;<a href="#fnref:4" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:5">
<p><a href="http://www.weidai.com/bmoney.txt">http://www.weidai.com/bmoney.txt</a>&#160;<a href="#fnref:5" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:6">
<p><a href="https://cryptopp.com/">https://cryptopp.com/</a>&#160;<a href="#fnref:6" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:7">
<p><a href="https://ramsayleung.github.io/zh/post/2024/%E8%B5%B0%E5%87%BA%E6%88%88%E5%A3%81/">https://ramsayleung.github.io/zh/post/2024/%E8%B5%B0%E5%87%BA%E6%88%88%E5%A3%81/</a>&#160;<a href="#fnref:7" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:8">
<p><a href="https://ramsayleung.github.io/zh/post/2023/%E4%BB%8E%E5%BE%AE%E4%BF%A1%E6%94%AF%E4%BB%98%E7%A6%BB%E7%BA%BF_%E6%88%91%E5%B8%A6%E8%B5%B0%E4%BA%86%E4%BB%80%E4%B9%88/">https://ramsayleung.github.io/zh/post/2023/%E4%BB%8E%E5%BE%AE%E4%BF%A1%E6%94%AF%E4%BB%98%E7%A6%BB%E7%BA%BF_%E6%88%91%E5%B8%A6%E8%B5%B0%E4%BA%86%E4%BB%80%E4%B9%88/</a>&#160;<a href="#fnref:8" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
</ol>
</div>
]]></content:encoded>
    </item>
    <item>
      <title>《走出戈壁》：从沙漠苦力到常青藤教授</title>
      <link>https://ramsayleung.github.io/zh/post/2024/%E8%B5%B0%E5%87%BA%E6%88%88%E5%A3%81/</link>
      <pubDate>Sun, 25 Aug 2024 11:24:00 -0700</pubDate>
      <guid>https://ramsayleung.github.io/zh/post/2024/%E8%B5%B0%E5%87%BA%E6%88%88%E5%A3%81/</guid>
      <description>&lt;h2 id=&#34;前言&#34;&gt;&lt;span class=&#34;section-num&#34;&gt;1&lt;/span&gt; 前言&lt;/h2&gt;
&lt;p&gt;六月份的时候，读到了一篇名为《&lt;a href=&#34;https://1byte.io/articles/luck/&#34;&gt;运气与努力&lt;/a&gt;》&lt;sup id=&#34;fnref:1&#34;&gt;&lt;a href=&#34;#fn:1&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;1&lt;/a&gt;&lt;/sup&gt;的文章，是由 LeanCloud的创始人江宏博士写的，文章以一本书开篇，引出他关于运气与努力的思考:(文章写得相当真诚，充满洞见，也推荐大家阅读下) &lt;br/&gt;&lt;/p&gt;</description>
      <content:encoded><![CDATA[<h2 id="前言"><span class="section-num">1</span> 前言</h2>
<p>六月份的时候，读到了一篇名为《<a href="https://1byte.io/articles/luck/">运气与努力</a>》<sup id="fnref:1"><a href="#fn:1" class="footnote-ref" role="doc-noteref">1</a></sup>的文章，是由 LeanCloud的创始人江宏博士写的，文章以一本书开篇，引出他关于运气与努力的思考:(文章写得相当真诚，充满洞见，也推荐大家阅读下) <br/></p>
<blockquote>
<p>很多人意识不到运气的重要性，而错把成功归功于自己的才能和努力， <br/>
却没有意识到好运在其中的重要性。忽视了这一点就难以保持谦虚，难以不断学习。 <br/></p>
<p>明白了运气的重要性，就知道不是人人生而能得到平等的机会的， <br/>
在遇到处境不如自己的人，不能假设这种差别是聪明或努力程度的不同造成的，应该知道善待弱者。 <br/></p></blockquote>
<p>而文章开篇提到的书名为(Out of the Gobi: My story of China and America)《走出戈壁：我的中美故事》, 作者单伟建在读完小学之后，就被文革的知青下乡运动感召，「自愿」下放到内蒙古生产建设兵团做了六年的苦力。 <br/></p>
<p>文革后，没拿到小学毕业证的他进入了首都经济贸易大学，之后在旧金山大学获得了 MBA， <br/>
在 UC Berkeley 取得博士学位，后来在 University of Pennsylvania 任教。 <br/></p>
<p>现在他是亚洲最大的私募基金之一 PAG Group 的主席和 CEO，而他当时在UC Berkeley的导师，现在也成为了美国财政部的部长，即Janet Yellen (珍妮特·耶伦), 她为本书作了序。 <br/></p>
<p>对于这样传奇的人生经历，我自然也是希望一读究竟。 <br/></p>
<h2 id="不以物喜-不以已悲"><span class="section-num">2</span> 不以物喜，不以已悲</h2>
<p>不少自传或者回亿类的书籍看起来，难免会有一种自吹自擂的感觉，这也是人之常情。 <br/></p>
<p>只是在本书的作者却是用一种云淡风轻，略带些幽默的口吻来描写在戈壁滩的艰苦生活，以至于那样痛苦的生活， <br/>
在作者笔下，都显得不那么痛苦了。 <br/></p>
<p>可能正如同样被下放到戈壁滩的民航机长老易教诲作者那般，“前面的路还很长，所有快乐的事情都会结束，所有的悲伤也是如此” <br/></p>
<p>书中有很多动人的经历，我印象比较深的是以下的几个故事： <br/></p>
<h2 id="戈壁生活"><span class="section-num">3</span> 戈壁生活</h2>
<h3 id="理想与现实"><span class="section-num">3.1</span> 理想与现实</h3>
<p>知识青年下乡，响应号召，接受贫下中农再教育；参加建设兵团，为国戌边，建设国家。 <br/></p>
<p>这个是他们离家时的理想与目标，但实际的情况却与他们幻想得天差地别； <br/></p>
<p>一群年轻人秋天去国营农场里收土豆，挖了无数的土豆，但是却没有人来运土豆，他们也只能眼睁睁地看着被挖出来的土豆被冻烂， <br/>
不停地收获土豆，却又不停地看着收获好的土豆被冻烂在地里，循环往复，直到不再有挖土豆的念头。 <br/></p>
<p>兵团领导人希望可以把戈壁变成沃野，思路就是通过挖掘人工运河，把河里的水引到戈壁进行灌溉， <br/>
甚至有一天，作者他们被告知必须连夜赶工完成运河，以赶上最后限期，在完成之前，他们不能离开。 <br/></p>
<p>就这样，这群年轻人连续在运河上工作了31个小时，终于完成了人工运河的建设。 <br/></p>
<p>一周后，他们被告知，运河的路线被误算了，他们建造的那部分太高了，水无法流过，那部分必须被放弃，另建一条新路线。 <br/></p>
<p>军队建议兵团对改善贫困农村没有任何帮忙，事实上，他们只是让事情变成更糟糕，他们每天消耗的粮食是生产的三到四倍， <br/>
他们工作越努力，浪费的资源就越多。 <br/></p>
<p>兵团只是想给他们找些事情做，不让他们闲下来。 <br/></p>
<h3 id="努力-智慧与运气"><span class="section-num">3.2</span> 努力，智慧与运气</h3>
<p>在这样的折腾下，六年时间，难免会让把人的志气给磨没，变得随大流，磨洋工。 <br/></p>
<p>农场上大多数人都不去田里工作，但他还在每天工作， 作者的心态是「干什么事都要干好，否则闲着也是浪费时间，而且争强好胜，虽然身体瘦弱，但不甘人后，如此而已。」 <br/></p>
<p>作者抓住一切能学习的机会，阅读能读到的各种书籍，向同样被流放的前民航机长学习英语，背诵药品的英文名字， <br/>
希望有一天能重新回到城市，能回到大学校园。 <br/></p>
<p>1971年，大学逐渐恢复了上课，但是那时的入学资格却不是考试，而是「群众推荐」制度，即由同龄人选举产生。 <br/></p>
<p>而作者不但没有被推举上，反而因为谈及外语，巴黎纽约这些外国城市，反而被人举报，渴望「资本主义生活方式」，并被众人被声讨。 <br/></p>
<p>这不仅让作者失去了被推举上大学的机会，还留下了个坏名声，但是作者并没有沉沦，他反而反思自己为何会成为众矢之的。 <br/></p>
<p>他分析下来是自己太与众不同，别人下棋他看书，他不屑于追求这些无用的东西，但人终究是群体性动物，太与众不同只会被人疏远。 <br/></p>
<p>所以他决定要融入这个集体，获得大家的好感，而不是作为一个孤僻的书呆子。 <br/></p>
<p>在观察到大家都喜欢篮球和排球运动，但却缺乏熟悉排球规则的裁判时， <br/></p>
<p>他让父亲寄书过来学着当排球裁判，让更多其他连的人认识他，让自己变成不可或缺，同时更加努力地工作，赢得众人的尊重。 <br/>
（能站在旁观者角度冷静分析问题，并利用现有条件进行解决，真的是充满智慧又难能可贵） <br/></p>
<p>终于，在第二年的入学资格「群众推荐」中，他得票第二，但是却因为与连队领导关系不佳， <br/>
他被以「年纪太轻（21岁），不能上大学」为由，把他从名单中删除。 <br/></p>
<p>得知消息的那一天晚上，作者深一脚浅一脚地走出营房，来到空旷的地方，边走边流泪，当再也不会没有人听到他的声音后， <br/>
他放眼大哭，在黑暗中撕心裂肺地喊叫，在沮丧和悲伤中喊得声嘶力竭。 <br/></p>
<p>那天晚上后，作者收拾心情，告诫自己生活必须继续，总会有未来的。 <br/>
他发誓不会让自己失望，他已经经历这么多了，但他绝对不会在绝望中迷失自我，放弃就是对自己犯下罪行。 <br/></p>
<p>如果大环境一直很糟糕，自己要在戈壁待一辈子而没有出头之日，他没有谁可怨； <br/>
但是如果将来发生变化，因为自己没有准备好而失去了改变命运的机会，他只能怪自己。 <br/></p>
<p>所以他在逆境中也一直在为将来准备。 <br/></p>
<p>终于，在第三年，在11人竞选9个名额的竞争中，作者作为最后一名修补人选， <br/>
在名单中的两名正式候选人先后被除名后，递补入选，获得了首都经济贸易大学的入学资格. <br/></p>
<h2 id="自助者天助之"><span class="section-num">4</span> 自助者天助之</h2>
<p>作者在毕业后成为首经贸的教师，后来得到亚洲基金会赞助前往旧金山大学一年的访学机会。 <br/></p>
<p>到校后，在与教授们交流后，他决定攻读该校的MBA 课程并争取拿到学位，但苦于没有学费，他决定先抓住机会学习知识，知识先于学历，再看能否找机会凑到学费。 <br/></p>
<p>第一学期各门课程优异，但是学费还是没有着落，在各种方法尝试未果后将要放弃时， <br/>
他的导师给他带来了一个好消息：一个匿名人士愿意资助他的学费，于是他得而注册并开始MBA课程。 <br/></p>
<p>待他学业小有所成时，他导师告知他，那位匿名赞助人希望与他在某个高档餐厅共进晚餐，相见一面。 <br/></p>
<p>当导师夫妇身着正装出现在餐厅时，他才猛然意识到，他们原来就是自己的资助人，他的感激之情，无以言表。 <br/></p>
<p>如果不是作者在学习过程所表现出来的专注，付出与努力，相信也没有那么容易可以打动到导师，这也许是所谓的「自助者天助之」吧。 <br/></p>
<p>多年之后，待他事业有所成时，他以导师与自己名字，联名捐赠了一个奖学金，以帮助更多学子追求梦想。 <br/></p>
<h2 id="洞察规则的智慧"><span class="section-num">5</span> 洞察规则的智慧</h2>
<p>在旧金山大学获得MBA 课程硕士需要2年时间，在学费问题得而解决之后， <br/>
作者面临的问题就是访学项目只是一年，要获得学位，他就需要亚洲基金会批准延长他的项目，并且获得首都经济贸易大学的批准。 <br/></p>
<p>也就是攻读硕士学位不在项目原有计划之内，他当时已经是首都经济贸易大学的教师，再延期一年属于「节外生枝」。 <br/></p>
<p>基金会领导安迪表示他要给经贸学院的领导写一封信，征求北京的意见。 <br/></p>
<p>作者表示，你不能这么写，安迪问为什么。 <br/></p>
<p>作者回答到，如果你征求北京方面的意见，他们就要研究是否批准。 <br/></p>
<p>只有两个可能——批准或者不予批准。批准了当然好，但是如果不予批准，我怎么办？ <br/></p>
<p>安迪问作者还有更好的办法吗？ <br/></p>
<p>作者表示，你就给北京发个贺电，说我学习成绩优异，校方决定给我奖学金，只需延期一个学期，就可以获得硕士学位， <br/>
对于这样的成绩，亚基会向外贸学院表示祝贺，其他的都不必说。 <br/></p>
<p>安迪写了一封信，信中对作者大加赞扬，但小心地将大部分奉承留给了经贸学院。 <br/></p>
<p>两周后，学院回复，只有四个字——‘非常感谢’。 <br/></p>
<p>作者心花怒放。 <br/></p>
<p>读到此处，真的为作者深谙体制的规则和处理事情的智慧所折服。 <br/></p>
<p>正如他所料，谁能拒绝别人的道贺呢？ <br/></p>
<p>更何况是来自曾经的敌人，美帝国主义的夸奖，这足以让学院领导扬眉吐气。 <br/></p>
<h2 id="总结"><span class="section-num">6</span> 总结</h2>
<p>在单伟建回到母校旧金山大学<a href="https://www.youtube.com/watch?v=R0Niw73cyIo&amp;t=4304s">演讲</a>时<sup id="fnref:2"><a href="#fn:2" class="footnote-ref" role="doc-noteref">2</a></sup>，当循例被主持人问到能给学生们什么建议时，他说在任何领域，成功的三个重要要素是： <br/></p>
<ol>
<li>终身学习；如果他在戈壁没有坚持学习，那么他不可能在失学十年后，在中国重新开放时，能抓住来之不易的机会，自然就没有后来的一切 <br/></li>
<li>好的判断力；好的判断比毅力更加重要，做正确的事情远比正确地做事重要，方向对了，努力才有意义。而没有人生来就有好的判断力，这个就源于经验，知识，就需要不断地学习才能获取到，又呼应上「终身学习」了 <br/></li>
<li>运气；正如单伟建的观点与罗翔老师的类似，「运气并非成就，是命运之手把我托举到所不配有的高度，让人飘然，让人晕眩，最终，让人诚惶诚恐」，意识到运气的重要，才能让人谦卑。 <br/></li>
</ol>
<p>对于终身学习这条建议，我自已也有些许浅薄体会，一年半前，我写了一篇文章: <a href="https://ramsayleung.github.io/zh/post/2023/rspotify_%E4%B8%80%E4%B8%AA%E7%94%A8%E7%88%B1%E5%8F%91%E7%94%B5%E4%BA%94%E5%B9%B4%E7%9A%84%E5%BC%80%E6%BA%90%E9%A1%B9%E7%9B%AE/">《RSpotify: 一个用爱发电五年的开源项目》</a>, 分享自己学习了六年Rust，并且维护一个开源项目的经历。 <br/></p>
<p>在我大学的最后一年，我选择了学习Rust这个新兴的编程语言，距离当时它发布1.0稳定版本也仅仅过了2年， <br/>
我既不觉得我未来的工作会因此受益，也不会获取什么额外的报酬，毕竟这东西太小众了，国内也不会有公司会用，大厂不是用Java就是用C++。 <br/></p>
<p>我只是觉得好玩，再兼之大四没有课，总要学点新东西。 <br/>
就这样，一学就是六七年，维护这个用Rust的开源项目也五年了，除了不时的Github Issue, 也没有其他的收益。 <br/></p>
<p>在今年七月，我又被换到了一个新的组，创下了一个个人职业新纪录，在一年三个月内，待了4个组。 <br/></p>
<p>新组还是在AWS S3, 而新组领导对Rust相当狂热，因为Rust的特点几乎完美契合S3的要求， <br/>
媲美C的高性能，内存安全，强类型，高并发，所以大老板非常想要在新服务使用Rust, 美中不足的就是Rust学习曲线陡峭，懂Rust的人不多。 <br/></p>
<p>而我刚好就是懂Rust又会Java的那个，毕竟都学这么久了，就这样我无缝对接到新组，在新的核心服务上开始写Rust，达成了通过写Rust养活自己的成就。 <br/></p>
<p>像单伟建那样，在戈壁那样艰苦的环境坚持学习，在困境中保持乐观，在苦厄中坚持成长 <br/>
，穷且益坚，实现从小学文凭苦力到常青藤教授的成就，绝大部分人自然难以望其项背。 <br/></p>
<p>但是，如果把终身学习理解成投资的定投，只需要持续学习，无论每天，每周或者每月学多么微小的知识，在时间的复利作用下， <br/>
终有一天，都会有带来质的提升。 <br/></p>
<div center class="qr-container">
<img src="/ox-hugo/qrcode_gh_e06d750e626f_1.jpg" alt="qrcode_gh_e06d750e626f_1.jpg" width="160px" height="160px" center="t" class="qr-container" />
公号同步更新，欢迎关注👻
</div>
<div class="footnotes" role="doc-endnotes">
<hr>
<ol>
<li id="fn:1">
<p><a href="https://1byte.io/articles/luck/">https://1byte.io/articles/luck/</a>  <br/>&#160;<a href="#fnref:1" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:2">
<p><a href="https://www.youtube.com/watch?v=R0Niw73cyIo&amp;t=4304s">https://www.youtube.com/watch?v=R0Niw73cyIo&t=4304s</a>  <br/>&#160;<a href="#fnref:2" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
</ol>
</div>
]]></content:encoded>
    </item>
    <item>
      <title>金榜题名之后</title>
      <link>https://ramsayleung.github.io/zh/post/2024/%E9%87%91%E6%A6%9C%E9%A2%98%E5%90%8D%E4%B9%8B%E5%90%8E/</link>
      <pubDate>Sun, 25 Feb 2024 20:27:00 -0800</pubDate>
      <guid>https://ramsayleung.github.io/zh/post/2024/%E9%87%91%E6%A6%9C%E9%A2%98%E5%90%8D%E4%B9%8B%E5%90%8E/</guid>
      <description>&lt;h2 id=&#34;前言&#34;&gt;&lt;span class=&#34;section-num&#34;&gt;1&lt;/span&gt; 前言&lt;/h2&gt;
&lt;p&gt;过年期间，趁着各种零碎的闲暇时间，将一本探究学生出身与毕业出路生涯前景的书看完，名为《金榜题名之后：大学生出路分化之迷》。 &lt;br/&gt;&lt;/p&gt;
&lt;p&gt;大约自科举取士以来，通过读书来改变自己乃至整个家族的命运，就已成为中国社会妇孺皆知的常识，”读书改变命运“。 &lt;br/&gt;&lt;/p&gt;</description>
      <content:encoded><![CDATA[<h2 id="前言"><span class="section-num">1</span> 前言</h2>
<p>过年期间，趁着各种零碎的闲暇时间，将一本探究学生出身与毕业出路生涯前景的书看完，名为《金榜题名之后：大学生出路分化之迷》。 <br/></p>
<p>大约自科举取士以来，通过读书来改变自己乃至整个家族的命运，就已成为中国社会妇孺皆知的常识，”读书改变命运“。 <br/></p>
<p>古有《劝学诗》云：“男儿若遂平生志，六经勤向窗前读”；今有高悬在高中教室的励志标语：“辛苦三年，幸福一生”。 <br/></p>
<p>但是，进入好的大学，是否就意味着毕业时令人羡慕的工作呢？为什么社会出身劣势的学生即使进入了最好的大学，却仍然在毕业出路与生涯前景劣势明显？ <br/></p>
<p>对于寒窗苦读，从中国甘肃考入复旦大学的作者来说，她也有同样的疑问。 <br/></p>
<p>因此在研究生期间，就将学生家庭背景与教育结果之间的关联作为研究课题，并将研究生论文润色，扩展成书。 <br/></p>
<p>在读别人的书时，我总会想起自己的事，好比用别人的料理方式，来烹饪自己的食材，看能煮出什么样的【佳肴】。 <br/></p>
<p>虽然我未曾【金榜题名】，但也未妨我来分享下自己的所思所想。 <br/></p>
<h2 id="迷宫的游戏规则"><span class="section-num">2</span> 迷宫的游戏规则</h2>
<p>以前高中老师在我们向其抱怨各种学业压力和严苟的规章制度之后，总是会语重心长地解释一番，然后在对话的结尾补上一句，”上到大学你们就轻松啦“。 <br/></p>
<p>不同于高中只有成绩的单一的显式考核标准，只有一个方向和出口，大学更像是一个被精心布局的迷宫：并不存在一条”主干道“或者标准的走法，每一天的过法都有许多可能，每个人在路口处需要不断地做选择，每一条小路（社团，绩点，实习）都各有乾坤。 <br/></p>
<p>而大学生作为玩家，需要在小路之中穿行探索，一边选择自己路线，一边在路途收集有价值的筹码（成绩，经历，奖项等）。 <br/></p>
<p>当他们到达迷宫出口时，他们需要将口袋的筹码拿出来，用它们来兑换成下一个旅程的入场券。 <br/></p>
<p>只是，对于不同社会出身的探索者来说，这个迷宫的神秘程度是不同的。有人对里面的布局相当了解，有人半知半解，而有人只能通过道听途说略知一二。 <br/></p>
<p>尤其关键的是：并不是所有人都很清楚当中的游戏规则，譬如迷宫的尽头究竟有哪几个出口，而每个出口处有用的筹码又有什么不同。 <br/></p>
<p>而不同等级的大学，能提供的有价值的筹码数量和价值又是截然不同的。 <br/></p>
<p>为了区分在两种截然不同的驱动力下探索迷宫的玩家，作者将两者定义为： <br/></p>
<ul>
<li>目标掌控模式：了解大学及劳动力市场中的规则，因此能有意识地树立生涯目标，并且通过管理自身的行动来趋近目标。 <br/></li>
<li>直觉依赖模式：在陌生的大学场域中难以自我定位，从而无意识地陷入无目标状态，主要倚靠直觉和旧有习惯来组织大学生活。 <br/></li>
</ul>
<p>家境优越的学子，在父母的指导下，可以更早和清晰地认识到大学的游戏规则，进而策略性地计划大学生活；而寒门学子，因为眼界和自身经历的局限性， <br/>
并不了解大学的规则，又会发现高中沉淀的学习方式在大学并不完全适用，难免陷入迷茫。 <br/></p>
<p>优势阶层的父母基于对迷宫的洞悉，为孩子织就一张“安全网”，帮助孩子认清形势，定位自身，树立目标，顺利通关；而弱势学生则没有这张安全网，只得独自在这个陌生领域无助摸索前进，父母能提供的建议越来越少，往哪走全靠自己或对或错的直觉和过去的习惯。 <br/></p>
<p>但因为作者只调研了名校的优等生，如果把排名后50%的学子也纳入调研范围，可能会发现还有一种【躺平放纵模式】，以高中老师口中【轻松】的方式度过了大学生涯。 <br/></p>
<h2 id="非名校生的大学"><span class="section-num">3</span> 非名校生的大学</h2>
<p>近年来，红遍网络的“985废物”和“小镇做题家”的自嘲俯拾即是： <br/></p>
<blockquote>
<p>“从一个连电影院都没有的小县城，考到了全河北最好的高中，六年之后要来到国际大都市上海了，要来到倾尽我家所有小积蓄，才能勉强付个首付的上海了。我这才发现，光考了好大学也是没有用的。” &ndash; 《我上了985,211，才发现自己一无所有》 <br/></p></blockquote>
<p>如果考上985，211的“小镇做题家”都如此自嘲一无所有，那些没有考上211的小镇考生，又该如何自处呢？ <br/></p>
<p>当聊起大学和学历话题的时候，我时常和名校毕业的高中好友开玩笑，我不是“小镇做题家”，虽然我和你们一样来自小镇，但是我连题都做不好。 <br/></p>
<h3 id="直觉依赖者的探索之路"><span class="section-num">3.1</span> 直觉依赖者的探索之路</h3>
<p>如果按照书中作者的分类标准，我属于来自农村的，第一代大学生（父母都不是大学生）的直觉依赖模式学子。 <br/></p>
<p>是那种最需要靠教育改变命运的学生，并不真的知道该在大学里如何做才能改变命运。 <br/></p>
<p>对于升学，出国，就业这三个出路，我一开始就把【出国】这个选项给排除了，小镇来的我，家里并没有足够的财力支撑我出国，何况我的学校也不容易申请到好学校（现在看来，这个理由略为牵强）。 <br/></p>
<p>升学读研也不是我的目标，我对走学术路线没有兴趣，读完研也终究要工作，计算机相关行业，研究生学历与本科学历相比，并没有跃迁式差距。 <br/></p>
<p>所以我一开始就选定了【就业】的路线，我也希望可以早点赚钱为父母分担。 <br/></p>
<p>因为没有人指导，又不清楚迷宫的规则，我并不清楚要如何做才能取得【就业】的优势，或者做好就业的准备。 <br/></p>
<p>大一开始时，还是按照高中的【勤学苦读】模式，晚上没有课的时候去课室学习，解高数的练习题，再预习专业课。 <br/></p>
<p>这样的学习模式持续了两个月，觉得相当别扭和迷茫，看到周围宿舍的大神们已经开始编写代码，甚至其中还有中学就开始自学编程的大神，我解高数题又有什么用呢。 <br/></p>
<p>恰好赶上学校的社团招新，我就加入一个校级社团的【网络部】，希望可以借机学习到计算机相关的知识，学习怎么修电脑或者装操作系统。 <br/></p>
<p>社团生活的确让我学习到基础的电脑维修知识，更重要的是，让我认识到同系的学长们，对于我想学习修电脑的兴趣，他们纠偏道，单纯的硬件组装其实没有太大的潜力，还是做软件开发更有前途。 <br/></p>
<p>在学长们的指导下，我开始到<a href="imooc.com/">慕课网</a>和<a href="https://www.w3schools.com/">W3School</a>学习Html，CSS，Javascript这三剑客，开始学习前端开发，而后我又了解【前端开发】，【后端开发】，【移动端开发】的职业路径。 <br/></p>
<p>浅尝【前端开发】之后，发现自己对此并没有太多兴趣，又开始尝试【后端开发】的路线。 <br/></p>
<p>因为慕课网有把【后端开发】的课程列出来，我就知道【后端开发】需要学习什么样的技术，如Java/C++，数据库，计算机网络，我就可以有的放矢地去豆瓣上搜索对应的高分书籍来自学。 <br/></p>
<p>我的迷宫有了【地图】，我自然是要加速前行，我在大二的时候，就用豆瓣上列出来的经典教科书，把相关的必修专业课给自学完了，效果虽不如老师亲授，但终究有所获。 <br/></p>
<p>就如我在<a href="https://ramsayleung.github.io/zh/post/2023/%E8%BF%99%E4%BA%9B%E5%B9%B4%E8%B5%B0%E8%BF%87%E7%9A%84%E8%B7%AF_%E4%BB%8E%E5%B9%BF%E5%B7%9E%E5%88%B0%E6%B8%A9%E5%93%A5%E5%8D%8E/">《那些年走过的路，从广州到温哥华》</a>介绍过，而后就走上做项目和实习之路。 <br/></p>
<p>对于【直觉依赖模式】的学子来说，我觉得了解迷宫游戏规则最好的方式是和同系的学长学姐交流，因为他们曾处在和你同样的境况，又就读于相同的院校和专业，并且他们先于我们两到三年去探索这个迷宫，所以他们能提供最切实可行，并且可复制的路径。 <br/></p>
<h3 id="答案并不唯一"><span class="section-num">3.2</span> 答案并不唯一</h3>
<p>正如作者所言，这个迷宫会有不同的出口，在大学过的每一天会将学子领入不同的小路。 <br/></p>
<p>二十岁的我可能希望可以从自己愿景的出口走出来，三十岁的我却有了不一样的看法，能找到自己的迷宫出口固然可贵，但是探索迷宫的过程也相当珍贵，大可不必那么功利，迷茫也是人生常态。 <br/></p>
<p>【就业】，【升学】，【考研】只是社会的评判标准，做个有趣的人也未尝不可。 <br/></p>
<h2 id="大学之后"><span class="section-num">4</span> 大学之后</h2>
<p>在大学的时候，受学长们的影响，觉得能去BAT（Baidu，Alibaba，Tencent）的大厂，就算是个很好的出路了。 <br/></p>
<p>所以当时一心把去大厂当作毕业的目标，当拿到个A厂Offer之后，就没有面试其他公司，自然也没有offer来compete。 <br/></p>
<p>但是我从来没有想过，拿到Offer，入职之后，又该如何？ <br/></p>
<p>再追求升职加薪，面向晋升编程？ <br/></p>
<p>以前是把高考结束，考上大学当作是马拉松的终点，上大学之后又把拿Offer当作迷宫的出口？ <br/></p>
<p>如果人生是个没有出口的迷宫呢。 <br/></p>
<h3 id="迷宫并没有出口"><span class="section-num">4.1</span> 迷宫并没有出口</h3>
<p>作者说大学是个有多个出口的迷宫，如果把迷宫的概念延伸出来，每个人的人生从大学之后就都是迷宫了（如果不上大学，那么出路就更早分化），高中之后，就不再是以成绩作为唯一的标准。 <br/></p>
<p>当标准都不一样，就更没有办法衡量什么是【最好】的路，只有最适合自己的路。 <br/></p>
<p>享受探索迷宫的过程也可成为乐趣。 <br/></p>
<h3 id="路要怎么走"><span class="section-num">4.2</span> 路要怎么走</h3>
<p>过年前和发小喝茶聊天，聊到了他为人夫，为人父的事情，他提到当初他在产房等待女儿出生的时候，护士和他聊天的事： <br/></p>
<p>护士问，他是否是95后，他说是。 <br/></p>
<p>护士说，95后现在都不想生孩子了，觉得压力很大。 <br/></p>
<blockquote>
<p>我：那你有同样的感觉么？ <br/></p>
<p>发小：有阿，也觉得压力很大。 <br/></p>
<p>我笑道：那你还生？ <br/></p>
<p>发小笑回：世界上只有一种英雄主义，那就是认清生活的真想之后，继续热爱生活。 <br/></p></blockquote>
<p>在两个人的笑声中，听到发小说出罗曼罗兰的名句，觉得发小已经活出这句话的精髓了。 <br/></p>
<p>写在最后，鸡汤一下： <br/></p>
<p>路要怎么走，每个人都会有自己的选择，但了解迷宫的规则的【学子】，路可以走得更加自在。 <br/></p>
<p>
<figure>
    
    
    <input type="checkbox" id="zoomCheck-14be9" hidden>
    <label for="zoomCheck-14be9">
    
    
    <img class="zoomCheck" loading="lazy" src="/ox-hugo/v2-470dc54d213bb4ae958c9adda21b961b_1440w.jpg"/> 
    
    
    </label>
</figure>
 <br/></p>
<h2 id="参考"><span class="section-num">5</span> 参考</h2>
<ul>
<li><a href="https://book.douban.com/subject/36190074">《金榜题名之后：大学生出路分化之迷》</a> <br/></li>
<li><a href="https://www.lifeweek.com.cn/article/33584">《我上了985，211，才发现自己一无所有》</a> <br/></li>
</ul>
<div center class="qr-container">
<img src="/ox-hugo/qrcode_gh_e06d750e626f_1.jpg" alt="qrcode_gh_e06d750e626f_1.jpg" width="160px" height="160px" center="t" class="qr-container" />
公号同步更新，欢迎关注👻
</div>
]]></content:encoded>
    </item>
    <item>
      <title>胡说：从西游记看职场感悟</title>
      <link>https://ramsayleung.github.io/zh/post/2023/%E4%BB%8E%E8%A5%BF%E6%B8%B8%E8%AE%B0%E7%9C%8B%E8%81%8C%E5%9C%BA%E6%84%9F%E6%82%9F/</link>
      <pubDate>Sat, 16 Dec 2023 09:46:00 -0800</pubDate>
      <guid>https://ramsayleung.github.io/zh/post/2023/%E4%BB%8E%E8%A5%BF%E6%B8%B8%E8%AE%B0%E7%9C%8B%E8%81%8C%E5%9C%BA%E6%84%9F%E6%82%9F/</guid>
      <description>&lt;h2 id=&#34;前言&#34;&gt;&lt;span class=&#34;section-num&#34;&gt;1&lt;/span&gt; 前言&lt;/h2&gt;
&lt;p&gt;前几天在讨论刷题工作，分享职场经历（也就是水群）的群里，有位「老好人」senior 工程师向大家倾诉他的职场烦恼。 &lt;br/&gt;&lt;/p&gt;
&lt;p&gt;他作为项目的后端负责人，把后端的活都又快又好地干完了，然后前端毫无进度，大家看起来还没有什么责任心和紧迫感。 &lt;br/&gt;&lt;/p&gt;</description>
      <content:encoded><![CDATA[<h2 id="前言"><span class="section-num">1</span> 前言</h2>
<p>前几天在讨论刷题工作，分享职场经历（也就是水群）的群里，有位「老好人」senior 工程师向大家倾诉他的职场烦恼。 <br/></p>
<p>他作为项目的后端负责人，把后端的活都又快又好地干完了，然后前端毫无进度，大家看起来还没有什么责任心和紧迫感。 <br/></p>
<p>如果项目不做成，原有的客户都会决定放弃公司的产品，转投其他公司。 <br/></p>
<p>所以这位老哥就会忍不住在干好自己的活的同时，去前端帮帮忙. <br/></p>
<p>然后过了一段时间之后，不干活的前端们开始疯狂向后端推卸责任，明里暗里，阴阳怪气指责后端问题，导致项目被block住. <br/></p>
<p>群友们纷纷给自己的建议，有建议和经理1:1 把事情捅出来的；有建议下次提前和经理同步进度，暴露风险的。 <br/></p>
<p>此时，老道的群主也出来给出自己的建议： <br/></p>
<ol>
<li>找到自己工作的亮点，要把亮点展示给老板们，然后离这群不干活的人远点，有啥要求就去捧杀下他们，说他们能力强，进度喜人，自己就不过去拖后腿了 <br/></li>
<li>通过提管理手段来暴露他们的问题，而不是直接去和经理说谁谁不好，口说无凭的; 代码质量差就多组织代码review, 没进度就每周或每两周review 进度, 没产出就建议review 代码量和设计文档. <br/></li>
<li>如果没人听自己的建议，那就放慢点节奏，自己找点事消磨下时间，总不能指望没人重视自己的项目，还为它夙兴夜寐 <br/></li>
</ol>
<p>用群主的原话来总结： <br/></p>
<blockquote>
<p>银行被抢了，是冲上去和歹徒搏斗，牺牲了还要为是不是工伤扯皮？还是顺便把自己和领导亏空的那部分也算在损失里，提拔一下？ <br/></p></blockquote>
<p>群主的话可谓是振聋发聩。 <br/></p>
<p>当然，企业老板听了可能会不高兴，觉得给了员工工资，即使公司搞996，搞降本增效，裁员减薪，员工也应该献出自己的心脏。 <br/></p>
<p>因为我总是读些乱七八糟的东西，所以我思绪比较容易飞扬，总是会联想到一些不搭边的东西。 <br/></p>
<p>群主的话让我联想到了《西游记》，如果以职场视角来打开《西游记》，就会发现完全不一样的内容，也解了我的心头之惑。 <br/></p>
<h2 id="胡说西游记"><span class="section-num">2</span> 胡说西游记</h2>
<p>年少时读《西游记》，读到的只是神魔鬼怪，孙悟空如何大战各路觊觎唐僧肉的妖魔鬼怪，一路通关刷副本护送师父西天取经的故事。 <br/></p>
<p>现在想来，如果《西游记》只是日本少年热血漫画的内容类似，又是如何被位列中国的四大名著之一的呢？ <br/></p>
<p>有人说西游记的仙魔志怪只是皮，骨是人性，所以才能经久不衰，流传数百年。 <br/></p>
<p>那么人性又体现在哪呢？ <br/></p>
<h3 id="困惑"><span class="section-num">2.1</span> 困惑</h3>
<p>先来看下我曾经困惑的地方。 <br/></p>
<p>每次唐僧师徒落难，孙悟空营救未果，都向去天上的神仙，或者去地府的阎王救助，众人总是口称「大圣爷」， <br/>
恭敬相待，殷勤相从，基本是有求必应。 <br/></p>
<p>年少时觉得合情合理，因为孙悟空是「齐天大圣」，所谓众神都小心应付着。 <br/></p>
<p>出来打工之后，才意识到这些个情节非常不合理： <br/></p>
<p>按理说天上的众神都位列仙班，都是「体制内」有头有脸的人物， <br/>
哪天来了个石头蹦出来的破落户，连个「编制」都没有，敢自封「齐天大圣」， <br/>
还把我们的机关单位大闹了一场，让我们在领导面前丢光了脸面，连大领导「玉帝」书记都被牵连了。 <br/></p>
<p>现在他有事要来求我们帮忙， <br/>
谁有空谁帮，反正我手上的事情是非常紧急的，会影响到万千生民的，不比你救个师父重要？ <br/></p>
<p>你自己不是很能么，自己去救嘛，找我们干嘛？ <br/></p>
<p>有人可能会觉得我以「小人」之心揣度「神仙」之腹，人家都是「神仙」了，还会计较这些嘛？ <br/></p>
<p>肯定是能修炼到喜、怒、哀、惧、爱、恶、欲七情皆去的境界。 <br/></p>
<p>只是《西游记》中有明确描述，「神仙」并非是没有七情六欲的。 <br/></p>
<p>在《西游记》的结尾，唐僧师徒历尽艰辛，终于到了灵山见佛祖，得偿所愿要把真经取回去，却遇到佛祖座下弟子阿傩，迦叶索贿。 <br/></p>
<p>他们索贿不成，甚至只给了唐僧师徒无字经让他们带回去。 <br/></p>
<p>「佛」犹如此，「神」何以堪？ <br/></p>
<h3 id="涂生死簿"><span class="section-num">2.2</span> 涂生死簿</h3>
<p>在孙悟空在菩提祖师学到学到出神入化的神通和七十二变的本领后， <br/>
为了改变自己以及猴子猴孙们都逃避不了生老病死的命运，去地府把生死簿中，把猴属之类，但有名者，一概勾之： <br/></p>
<blockquote>
<p>悟空道：“我也不记寿数几何，且只消了名字便罢。取笔过来。” <br/></p>
<p>那判官慌忙捧笔，饱掭浓墨。 <br/></p>
<p>悟空拿过簿子，把猴属之类，但有名者，一概勾之。捽下簿子道：“了帐，了帐，今番不伏你管了。”一路棒，打出幽冥界。 <br/></p>
<p>那十王不敢相近，都去翠云宫，同拜地藏王菩萨，商量启表，奏闻上天，不在话下。 <br/></p></blockquote>
<p>相当于孙悟空把地府这个机构最重要的账本都给改没了，阎王这个主管相当于严重渎职啊，负有重大管理责任! <br/></p>
<p>那么为什么每次孙悟空来找阎王，阎王都毕恭毕敬的呢？ <br/></p>
<p>以前觉得是阎王怕了孙悟空，所以因惧生敬。 <br/></p>
<p>现在联想到群主的话，意识到阎王不但不会因失职而沮丧，并记恨孙悟空，反而会乐得鼻涕泡都出来。 <br/></p>
<p>孙悟空就是「抢劫银行」的劫匪阿，自己有多少亏空和前科， <br/>
有什么亲戚好友免除死期的，有什么用钱换阳寿的事，全部都可以算到孙悟空头上。 <br/></p>
<p>有审计机构过来审查，我都可以说是被孙悟空涂掉的。 <br/></p>
<p>有这么个冤大头，阎王自然开心得不行，可能阎王他父亲都没有对他这么好，在工作上这么关照他。 <br/></p>
<h3 id="纵天马"><span class="section-num">2.3</span> 纵天马</h3>
<p>在孙悟空在东海夺取了「定海神针」作「如意金箍棒」，大闹森罗殿，私改生死簿后，玉帝大为震惊，然后听从建议， <br/>
招安了孙悟空，封为「弼马温」. <br/></p>
<p>「弼马温」就是御马监正堂管事，手下还有监丞、监副、典簿、力士等大小官员不少人，管辖天马千匹, 所以是个管后勤的职位。 <br/></p>
<p>原来孙悟空以为这是个「一品」大官，最后却在旁人口中知晓，这个是个未入流的小官，不禁大怒，把公案推倒，在天河放走了所有的天马。 <br/></p>
<p>想来天马虽然名为天马，也不是以云雾为食的，想必也要有后勤草料供应，还有各种马具，马廊等配套设施。 <br/></p>
<p>现在孙悟空把天马都放了，那么属下的亏空，上下游的贪墨，又可以把锅栽在孙悟空头上了。 <br/></p>
<p>虽然我们中饱私囊，1000匹天马的财政拨款，贪了900匹，实际只有100匹，但是你孙悟空把马都放了，我们就咬死说马就是有1000匹的。 <br/></p>
<p>好比粮仓主管离任，对上官不满，放火把粮仓烧了，不管里面是陈米，沙土还是精米，下属一概都说是精米，那都是主管的责任了。 <br/></p>
<h3 id="关系"><span class="section-num">2.4</span> 关系</h3>
<p>唐僧，转世前为金蝉子，如来佛祖的二弟子，因犯错被贬，转世成为唐僧, 要通过取真经，重新成佛，回来佛祖身边。 <br/></p>
<p>也就是说，取经队伍里面，带头那个是如来董事长的亲信秘书，和董事长关系密切。 <br/></p>
<p>而取经也变成了一件在大领导「玉帝」书记和如来董事长那挂上号的，核心KPI项目了. <br/></p>
<p>那么当孙悟空来求助的时候，也就变成了一件可以在书记和董事长那里展示自己手段的事了。 <br/></p>
<p>既能露脸，也能赚credit. <br/></p>
<p>如果能帮上忙，那么就可以在领导面前露把脸，展示下自己的本领； <br/>
如果帮不上忙，也没什么大碍，你看孙悟空他业务能力多强，他都求助，肯定不是啥容易啃的骨头，我处理不成也很正常。 <br/></p>
<p>反正有事没事去老板面前刷刷脸总是好的，你没看到，领导叫踢球，群里一群人响应么？ <br/></p>
<p>你觉得他们是想踢球呢，还是想和领导踢球呢？ <br/></p>
<h2 id="总结"><span class="section-num">3</span> 总结</h2>
<p>经典之所以能经得起时间的洗礼，历久弥新，大抵是因为总有人能拿书里的事，说自己的话吧。 <br/></p>
<hr>
<h3 id="历史文章精选"><span class="section-num">3.1</span> 历史文章精选</h3>
<ul>
<li>旅加经历 <br/>
<ul>
<li><a href="https://ramsayleung.github.io/zh/post/2023/%E8%BF%99%E4%BA%9B%E5%B9%B4%E8%B5%B0%E8%BF%87%E7%9A%84%E8%B7%AF_%E4%BB%8E%E5%B9%BF%E5%B7%9E%E5%88%B0%E6%B8%A9%E5%93%A5%E5%8D%8E/">这些年走过的路：从广州到温哥华</a> <br/></li>
<li><a href="https://ramsayleung.github.io/zh/post/2023/%E5%8A%A0%E6%8B%BF%E5%A4%A7%E4%B9%8B%E5%88%9D%E4%BD%93%E9%AA%8C/">加拿大之初体验</a> <br/></li>
<li><a href="https://ramsayleung.github.io/zh/post/2023/%E5%8A%A0%E6%8B%BF%E5%A4%A7%E8%80%83%E9%A9%BE%E7%85%A7%E7%9A%84%E7%BB%8F%E5%8E%86/">加拿大考驾照的经历</a> <br/></li>
</ul>
</li>
<li>历史与思考 <br/>
<ul>
<li><a href="https://ramsayleung.github.io/zh/post/2023/%E7%BD%AE%E8%BA%AB%E4%BA%8B%E5%86%85/">为什么梦想买不起，故乡回不去</a>(和谐版本, 原版本<sup id="fnref:1"><a href="#fn:1" class="footnote-ref" role="doc-noteref">1</a></sup>) <br/></li>
<li><a href="https://ramsayleung.github.io/zh/post/2023/%E6%B6%A6%E5%90%91%E4%BD%95%E6%96%B9_%E4%B8%8D%E5%AE%8C%E5%85%A8%E8%82%89%E8%BA%AB%E7%BF%BB%E5%A2%99%E6%8C%87%E5%8C%97/">润向何方：不完全肉身翻墙指北</a> <br/></li>
<li><a href="https://ramsayleung.github.io/zh/post/2023/%E7%9A%87%E5%B8%9D%E4%B8%8E%E5%AE%98%E5%83%9A/">皇帝与官僚：「上面」与「下面」</a> <br/></li>
<li><a href="https://ramsayleung.github.io/zh/post/2021/%E5%90%9B%E4%B8%BB%E8%AE%BA/">《君主论》：所谓「帝王心术」</a> <br/></li>
</ul>
</li>
<li>工具与分享 <br/>
<ul>
<li><a href="https://ramsayleung.github.io/zh/post/2023/%E6%88%91%E7%9A%84%E5%86%99%E4%BD%9C%E6%B5%81/">我的写作流</a> <br/></li>
<li><a href="https://ramsayleung.github.io/zh/post/2023/%E6%88%91%E7%9A%84%E7%94%BB%E5%9B%BE%E6%B5%81/">我的画图流：画图工具与技巧分享</a> <br/></li>
<li><a href="https://ramsayleung.github.io/zh/post/2023/%E6%88%91%E7%9A%84%E6%90%9C%E7%B4%A2%E6%B5%81/">我的搜索流：高效搜索经验分享</a> <br/></li>
<li><a href="https://ramsayleung.github.io/zh/post/2022/feynman_technique/">最好的学习方式：费曼学习法(Feynman Technique)</a> <br/></li>
<li><a href="https://ramsayleung.github.io/zh/post/2021/%E7%B3%BB%E7%BB%9F%E6%80%9D%E8%80%83/">系统思考：既见树木，又见森林</a> <br/></li>
<li><a href="https://ramsayleung.github.io/zh/post/2023/gmail%E5%9C%B0%E5%9D%80%E7%9A%84%E9%9A%90%E8%97%8F%E6%8A%80%E5%B7%A7/">两个鲜为人知的Gmail地址技巧</a> <br/></li>
</ul>
</li>
<li>职场与思考 <br/>
<ul>
<li><a href="https://ramsayleung.github.io/zh/post/2023/%E4%BB%8E%E5%BE%AE%E4%BF%A1%E6%94%AF%E4%BB%98%E7%A6%BB%E7%BA%BF_%E6%88%91%E5%B8%A6%E8%B5%B0%E4%BA%86%E4%BB%80%E4%B9%88/">那些年，我从微信支付学到的东西</a> <br/></li>
</ul>
</li>
</ul>
<div center class="qr-container">
<img src="/ox-hugo/qrcode_gh_e06d750e626f_1.jpg" alt="qrcode_gh_e06d750e626f_1.jpg" width="160px" height="160px" center="t" class="qr-container" />
公号同步更新，欢迎关注👻
</div>
<div class="footnotes" role="doc-endnotes">
<hr>
<ol>
<li id="fn:1">
<p>: <a href="http://ramsayleung.github.io/zh/post/2023/%E7%BD%AE%E8%BA%AB%E4%BA%8B%E5%86%85/">http://ramsayleung.github.io/zh/post/2023/%E7%BD%AE%E8%BA%AB%E4%BA%8B%E5%86%85/</a>  <br/>&#160;<a href="#fnref:1" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
</ol>
</div>
]]></content:encoded>
    </item>
    <item>
      <title>为什么梦想买不起，故乡回不去</title>
      <link>https://ramsayleung.github.io/zh/post/2023/%E7%BD%AE%E8%BA%AB%E4%BA%8B%E5%86%85/</link>
      <pubDate>Sat, 14 Jan 2023 23:21:00 -0800</pubDate>
      <guid>https://ramsayleung.github.io/zh/post/2023/%E7%BD%AE%E8%BA%AB%E4%BA%8B%E5%86%85/</guid>
      <description>&lt;h2 id=&#34;前言&#34;&gt;&lt;span class=&#34;section-num&#34;&gt;1&lt;/span&gt; 前言&lt;/h2&gt;
&lt;p&gt;有心仪工作的城市房价太高，而房价合适的城市没有心仪的工作。&lt;/p&gt;
&lt;p&gt;梦想买不起，故乡回不去。&lt;/p&gt;
&lt;p&gt;眼看着大城市一座座高楼拔地而起，却难觅容身之所。&lt;/p&gt;
&lt;p&gt;为什么房子这么贵？为什么归属感这么低？为什么非要孤身在外地闯荡，不能和父母家人在一起？&lt;/p&gt;</description>
      <content:encoded><![CDATA[<h2 id="前言"><span class="section-num">1</span> 前言</h2>
<p>有心仪工作的城市房价太高，而房价合适的城市没有心仪的工作。</p>
<p>梦想买不起，故乡回不去。</p>
<p>眼看着大城市一座座高楼拔地而起，却难觅容身之所。</p>
<p>为什么房子这么贵？为什么归属感这么低？为什么非要孤身在外地闯荡，不能和父母家人在一起？</p>
<p>这些问题都与地方政府推动经济发展的模式有关，《置身事内》这本书都给出了自己的解答。</p>
<p>结合书中的内容和我自己的阅历，我也有了些自己的浅薄见解，我希望把作者的书，读成我自己的书。</p>
<p>先把形成这个结果的历史原因与决策摆出来：</p>

<figure><a href="/ox-hugo/%e5%9c%9f%e5%9c%b0%e8%b4%a2%e6%94%bf%e6%97%b6%e9%97%b4%e7%ba%bf.png">
    
    
    <input type="checkbox" id="zoomCheck-aa7ff" hidden>
    <label for="zoomCheck-aa7ff">
    
    
    <img class="zoomCheck" loading="lazy" src="/ox-hugo/%e5%9c%9f%e5%9c%b0%e8%b4%a2%e6%94%bf%e6%97%b6%e9%97%b4%e7%ba%bf.png"/> 
    
    
    </label></a>
</figure>

<h2 id="改革开放"><span class="section-num">2</span> 改革开放</h2>
<p>1978年12月18日中共十一届三中全会后，开始实施的一系列以经济为主的改革措施，可总结为“对内改革，对外开放”。</p>
<p>这是一切故事的起点。</p>
<h2 id="分税制改革"><span class="section-num">3</span> 分税制改革</h2>
<p>办事要花钱，如果没钱，话说得再好听也难以落实。钱从哪来，从税里来。所以要真正理解政府行为，必然要了解财税</p>
<h3 id="财政包干-1985-1993"><span class="section-num">3.1</span> 财政包干：1985-1993</h3>
<p>财政承包始于1980年，中央与省级财政之间对收入和支出进行包干，地方可以留下一部分增收。</p>
<p>1980—1984年是财政包干体制的实验阶段，1985年以后全面推行，建立了“分灶吃饭”的财政体制.</p>
<p>既然是承包，当然要根据地方实际来确定承包形式和分账比例，所以财政包干形式五花八门，各地不同。比较流行的一种是“收入递增包干”。</p>
<p>以1988年的北京为例，是以1987年的财政收入为基数，设定一个固定的年收入增长率4%，超过4%的增收部分都归北京，没超过的部分则和中央五五分成。
假如北京1987年收入100亿元，1988年收入110亿元，增长10%，那超过了4%增长的6亿元都归北京，其余104亿元和中央五五分成。</p>
<p>广东的包干形式更简单，1988年上解中央14亿元，以后每年在此基础上递增9%，剩余的都归自己。
也就是说，如果后续广东的财政收入增长高于9%, 那么能留下的钱就会越来越多（事实也是如此）</p>
<p>财政承包制下，交完了中央的，剩下的都是地方自己的，因此地方有动力扩大税收来源，大力发展经济。</p>
<h4 id="问题-地方越富-中央越穷"><span class="section-num">3.1.1</span> 问题：地方越富，中央越穷</h4>
<p>税制是这样设计，随着时间的推移，却出现了中央财政越来越穷的问题。</p>
<p>正常人都希望是自己手上的钱越来越好，要交的钱越少越好，地方政府也不例外。</p>
<p>一方面，地方政府控制预算收入增长，避免增长过快，毕竟账面上增加得越多，要交的就越多；
另外一方面，虽然地方预算内的税收收入要和中央分成，但预算外收入则可以独享，地方政府就可以通过给企业免税，再用其他手段，把应收的税款收回来，就能免于与中央分成。</p>
<p>就出现了，经济发展越来越好，地方政府越来越富裕，中央却越来越穷的问题。</p>
<p>翻开中国漫长的历史，就会发现，「弱干强枝」乃取祸之道，不利于政治稳定，所以税制是到了非改不可的地步了。</p>
<h3 id="分税制改革-1994"><span class="section-num">3.2</span> 分税制改革：1994</h3>
<p>1994年的分税制改革把税收分为三类：中央税（如关税）、地方税（如营业税）、共享税（如增值税）.</p>
<p>分税制改革中最重要的税种是增值税，占全国税收收入的1/4。
改革之前，增值税（即产品税）是最大的地方税，改革后变成共享税，中央拿走75%，留给地方25%. 企业只要开工生产，不管盈利与否都得交增值税，规模越大缴税越多。</p>
<p>分税制改革，地方阻力很大。比如在财政包干制下过得很舒服的广东省，就明确表示不同意分税制。
与广东的谈判能否成功，关系到改革能否顺利推行。
为了这项改革的展开，朱镕基总理亲自带队，用两个多月的时间先后走了十几个省，
面对面地算账，深入细致地做思想工作，最后广东还是服从了大局。</p>
<p>分税制是20世纪90年代推行的根本性改革之一，也是最为成功的改革之一。
中央占全国预算收入的比重从改革前的22%一跃变成55%，并长期稳定在这一水平。但分税制改革的影响深远，还远不止于此。</p>
<p>有钱才能办事，而税收又关系到政府能收到多少钱。</p>
<p>而分税制改革又调整了税收分配模式，直接影响到地方政府的财税收入，为地方政府后续搞「土地财政」埋下了伏笔。</p>
<h2 id="土地财政"><span class="section-num">4</span> 土地财政</h2>
<h3 id="缘起"><span class="section-num">4.1</span> 缘起</h3>
<p>1994的分税制改革并没有改变地方政府以经济建设为中心的任务，却减少了其手头可支配的财政资源。</p>
<p>对于地方政府而言，钱变少了，活还是要照干，地方政府环视一圈，盘了下自己手上有什么资源可以用，
最后把目光投到拥有的，最有价值的资源：**土地**。</p>
<h3 id="土地财政"><span class="section-num">4.2</span> 土地财政</h3>
<p>所谓“土地财政”，不仅包括巨额的土地使用权转让收入，还包括与土地使用和开发有关的各种税收收入。
其中大部分税收的税基是土地的价值而非面积，所以税收随着土地升值而猛增。</p>
<p>这些税收分为两类，一类是直接和土地相关的税收，其收入百分之百归属地方政府; 另一类税收则和房地产开发和建筑企业有关，主要是增值税和企业所得税，要与中央分成。</p>
<h3 id="土地金融"><span class="section-num">4.3</span> 土地金融</h3>
<p>再穷的国家也有大片土地，土地本身并不值钱，值钱的是土地之上的经济活动。</p>
<p>若土地只能用来种小麦，价值便有限，可若能吸引来工商企业和人才，价值想象的空间就会被打开，
笨重的土地就会展现出无与伦比的优势：它不会移动也不会消失，天然适合做抵押，做各种资本交易的压舱标的，身价自然飙升。</p>
<p>地方政府就可以把与土地相关的未来收入资本化，去获取贷款和各类资金，将“土地财政”的规模成倍放大为“土地金融”</p>
<h4 id="城投公司"><span class="section-num">4.3.1</span> 城投公司</h4>
<p>法律规定，地方政府不能从银行贷款，2015年之前也不允许发行债券，所以政府要想借钱投资，需要成立专门的公司。</p>
<p>这些公司名称大多有「建设投资」和「投资开发」的字样，因此统称「城投公司」</p>
<h2 id="房价与债务"><span class="section-num">5</span> 房价与债务</h2>
<h3 id="房价的影响因素"><span class="section-num">5.1</span> 房价的影响因素</h3>
<p>房价短期内受很多因素影响，但中长期主要由供求决定。无论是发达国家还是发展中国家，房屋供需都与人口结构密切相关，因为年轻人是买房主力。</p>
<p>年轻人大都流入经济发达城市，但这些城市的土地供应又受政策限制，因此房屋供需矛盾突出，房价居高不下。</p>
<p>&ldquo;好消息&quot;是因为房价高企等种种原因，中国的出生人口正逐年下降，按照「官方数据」, 2021年全年出生人口1062万人，自然增长率为0.34%. 而2022年的人口数据还没有公布，各方估计有望下降到1000万以下，甚至实现自然增长率负增长的目标。</p>
<p>这就是意味着，对于等等党来说，再多等个十几年，大概率就没有年轻人和你争买房子了，就可以在梦想的地方，以梦想的价格买到想要的房子。</p>
<h3 id="政府债务与房价"><span class="section-num">5.2</span> 政府债务与房价</h3>
<p>随着城市化和商品房改革，土地价值飙升，政府不仅靠土地使用权转让收入支撑起了“土地财政”，还将未来的土地收益资本化，从银行和其他渠道借入了天量资金，利用“土地金融”的巨力，推动了快速的工业化和城市化。</p>
<p>但同时也积累了大量债务。这套模式的关键是土地价格。</p>
<p>只要不断地投资和建设能带来持续的经济增长，城市就会扩张，地价就会上涨，就可以偿还连本带利越滚越多的债务。</p>
<p>可经济增速一旦放缓，地价下跌，土地出让收入减少，累积的债务就会成为沉重的负担，可能压垮融资平台甚至地方政府。</p>
<p>而据中国冰川思想库研究员提供的数据，截至2022年，中国城投债（就是地方政府控制的公司借的钱）规模可能达到65万亿，中国人均负债5万元。</p>
<p>我画了一张系统循环图来分析其中的因果关系：</p>
<p>（系统循环图：A -(+)&gt; B代表: A的增加会导致B的增加，A的减少会导致B的减少；A-(-)&gt;B代表：A的增加会导致B的减少，反之亦然）</p>

<figure><a href="/ox-hugo/%e5%9c%9f%e5%9c%b0%e9%87%91%e8%9e%8d-%e6%94%bf%e5%ba%9c%e5%80%ba%e5%8a%a1.png">
    
    
    <input type="checkbox" id="zoomCheck-bd83e" hidden>
    <label for="zoomCheck-bd83e">
    
    
    <img class="zoomCheck" loading="lazy" src="/ox-hugo/%e5%9c%9f%e5%9c%b0%e9%87%91%e8%9e%8d-%e6%94%bf%e5%ba%9c%e5%80%ba%e5%8a%a1.png"/> 
    
    
    </label></a>
</figure>

<p>可见，主客观上，政府和官员都不会想土地价格降下来，因为一降下来，地方政府可能被债务压垮，官员个人待遇也会大受影响。</p>
<p>另外，因为政府垄断了土地，而土地的供给又影响土地出让的价格，所以政府必然会制造供给侧的短缺，以拉高土地出让的价格。</p>
<p>而土地出让价格又是房价的大头，所以政府是不会想房价降下来的。</p>
<h3 id="银行信贷"><span class="section-num">5.3</span> 银行信贷</h3>
<p>2008年至2009年，为应对全球金融危机，我国迅速出台“4万亿”计划，同时不断降准降息，放宽银行信贷（也就是所谓的「大放水」），这些资金找到了基建和房地产两大载体，相关投资迅猛增加。</p>
<p>虽说银行增加货币供给，增加信贷比重，但是各种实体企业总是喊「借钱难，借不到钱」，这是因为银行尤其偏爱以土地和房产为抵押物的贷款。</p>
<p>先看住房按揭: 银行借给张三100万元买房，实质不是房子值100万元，而是张三值100万元，因为他未来有几十年的收入。</p>
<p>但未来很长，张三有可能还不了钱，所以银行要张三先抵押房子，才肯借钱。
房子是个很好的抵押物，不会消失且容易转手，只要这房子还有人愿意买，银行风险就不大。
而房子具有普适性，李四要买的房子可能就是张三要卖的房子。</p>
<p>若没有抵押物，张三的风险就是银行的风险，但有了抵押物，风险就由张三和银行共担。
张三还要付30万元首付，相当于抵押了100万元的房子却只借到了70万元，银行的安全垫很厚。</p>
<p>再来看企业贷款: 银行贷给企业家李四500万元买设备，实质也不是因为设备值钱，而是用设备生产出的产品值钱，这500万元来源于李四公司未来数年的经营收入。</p>
<p>但作为抵押物，设备的专用性太强，价值远不如住房或土地，万一出事，想找到人接盘并不容易。
就算有人愿意接，价格恐怕也要大打折扣，所以银行风险不小。但若李四的企业有政府担保，甚至干脆就是国企，银行风险就小多了。</p>
<p>这就是加大流动性，资金也流不到实业企业中去的原因。</p>
<p>这也是个马太效应，除了有政府担保外，借了钱又还不上的企业成了大爷，银行担心这家企业还不上钱，破产，坏账，
也有意愿再借钱给他，借新债还旧债。</p>
<h3 id="居民债务"><span class="section-num">5.4</span> 居民债务</h3>
<p>根据央行的统计，2008年之后的10年，我国房价急速上涨，按揭总量越来越大，居民债务负担上涨了3倍多。</p>
<p>居民债务中有53%是住房贷款，24%是各类消费贷（如车贷）。这一数据可能还低估了与买房相关的债务，毕竟一些消费贷也被用来交首付买房了。</p>
<p>总体看来，我国居民的债务负担不低，且仍在快速上升。最主要的原因是房价上涨。</p>
<p>而居民债务居高不下，就很难抵御经济衰退，尤其是房产价格下跌所引发的经济衰退。</p>
<p>低收入人群的财富几乎全部是房产，其中大部分是欠银行的按揭，负债率很高，很容易受到房价下跌的打击。</p>
<h3 id="房价下跌与债务风险"><span class="section-num">5.5</span> 房价下跌与债务风险</h3>
<p>债务关系让经济各部门之间的联系变得更加紧密，任何部门出问题都可能传导到其他部门，一石激起千层浪，形成系统风险。</p>
<p>银行既贷款给个人，也贷款给企业。若有人不还房贷，银行就会出现坏账，需要压缩贷款；</p>
<p>得不到贷款的企业就难以维持，需要减产裁员；于是更多人失去工作，还不上房贷；银行坏账进一步增加，不得不继续压缩贷款……</p>
<p>如此，恶性循环便产生了:</p>

<figure><a href="/ox-hugo/%e5%80%ba%e5%8a%a1%e4%b8%8e%e9%a3%8e%e9%99%a91.png">
    
    
    <input type="checkbox" id="zoomCheck-8e8c8" hidden>
    <label for="zoomCheck-8e8c8">
    
    
    <img class="zoomCheck" loading="lazy" src="/ox-hugo/%e5%80%ba%e5%8a%a1%e4%b8%8e%e9%a3%8e%e9%99%a91.png"/> 
    
    
    </label></a>
</figure>

<p>如果房价下跌太多，房子的价值比要还房贷还低，而还贷圧力又超出可承受范围，债务人就有可能放弃首付，断供，造成银行坏账.</p>
<p>如果各部门负债都高，那应对冲击的资源和办法就不多，风吹草动就可能引发危机, 原因有二:</p>
<ol>
<li>负债率高的经济中，资产价格的下跌往往迅猛。
若债务太重，收入不够还本，甚至不够还息，就只能变卖资产，抛售的人多了，资产价格就会跳水</li>
<li>资产价格下跌会引起信贷收缩，导致资金链断裂。
借债往往需要抵押物（如房产和煤矿），若抵押物价值跳水，债权人（通常是银行）坏账就会飙升，不得不大幅缩减甚至干脆中止新增信贷，导致债务人借不到钱，资金链断裂，业务难以为继。</li>
</ol>
<p>一个部门的负债对应着另一个部门的资产。
债务累积或“加杠杆”的过程，就是人与人之间商业往来增加的过程，会推动经济繁荣。
而债务紧缩或“去杠杆”也就是商业活动减少的过程，会带来经济衰退。</p>
<p>举例来说，若房价下跌，老百姓感觉变穷了，就会勒紧裤腰带、压缩消费。
东西卖不出去，企业收入减少，就难以还债，债务负担过高的企业就会破产，银行会出现坏账，压缩贷款，哪怕好企业的日子也更紧了。</p>
<p>说出来有点难以置信，就是房价下跌，最终会影响到卖皮肤氪金的游戏公司和收交易手续费的金融科技公司，甚至出现裁员的情况。</p>
<p>基于以上分析，我认为未来的房价会是「跌不下，涨不上，买不起，卖不动」</p>
<h4 id="疫情与债务风险"><span class="section-num">5.5.1</span> 疫情与债务风险</h4>
<p>如果把疫情这个超大号黑天鹅与政府的应对造成的影响再纳入分析范畴，就会变成这个样子：</p>

<figure><a href="/ox-hugo/%e7%96%ab%e6%83%85%e4%b8%8e%e5%80%ba%e5%8a%a1%e9%a3%8e%e9%99%a92.png">
    
    
    <input type="checkbox" id="zoomCheck-73f1b" hidden>
    <label for="zoomCheck-73f1b">
    
    
    <img class="zoomCheck" loading="lazy" src="/ox-hugo/%e7%96%ab%e6%83%85%e4%b8%8e%e5%80%ba%e5%8a%a1%e9%a3%8e%e9%99%a92.png"/> 
    
    
    </label></a>
</figure>

<h3 id="人口与债务风险"><span class="section-num">5.6</span> 人口与债务风险</h3>
<p>如果把人口数量这台灰犀牛纳入到分析范畴，就会变成这个样子</p>

<figure><a href="/ox-hugo/%e4%ba%ba%e5%8f%a3%e4%b8%8e%e5%80%ba%e5%8a%a1%e9%a3%8e%e9%99%a93.png">
    
    
    <input type="checkbox" id="zoomCheck-1b310" hidden>
    <label for="zoomCheck-1b310">
    
    
    <img class="zoomCheck" loading="lazy" src="/ox-hugo/%e4%ba%ba%e5%8f%a3%e4%b8%8e%e5%80%ba%e5%8a%a1%e9%a3%8e%e9%99%a93.png"/> 
    
    
    </label></a>
</figure>

<p>(系统循环图的 <code>-||-&gt;</code> 标识表示滞后效应，产生作用需要时间)</p>
<h2 id="解决办法"><span class="section-num">6</span> 解决办法</h2>
<h3 id="政府债务"><span class="section-num">6.1</span> 政府债务</h3>
<p>任何国家的债务问题，解决方案都可以分成两个部分：一是偿还已有债务；二是遏制新增债务，改革滋生债务的政治、经济环境。</p>
<h4 id="偿还已有债务"><span class="section-num">6.1.1</span> 偿还已有债务</h4>
<p>如果借来的钱能用好，能变成优质资产、产生更高收入，那债务负担就不是问题。</p>
<p>但如果投资失败或干脆借钱消费挥霍，那就没有新增收入，还债就得靠压缩支出：居民少吃少玩，企业裁员控费，政府削减开支。</p>
<p>但甲的支出就是乙的收入，甲不花钱乙就不挣钱，乙也得压缩支出。</p>
<p>大家一起勒紧裤腰带，整个经济就会收缩，大家的收入一起减少。若收入下降得比债务还快，债务负担就会不降反升。</p>
<p>还债让债务人不好过，赖账让债权人不好过。所以偿债过程很痛苦，还有可能陷入经济衰退。</p>
<p>相比之下，增发货币也能缓解债务负担，「似乎」还不那么痛苦，因为没有「明显」的利益受损方，实施起来阻力也小.</p>
<p>但增发货币大概率会导致通货膨胀，国民手中的钱变得不值钱了，相当于全体国民为政府的债务买单</p>
<p>按照我们政府对国民负责任的态度，相信最终还是会选择这条路。</p>
<h4 id="遏制新增债务"><span class="section-num">6.1.2</span> 遏制新增债务</h4>
<p>理解了各类债务的成因之后，也就不难理解遏制新增债务的一些基本原则：限制房价上涨，限制“土地财政”和“土地金融”，限制政府担保和国有企业过度借贷，等等。</p>
<p>但困难在于，就算搞清楚了原因，也不一定就能处理好后果，因为“因”毕竟是过去的“因”，但“果”却是现在的“果”，时过境迁，很多东西都变了。</p>
<p>好比一个人胡吃海塞成了大胖子，要想重获健康，少吃虽然是必须的，但简单粗暴的节食可能会出大问题，必须小心处理肥胖引起的很多并发症。</p>
<p>为此，近几年政府出台了限制供给侧的政策，包括「房住不炒」，「三道红线」等等。</p>
<p>只是，在疫情的第三年，在清零导致的财政压力下，这些限制又有解绑的趋势。</p>
<h3 id="居民债务"><span class="section-num">6.2</span> 居民债务</h3>
<p>要化解居民债务风险，除了遏制房价上涨势头以外，根本的解决之道还在于提高收入，
尤其是中低收入人群的收入，鼓励他们到能提供更多机会和更高收入的地方去工作。</p>
<p>让地区间的经济发展和收入差距成为低收入人群谋求发展的机会，而不是变成人口流动的障碍。</p>
<p>很多事情都是提出愿景容易，执行落地难：</p>
<p>按照有关部门统计，2020年，民营企业从业人员占城镇就业的83%, 也就是说，要提高居民收入，就要做多做大做强民营企业，毕竟系统调优，也是针对热点，调优效果最好。</p>
<p>要发展好民营企业，就需要建立好的营商环境；</p>
<p>完善法律法规，不要再你法我笑；</p>
<p>提高宽松自由的环境，放宽媒体限制；</p>
<p>政府退出各种高利润的垄断行业，不再与民争利，不要既当裁判，又当运动员。</p>
<p>关于官营商业，盐铁专营的弊端，二千年前的《盐铁论》中，贤良文学已经阐述得非常清晰了。</p>

<figure><a href="/ox-hugo/%e6%8f%90%e9%ab%98%e5%b1%85%e6%b0%91%e6%94%b6%e5%85%a5.png">
    
    
    <input type="checkbox" id="zoomCheck-81a1b" hidden>
    <label for="zoomCheck-81a1b">
    
    
    <img class="zoomCheck" loading="lazy" src="/ox-hugo/%e6%8f%90%e9%ab%98%e5%b1%85%e6%b0%91%e6%94%b6%e5%85%a5.png"/> 
    
    
    </label></a>
</figure>

<ul>
<li>尊重与保护劳动者权益，把劳动者当作「人」而非「矿」</li>
<li>要让人口流动起来，就要改革革户籍制度，不要把农民绑死在土地上</li>
<li>效率低，营收差的国企要有退出机制，政府不能无限地为其输血，兜底</li>
<li>要完善法律法规，就要做到依法治国。年少时，听到依法治国，「有法可依，有法必依」八个字的准则，觉得理所当然。年纪渐长，才读懂背后的含义，原来有很多「有法不依，无法可依」的情况，也难怪会出现「你法我笑」的情况。</li>
<li>要政府不再与民争利，退出垄断行业，就要改革已有的经济结构。</li>
<li>要创新，就需要提供自由宽松的环境，因为创新就和基因突变一样，是无序的，甚至开始是异端的。量变产生质变，只有有足够多的创新，才能由市场进行选择，优胜劣汰，留下市场认可的创新。产品创新和生物进化一样，都是肥沃土壤，长出百花齐放的结果，不是哪个造物主指明的方向。</li>
<li>开放媒体，加强对行政执行和腐败的监管。</li>
<li>政府瘦身，建立小政府，减少对市场的干预，也减少对财政的压力。</li>
</ul>
<p>解法办法就在这里，但知易行难。 改革从来都不是请客吃饭，都是要下大决心，有壮士断腕的狠劲。</p>
<p>这些都是结构性的问题，只能做结构性改革。</p>
<p>但「深化改革」的口号，从我上小学，一直喊到我上大学，至于我们是离目标越来越近，还是越来越远，南辕北辙，摸着石头倒车。</p>
<p>相信大家心里还是有杆称的。</p>
<p>对于历史债务，Leader们常挂在嘴边的话是：「不重构是等死，重构是找死」，但是我们选择的路，大多是找死。</p>
<h2 id="总结"><span class="section-num">7</span> 总结</h2>
<h3 id="以古为鉴"><span class="section-num">7.1</span> 以古为鉴</h3>
<p>年少时读史，觉得汉武帝刘彻战功赫赫，封狼居胥，扬我大汉雄武之风，不愧为武帝之名。</p>
<p>年青时再读史，会读到许多对汉武帝的批评，说其穷兵黩武，不惜民力，无数英魂埋骨他乡，户籍几近减半。
对批评甚是不解，认为凡事都会有代价。</p>
<p>年长些，出外为三餐奔波谋生，再读史，就会对汉武帝产生不一样的看法：十年匈奴之战，败光了他祖父和父亲「文景之治」所积累的财富家底，政府财政全面恶化，就出台了影响中国两千年的「盐铁官营」政策，与民争利，不如此不足以应付政府的开销；
后来甚至出台了告发富人瞒税，告发人可获告发金额一半的，严重败坏社会道德「告缗令」，令汉朝的中产阶级和富人阶级被一扫而空，甚至出现100倍于前代的超级通货膨胀。</p>
<p>就我这种黔首看来，武帝可谓是独夫，我不想成为代价。</p>
<p>但即使「雄才大略」如汉武帝，晚年面对糜烂的政局，还是下了「轮台罪己诏」，向天下臣民承认自己的错误。</p>
<h3 id="写在最后"><span class="section-num">7.2</span> 写在最后</h3>
<p>在经济规律面前，无论多强势的强人，都只能屈服。</p>
<p>而无形的经济规律，可以理解成国人所谓的「势」，理解经济规律之后，我们可以顺势而为，而非逆势而动，被时代的大势无情碾过。</p>
<p>毕竟古诗有云：「时来天地皆同力 运去英雄不自由」</p>
<h2 id="参考"><span class="section-num">8</span> 参考</h2>
<ul>
<li>《置身事内》</li>
<li><a href="https://news.cctv.com/2022/04/01/ARTISrXmWpRp5O6QI1yjOtTx220401.shtml">中国人口十年图谱</a></li>
<li><a href="https://zh.wikipedia.org/wiki/%E8%BD%AE%E5%8F%B0%E8%AF%8F">轮台诏</a></li>
<li><a href="https://www.google.com/search?q=%E5%9F%8E%E6%8A%95%E5%85%AC%E5%8F%B865%E4%B8%87%E4%BA%BF&amp;oq=%E5%9F%8E%E6%8A%95">65万亿的城投债</a></li>
</ul>
<div center class="qr-container">
<img src="/ox-hugo/qrcode_gh_e06d750e626f_1.jpg" alt="qrcode_gh_e06d750e626f_1.jpg" width="160px" height="160px" center="t" class="qr-container" />
公号同步更新，欢迎关注👻
</div>
]]></content:encoded>
    </item>
    <item>
      <title>党员，党权与党争</title>
      <link>https://ramsayleung.github.io/zh/post/2022/%E5%85%9A%E5%91%98_%E5%85%9A%E6%9D%83%E4%B8%8E%E5%85%9A%E4%BA%89/</link>
      <pubDate>Sun, 20 Feb 2022 13:35:35 +0000</pubDate>
      <guid>https://ramsayleung.github.io/zh/post/2022/%E5%85%9A%E5%91%98_%E5%85%9A%E6%9D%83%E4%B8%8E%E5%85%9A%E4%BA%89/</guid>
      <description>&lt;h2 id=&#34;前言&#34;&gt;&lt;span class=&#34;section-num&#34;&gt;1&lt;/span&gt; 前言&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;秦人不暇自哀而后人哀之，后人哀之而不鉴之，亦使后人而复哀后人也&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;每个朝代灭亡之后，就会由下一个朝代的史官编写，如元朝灭亡之后，就由明朝来撰写《元史》。&lt;/p&gt;</description>
      <content:encoded><![CDATA[<h2 id="前言"><span class="section-num">1</span> 前言</h2>
<blockquote>
<p>秦人不暇自哀而后人哀之，后人哀之而不鉴之，亦使后人而复哀后人也</p></blockquote>
<p>每个朝代灭亡之后，就会由下一个朝代的史官编写，如元朝灭亡之后，就由明朝来撰写《元史》。</p>
<p>虽然国民党政权在大陆败退之后，没有史官来专门编写《民国史》，但还是有许多资料来探究国民党失败的原因。
而《党员，党权与党争》就从组织角度来考察国民党失败的原因。</p>
<p>想来，以后也会有类似的，研究共产党的学术资料。</p>
<h2 id="以俄为师"><span class="section-num">2</span> 以俄为师</h2>
<p>中国国民党承续兴中会，同盟会，国民党，中华革命党而来，期间不仅名称数度更易，其组织形式亦几度因革。
1924年国民党改组，借鉴俄国布尔什维克的组织模式，建立了一套全新的政党组织体系。</p>
<p>有感于国民党党务不振，孙中山于1924年从组织技术层面学习苏俄的建党，治党方法。
实现三民主义为体，俄共组织为用，从党的组织结构，党章党纪，基层组织建制，基于党的军队建设，全面向苏俄学习，企图打造出一个组织严密，富有战斗力的新党。</p>
<p>只是，国民党师法俄共的组织形式，将党建在国上，实行以党治国，一党专政。
但是，孙中山三民主义理念中的政治蓝图又是基于西方民主体制而设计的。</p>
<p>国民党借鉴了两个不能同时并立的政治架构，拼装了一台不伦不类的政治机器:</p>
<p>成立国民政府后一方面依照西方分权学说，成立五院(所谓的五权分立，即在西方的行政权，立法权，司法权外，再增加考试权和监察权)，
另一方面又依照苏俄党治学说，设立集权的中执会，中政会。</p>
<p>这种兼收并蓄，可谓错漏百出。</p>
<h2 id="清党分共"><span class="section-num">3</span> 清党分共</h2>
<p>在1924年的国民党一大上，孙中山提出了「联俄」，「联共」，「扶助工农」的三大政策，
期望在苏俄和中共共产党的帮助下，完成反帝反封的国民革命。</p>
<p>而国民党与共产党的合作关系，是被称为「党内合作」的合作关系，并不是国民党与共产党两个政党开展合作，
而是共产党员以个人身份加入国民党，成为跨党党员，开展工作。</p>
<p>国共两党的党员，在实际的工作中，是呈现出「国民党在上层，共产党在下层」这样的状态。
国民党差不多专做上层的工作，而下层的民众运动，国民党员参加的少，共产党员参加的多，因此形成了一种畸形的发展。</p>
<p>到1926年，国民党二大召开前后，甚至出现共产党「包办」大部分国民党党务的现象.
据中共领导人称，在国民党二大召开前后，大约有90%的国民党地方组织处于共产党员和国民党左派的领导之下。</p>
<p>1924-1927年的国共关系，既是一种相互合作的关系，又是一种相互竞存的关系。</p>
<p>到第一次国共合作的后期，国共合作关系已经从原来的国民党「容共」，变成共产党「容国」。
即使共产党员远少于国民党员，但因为其组织严密，工作高效，已经成为国民党党内之党。</p>
<p>两党组织动作的巨大反差，国民党内部一方面为内部组织松懈而忧虑，更对共产党组织严密而恐惧，
这种忧虑和恐惧衍化为「分共」，「反共」的主张与行动，另一方面促使部分富有革命热情的国民党青年，
在强烈对比之下，加下到组织更严密的共产党去，这又加深了国民党内部的恐惧与忧虑。</p>
<p>在此种忧虑与压力之下，1927年4月12日蒋介石下令武力清党分共，屠杀共产党员，就变得理所当然。
如果蒋不分共，国民党的情况也不会好转，只会被和平演变成共产党。</p>
<h2 id="党务不振"><span class="section-num">4</span> 党务不振</h2>
<p>「四一二」清共，对共产党造成了巨大的伤害，让共产党意识到「文斗」虽强，但是还是干不过刀把子，悟出了枪杆里出政权的道理。</p>
<p>很多人没有意识到的是，清共对国民党同样造成巨大的伤害.
因为共产党使用秘密党员制，因此，要分共时，并不知道哪个是共产党员，哪个是国民党员。</p>
<p>蒋介石的亲信陈果夫曾经使用过一种荒谬儿戏至极的方法来辨别两党党员：让屋子里面的人相互殴打，然后他认为打着打着，共产党员就会帮助共产党员，国民党员就会帮助国民党员，就能借此分出两党党员。</p>
<p>因为分不清共产党员，就免不了杀错人，把「像」共产党的党员杀完之后，就开始把有革命热情的左派国民党员和群众都当成共产党杀了，清共之旋风越刮越大，甚至国民党民都无人敢做真正的革命之事.</p>
<p>地主劣绅趁机诬陷减租减息等不利于现有特权阶级的国民党党员为共产党员，以除之而后快，以致人人自危。
甚至还有索婚不成，诬其为共党以杀之的可悲之事。</p>
<p>此种分党手段造成的严重后果就是，国民党在国民心中的民心一落千丈，并再也回不去了。
而在基层乡镇，因此大量干实事的国民党员被杀，导致基层权力空虚，地主劣绅趁虚而入，摇身一变成为国民党员，把持基层党权。</p>
<p>在蒋介石独裁及派系核相争的帝王心术之下，中上层的党员，忠于派系多过忠于党，
对权力的向往大于对革命理想的践行，党统在各派系激烈的权力斗争中濒于破裂，党务亦在派系的内耗中日趋衰微。</p>
<p>蒋既无决心重组党务，又不愿意放弃手中独裁的权力，失去民心，党心，国民党的党务建设有如泥牛入海，再也无法拉回来了. 自北伐后，国民党民心日失，党务难振。</p>
<p>自分党至国民党败退台湾，党务再没再振之机。</p>
<h2 id="以军治党"><span class="section-num">5</span> 以军治党</h2>
<p>自孙中山逝世，蒋介石依靠黄埔系的党军之力上位，靠军权登上国民党权力的高位。
而因为党权不振，无法通过党来治理国家，蒋就希望通过军队来治理国家，由原来的以党治军，变成以军治党。</p>
<p>蒋的军治理念，首先表现为放大军人在国家社会中的作用，蒋认为，在任何时候，任何国家，军人应该是社会的主导群体。
其次，强调军队组织在国家和社会的各个领域的普适性，认为无论古今中外，要组织成一个健全的国家和社会，都是要全国军队化。</p>
<p>蒋介石对军权和军治的过分迷恋，分散甚至取代了他对党治和党务组织建设的关注与考虑。
而蒋重军轻党的原因是多方面的，在与汪精卫及胡汉民的「继承人」之争中，
前者都是通过党权与蒋所持的军权相争，蒋难免会有把党权作为障碍的想法。</p>
<p>其次，1931-1932年之交，蒋二次下野时，反思认为国民党的各级党组织并不忠于他.
而他的一生中，最为依赖的权势资源就是军队，拿着个锤子，难免看什么都像钉子。</p>
<p>在蒋介石重军轻党的主导下，军权日趋膨胀，党权日趋低落，从中央到地方，军权凌驾于党政之上，党治徒有其表，军治实际取代了党治。</p>
<p>而军治，既是党权不振的因，又是党权不振的果，可谓因果纠缠，恶性循环。</p>
<h2 id="总结"><span class="section-num">6</span> 总结</h2>
<p>国民党依照俄共实行一党专政，而在实际运行中，其组织散漫性，又像西方议会政党，只重政见不重组织。
国民党是一个弱势独裁政党，国民党并非不想独裁，而是独裁之心有余，独裁之力不足。</p>
<p>国民党和中国共产党都是以俄为师的中国学生，花开两朵，各表一枝。
全盘俄化的中国共产党赢了只学到半套功夫的国民党，而国民党后又败在年轻的民进党手下。</p>
<p>蒋公一再以「亡党亡国」警示其党员，然而，事实却是，党破山河在，党亡国不亡。而后之视今，亦尤今之视昔。</p>
<p>只是未想，时运弄人，两个学生尚在，引以为师的苏共竟先消散在历史的尘埃中。</p>
<div center class="qr-container">
<img src="/ox-hugo/qrcode_gh_e06d750e626f_1.jpg" alt="qrcode_gh_e06d750e626f_1.jpg" width="160px" height="160px" center="t" class="qr-container" />
公号同步更新，欢迎关注👻
</div>
]]></content:encoded>
    </item>
    <item>
      <title>天朝的崩溃</title>
      <link>https://ramsayleung.github.io/zh/post/2022/%E5%A4%A9%E6%9C%9D%E7%9A%84%E5%B4%A9%E6%BA%83/</link>
      <pubDate>Wed, 16 Feb 2022 14:04:09 +0000</pubDate>
      <guid>https://ramsayleung.github.io/zh/post/2022/%E5%A4%A9%E6%9C%9D%E7%9A%84%E5%B4%A9%E6%BA%83/</guid>
      <description>&lt;h2 id=&#34;前言&#34;&gt;&lt;span class=&#34;section-num&#34;&gt;1&lt;/span&gt; 前言&lt;/h2&gt;
&lt;p&gt;历史教科书说，与英国的第一次鸦片战争，敲开了清朝的大门，清朝也因此和外国签订了一系列不平等条约.
而因为清朝的落伍，导致清朝不敌英国.&lt;/p&gt;
&lt;p&gt;教科书却未曾告诉我们，清朝落伍在什么地方，当时清朝的正确之途又在何方。&lt;/p&gt;</description>
      <content:encoded><![CDATA[<h2 id="前言"><span class="section-num">1</span> 前言</h2>
<p>历史教科书说，与英国的第一次鸦片战争，敲开了清朝的大门，清朝也因此和外国签订了一系列不平等条约.
而因为清朝的落伍，导致清朝不敌英国.</p>
<p>教科书却未曾告诉我们，清朝落伍在什么地方，当时清朝的正确之途又在何方。</p>
<p>而这些内容，《天朝的崩溃》都会告诉我，还原历史，以当时人的眼光，再去审视这场影响深远的战争。</p>
<p>以史为鉴，以彼「天朝」审视此「天朝」。</p>
<h2 id="军事力量"><span class="section-num">2</span> 军事力量</h2>
<p>尽管现代人已对战争下了数以百计的定义，但是，战争最基本的实质只是两支军事力量之间的对抗。</p>
<p>鸦片战争中英武器的水平，概括来说:</p>
<p><strong><strong>英军已处于步发展的火器时代，而清军仍处于冷热兵器混用的时代</strong></strong>.</p>
<h3 id="武器装备"><span class="section-num">2.1</span> 武器装备</h3>
<h4 id="火器"><span class="section-num">2.1.1</span> 火器</h4>
<p>火药和管型火器都是中国发明的，但中国一直处于前科学时期，没有形成科学理论和实验体系，使中国火器发展受到了根本性制约。</p>
<p>至鸦片战争期间，清军使用的火器，主要不是中国发明的，而是仿照明代引进的「佛郞机」，「鸟铳」等西方火器样式制作。</p>
<p>由此可以说，清军使用的是自制的老式的「洋枪洋炮」，就样式而言，与英军相比，整整落后二百余年。</p>
<h4 id="火炮"><span class="section-num">2.1.2</span> 火炮</h4>
<p>清军使用的火炮，如同其鸟枪，其原型可追溯至明代。
清军的火炮从样式上，主要是仿照西方17世纪至18世纪的加农炮.
与英军相比，清军火炮在样式及机制原理上大体相同，但两者的差别在于制造工艺引起的质量问题：</p>
<!--list-separator-->
<ol>
<li>
<p>铁质差</p>
<p>工业革命使英国的冶炼技术改观，铁质大为提高，为铸造高质量的火炮提供了良好的原料。</p>
<p>清朝的冶炼技术落后，炉温低，铁水无法提纯，含杂质多，铸造出来的火炮十分粗糙，气孔气泡多，容易炸膛：</p>
<blockquote>
<p>关天培称，在1835年，他在佛山制造59门新炮，试放时就炸裂10门，损坏3门。</p></blockquote>
<p>清军针对此问题主要采用两策:
一是加厚火炮的管壁，使清军的火炮极为笨重，数千斤巨炮，威力还不如西方小炮；
二是使用铜作为铸炮材料，但铜资源缺乏</p>
</li>
</ol>
<!--list-separator-->
<ol start="2">
<li>
<p>铸炮工艺落后</p>
<p>英国已经使用铁模工艺，并使用车床对炮膛内部加工，使之更为光洁。</p>
<p>清朝此时仍沿用落后的泥模工艺，铸件毛糙，又未对炮膛做深入加工，致使炮弹射出后，弹道紊乱，降低射击精度。</p>
<p>英方因此科学的进步，对火药燃烧，弹道，初速度等方面做研究，使火炮设计较合理。</p>
</li>
</ol>
<!--list-separator-->
<ol start="3">
<li>
<p>炮架和瞄准器具不全或不完善</p>
<p>炮架是调整火炮射击和高低夹角的器具，清军对此不甚重视，火炮没有炮架，只是固定严重限制了射击角度。</p>
<p>又没有瞄准器具，只能靠经验操作，全凭感觉。</p>
</li>
</ol>
<!--list-separator-->
<ol start="4">
<li>
<p>炮弹种类少，质量差；</p>
<p>英军的炮弹有实心弹，霰弹，爆破弹等，而清军只有效能最差的实心弹，且弹体粗糙，弹径小。</p>
</li>
</ol>
<h4 id="火药"><span class="section-num">2.1.3</span> 火药</h4>
<p>与枪炮相关联的，是火药。</p>
<p>鸦片战争时期，中英火药处于同一发展阶段，皆为黑色有烟火药。</p>
<p>然而，因为质量问题，使中英在火药上的差距大于前面所提到的火炮。</p>
<p>这里面的关键，是科学和工业。</p>
<p>1825年，歇夫列里在经过多次实验后，提出了黑色火药的最佳化学反应方程式，英国据此方程式，配制了枪用发射火药和炮用发射火药。</p>
<p>除了科学带来的理论进步外，工业革命又带来了机械化的生产，通过先进的工业设备，提炼高纯度的硝和硫；
使用蒸汽装置和水压机进行火药加工，使颗粒均匀，保证优良品质。</p>
<p>而火药虽起源于中国，发展却主要凭借经验，鲜有理论的层层揭示，也靠手工制作，靠舂碾，颗粒粗糙。</p>
<h4 id="舰船"><span class="section-num">2.1.4</span> 舰船</h4>
<p>对照中英武器装备，差距最大者，莫过于舰船。</p>
<p>英国海军为当时世界之最，拥有各类舰船400余艘，其主要作战军舰仍为木制风帆动力，似与清军同类，当相较之下，有下列特点：</p>
<ol>
<li>用坚实木料制作，能搞风涛而涉远洋</li>
<li>船体下部为双层，抗沉性能好，外包铜片，防蛀防火</li>
<li>船上有两桅或三桅，有数十具风帆，能利用各种风向航行</li>
<li>军舰较大，排水量从百余吨到千余吨</li>
<li>安炮较多，有10至120门不等</li>
</ol>
<p>此外，诞生于工业革命末期的蒸汽动力铁壳轮船，也开始装备海军。</p>
<p>清军的海军，时称“水师”，并不以哪一国的舰队为作战对象，其对手仅仅是海盗。</p>
<h3 id="兵力与编制"><span class="section-num">2.2</span> 兵力与编制</h3>
<p>武器装备有着物化的形态，其优劣易于察觉，因此不同的人们都得出相同的结论：清朝处于**兵器上的劣势**。</p>
<p>许多人又不约而同地指出：**清朝在鸦片战争中处于兵力上的优势**</p>
<p>单从数字来看，这是事实。
清朝有八旗兵20万，绿营兵60万，总兵力达80万，而英国远征军，海陆军合并计算，大约7000人。</p>
<p>但就作者考证，清军不是一支纯粹的国防军，而是同时兼有警察，内卫部队，国防军三种职能。</p>
<p>以绿营军为例，绿营军大多是以数名，十数名，最多数百名（200名）分散在当时的市镇要冲等地。
清朝是靠武力镇压而建立起来的高度中央集权的政权，军队是其支柱，而当时清朝没有警察，
维持社会治安，保持政治秩序就成了清军最重要最大量的日常任务。</p>
<p>所以理解成，总兵力80万，里面有很大一部分是警察和城管，打小贩可能在行，打英军就不大行了。</p>
<p>因为清军没有常备的国防机动力量，因此抽调是鸦片战争中清军集结的唯一方法。
而鸦片战争中每个省能抽调的兵力，不足万人（四川最多是7500人），所以只能从各地，东拼西凑出兵力，兵不知将，将不知兵。</p>
<p>更要命的是清军的调兵速度，鸦片战争期间，清军调兵的大概速度是，邻省约30至40天，隔一二省约50天，隔三省约70天，隔四省约90天以上。
如此缓慢的调兵速度，使清军丧失了本土作战的有利条件。</p>
<p>当时英海军从南非的开普敦驶至香港约60天，从印度开来约30至40天，即使英国本土开来也不过4个月。
蒸汽机的出现，轮船的使用，又大大加速了英军的速度，从孟买到澳门，只需25天。</p>
<p>也就是英军从印度调兵，可能比清政府调兵还快. 何况，英军坐船，清军靠人力，劳师远征，到达战场也没法形成战斗力。</p>
<h3 id="士兵与军官"><span class="section-num">2.3</span> 士兵与军官</h3>
<p>清朝的兵役制度是一种变形的募兵制。早期的八旗是兵民合一的制度，清入关后，人丁生繁，兵额固定。
绿营兵募自固定的兵户，与民户相比，兵户出丁后可免征钱粮赋税。</p>
<p>清兵收入不高，大抵可养活自己，但无法养活家人，因此兵丁大多去有第二职业.
把当兵当作固定的旱涝保收的「铁杆庄稼」，值班充差操演时上班打卡，其他时间则操持旧业。</p>
<p>清军军官的来源，主要是两途：一是行伍出身；二是武科举出身。</p>
<p>正如认为八股文可以治天下一样荒谬，清代武科举场内考试项目是武经七书（《孙子》，《吴子》这些）.
与近代战争的要求南辕北辙，因为很多考生不识字，导致错误百出，因此武科举以外场为主，集中一项，即拉硬弓。</p>
<p>清代军官的升迁，除军功外，均需考弓马技能，若不能合格，不得晋职。</p>
<p>用今日的眼光观之，这种方法挑选聘出来不过是一句优秀的士兵，而不是领兵的军官。</p>
<p>由此，在当时人的心目中，军官只是一介鲁莽武夫，「不学无术」成为军官的基本标志。
军人的身份为社会所鄙视。所谓无官不贪，军官也不能免俗。主要手段有：</p>
<ol>
<li>吃空额：这个就是人人知详的手段了。</li>
<li>克兵饷：传统手法</li>
<li>创意手段：浙江军官出售兵缺（毕竟是国企岗位）；广东绿营开赌收费；福建水师就比较有创意，将战船租赁给商人贩货运米</li>
</ol>
<p>因此，在鸦片战争中，清军在作战中往往一触即溃，大量逃亡，坚持抵抗者殊少。
在这种情况下，谈论人的因素可以改变客观上的不利条件，又似毫无基础可言：毕竟，清军已经腐败。</p>
<h2 id="政治与文化"><span class="section-num">3</span> 政治与文化</h2>
<h3 id="定于一尊"><span class="section-num">3.1</span> 定于一尊</h3>
<p>自明朝废宰相之位后，中国王朝政府已经没有首相，皇权得到前所未有的加强，由皇帝独断朝纲。
清朝有着宰相之名的军机大臣，不过是按照老板意思，草拟旨意的秘书。</p>
<p>这种政权体制下，一切的决断都由君主作出，也就一切都取决于君主的好恶与见识。</p>
<p>如果是个英明无比的君上，大概能发挥该政体的长处.
但君主能成为君主，不是因为他有着治理国家的才能，只是因为他是上一代的君主的几个继承人之一。</p>
<p>因此，从统计学来说，出现一个平庸之主的概率就会非常大。</p>
<p>而英国当时已实行君主立宪，由首相代替国王治理国家，首相有对应选拨淘汰机制，不至于久为庸人。</p>
<p>人臣诸事听命于君主，没有任何的灵活性（除非是抗旨不遵），也不想因此做事而承担相应的任何责任。
这一幕，似乎在当下，又再度重演。</p>
<p>全书看下来，把权力全部集中于一个人身上，有着巨大的风险与弊端。
各级政府有处理事务的责任，但却没有自由采取措施处理事务的权利。</p>
<p>事事都要先问询君主，而君主对事情发展的了解，仅限于臣下的启奏，
臣下出于种种考虑，又不会（或不能）把完全事情的全貌告知君主，导致决策最需要的信息疏漏，让君主决策时误判。</p>
<p>又因为决策错误的责任不能归咎于君主，因此决策失误，人臣也很难指出，只能任由事情发展；
而臣下为了避免背上违背上意，抗旨不遵的责任，避免做多错多，往往又会听任问题发展，直到出现更大问题。</p>
<p>这是严重缺乏灵活度和弹性的制度。
在黑天鹅来临时，君臣按此种方式来处理突发事件，非常容易让事情的严重性和后果扩大，直到难以收拾的地步。</p>
<p>英军的来临是黑天鹅，疫情的到来也是黑天鹅。</p>
<p>关于皇帝与官僚的关系分析，可以参考<a href="https://mp.weixin.qq.com/s/XytVvXHJUTR3sRMmybQD4A">《皇帝与官僚：「上面」与「下面」》</a>：</p>
<h3 id="天朝上国与蛮夷"><span class="section-num">3.2</span> 天朝上国与蛮夷</h3>
<p>鸦片战争以前，中华文明一直是相对独立地发展的，并以其优越性，向外输出，在东亚地区形成了以中国为中心的汉文化圈。</p>
<p>长此以往，中国人习惯以居高临下的姿态，环视四方。清王朝正是在这种历史沉淀中，发展完备了「天朝」对外体制。</p>
<p>在古代，依据儒家的经典，中国皇帝为「天子」，代表「天」来统治地上的一切。
皇帝直接统治的区域，相对于周边的「蛮荒」之地，为「天朝上国」。
而周边的地区的各国君主，出于种种动机，纷纷臣属于中国，向清王朝纳贡，受清王朝册封。
至于藩属国以外的国家，包括西方各国，清王朝一般皆视之为「化外蛮夷之邦」。</p>
<h3 id="奸臣与忠臣"><span class="section-num">3.3</span> 奸臣与忠臣</h3>
<p>在清政府禁止鸦片这种败坏国民的货物的贸易，销毁无数鸦片之后；英国贸易负责人向英国求援，请求派遣军队，通过武力打开中国市场。</p>
<p>当时的中国元首，最高领导人道光皇帝在知道有胆敢犯上的蛮夷军队时，自然是一心剿灭。
不成想蛮夷军队，船坚炮利，连克广东城市，而又闻其是因为林则徐禁烟，受了「冤屈」，
找大皇帝作主伸冤，因英夷「情词恭顺」，于是心思由剿转向「抚」。</p>
<p>而主抚停战期间，辗转听闻了臣下转述的，已经隐瞒许多实情的和约要求，又大为火光，旨意顿变，由主「抚」转向「剿」。
至此，大皇帝心意已决，「剿」，且天朝无任何败之理由。
直至，英军兵临南京城下，切断北方的粮食运输，道光妥协求和。</p>
<p>令人惊讶的是，主持过战局的12个官员，几乎没有一个是如实向老板反馈实情的.
以致于到鸦片战争末期，道光老板还觉得英军只是船坚炮利，但腰硬腿直，不擅长陆战。</p>
<p>每个主持的官员，战前都是和老板说，武备准备充足，定叫英夷有来无回。
但每场战争之后，老板收到的是城破师溃的消息，当然，下属不会直说，而是以各种故事来包装，美化自己，比如皆因汉奸协助云云。</p>
<p>在鸦片战争中，主持战局的，除去林则徐，历史刀笔下的诸人，大多是「奸臣」，「卖国贼」。
为何会导致这种结果呢，而他们是否真的卖国呢？作者就给出了自己的解释：</p>
<p>从功利主义的角度来看，这种说法首先有利于道光帝。
在皇权至上的社会，天子被说成至圣至明，不容许也不「应该」犯任何错误。
尽管皇帝握有近于无限的权力，因而对一切事件均应该负有程度不一的责任。</p>
<p>但当时人们对政治的批判，，最多只能到大臣一级。
由此产生了中国传统史学，哲学中的「奸臣」模式：「奸臣」欺蒙君主，滥用职权，结党营私，致使国运败落；
一旦除去「奸臣」，圣明重开，拨月见月。不是党的政策不好，只是下面的人执行变了形，党是英明的。</p>
<p>这一模式使皇帝直接免除了承担坏事的责任，至多不过是用人不周不察，而奸臣去承担责任，充当替罪羊。</p>
<p>此外，按照「夷夏」的观念，这些蛮夷胆敢进犯天朝，唯一正确的方法就是来一个「大兵进剿」，杀他个片甲不留。
既然「剿夷」是唯一正确之途，时人也就合乎逻辑地推论:
战争失败的原因在于「剿夷」不力，之所以「剿夷」不力，在于有「奸臣」的破坏，能对战局产生影响，
肯定不止一个奸臣，那些战败的官员，一定没有尽忠报国。
与奸臣截然对立的，是忠臣的精忠报国。</p>
<p>于是，时人把希望寄托于或阵亡（如关天培），或主战到底的官员（林则徐）。
他们的结论是：只要重用林则徐，中国就可能胜利，如果沿海彊臣均同林则徐，如果军机阁均同林则徐，中国一定会胜利。
看完全书的人会意识到，林则徐只不过是和其他人一般的清朝官员，只是开明些罢了。</p>
<p>忠奸论所能得出的结论是，中国想要取得战争的胜利，只需罢免奸臣及其同党，重用林则其同志即可，不必触动中国的现状。
也就是说，只要换几个人就行，不需要做改革。</p>
<p>忠奸论的最终结论是，为使忠臣得志，奸臣不生，就必须加强中国的纲纪伦常，强化中国的传统。
也就是，鸦片战争所暴露出来的，不是「天朝」的弊端，不是中华的落伍；
反而证明了中国的圣贤经典，天朝制度的正确性，坏就坏在一部分「奸臣」并没有照此办理。</p>
<p>于是，中国此时的任务，不是改革旧体制，而是加强旧体制</p>
<h2 id="失败的价值"><span class="section-num">4</span> 失败的价值</h2>
<p>一个失败的民族在战后认真思过，幡然变计，是对殉国者最大的尊崇，最好的纪念。清军将士流淌的鲜血，价值就在于此。</p>
<p>可是，清朝呢？它似乎仍未从「天朝」的迷梦中醒来，勇敢地进入全新的世界，而是依然如故，就像一切都没有发生。</p>
<p>《天朝的崩溃》成书为20世纪末，人们说，19世纪是英国人的世纪。20世纪是美国人的世纪。21世纪呢？</p>
<p>也有些黑头发黄皮肤的人宣称，21世纪是中国人的世纪。
可是，真正的要害在于中国人应以什么样的姿态进入21世纪？中国人怎么才能赢得这一称号。</p>
<p>人们只有明白看清了过去，才能清晰地预见未来。
一个民族对自己历史的自我批判，正是它避免重蹈历史覆辙的坚实保证。</p>
<p>而**认清弊端，是修正弊端的必经之路。**</p>
<p>「后人哀之而不鉴之，亦使后人而复哀后人也」。</p>
<div center class="qr-container">
<img src="/ox-hugo/qrcode_gh_e06d750e626f_1.jpg" alt="qrcode_gh_e06d750e626f_1.jpg" width="160px" height="160px" center="t" class="qr-container" />
公号同步更新，欢迎关注👻
</div>
]]></content:encoded>
    </item>
    <item>
      <title>罗马人的故事（二）：天选之子西庇阿</title>
      <link>https://ramsayleung.github.io/zh/post/2022/%E5%A4%A9%E9%80%89%E4%B9%8B%E5%AD%90%E8%A5%BF%E5%BA%87%E9%98%BF/</link>
      <pubDate>Sun, 23 Jan 2022 13:10:50 +0000</pubDate>
      <guid>https://ramsayleung.github.io/zh/post/2022/%E5%A4%A9%E9%80%89%E4%B9%8B%E5%AD%90%E8%A5%BF%E5%BA%87%E9%98%BF/</guid>
      <description>&lt;h2 id=&#34;命运的必然&#34;&gt;&lt;span class=&#34;section-num&#34;&gt;1&lt;/span&gt; 命运的必然&lt;/h2&gt;
&lt;p&gt;公元前219年，汉尼拨翻过阿尔卑斯山，向意大利发起进攻，指挥官科尔涅利乌斯迎战汉尼拨，被重伤。
幸而从手下的新兵抢回到营地，而这名新兵，恰好是首次参加战斗的，科尔涅利乌斯的儿子，年仅17岁西庇阿。&lt;/p&gt;</description>
      <content:encoded><![CDATA[<h2 id="命运的必然"><span class="section-num">1</span> 命运的必然</h2>
<p>公元前219年，汉尼拨翻过阿尔卑斯山，向意大利发起进攻，指挥官科尔涅利乌斯迎战汉尼拨，被重伤。
幸而从手下的新兵抢回到营地，而这名新兵，恰好是首次参加战斗的，科尔涅利乌斯的儿子，年仅17岁西庇阿。</p>
<p>3年后，当罗马人集结举国之力，与汉尼拨展开坎尼会战，最终惨败, 仅有不足万人逃回了罗马。
而身在岳父埃米利乌斯军团的西庇阿, 再次见证罗马军团败于汉尼拨的精妙战术之下，也又一次在汉尼拨的手下逃脱。</p>
<p>公元前218年，汉尼拨从西班牙出发，翻过阿尔卑斯山，进攻意大利。为了让汉尼拨无法从西班牙获取支援与补给，并釜底抽薪，彻底把把汉尼拨关在意大利，西庇阿的父亲与叔叔，执政官科尔涅利乌斯与弟弟格奈乌斯各率领一个军团进攻西班牙。</p>
<p>历时8年，科尔涅利乌斯与格奈乌斯终于夺取了迦太基统治下的西班牙三分之一的区域，但两支军团却需要去面对迦太基3支军队</p>
<p>。公元前211年初夏，科尔涅利乌斯军团遭受到三支迦太基军队的围攻，兵力处于绝对劣势的罗马军队，其退路被切断，最后被一举消灭。迦太基的一支军队在打败了科尔涅利乌斯后，又袭击了不远处正在行军的格奈乌斯军团。在遭到三倍于自己的敌军进攻后，这支罗马军团与友军一样也被消灭。科尔涅利乌斯兄弟花了整整8年时间，取得的成果转眼化为云烟。</p>
<p>罗马绝对不能放弃西班牙战线，为此需要一句统帅担任该战线的总指挥官。但此时，罗马已经向汉尼拨发起了正式攻势。在这种情况下，罗马没有可以动用的将领派往其他战线。</p>
<p>一个年纪不大的年经人推开了元老院的大门, 在年已64岁的元老院第一人费边与59岁的“罗马之剑”马尔凯鲁斯眼里，这个24岁的年经人看上去，像个未成年人。</p>
<p>他叫普布利乌斯-科尔涅利乌斯-西庇阿，他主动请缨，要求担任西班牙战线的总指挥官，代替战死在西班牙的父亲完成任务。
在共和政体下的罗马，指挥一个由两个军团共2.5万名到3万名士兵所组成的作战单位的统帅，迄今为止，这类职位都是由执政官或法务官担任的。这两个官职的资格年龄都在40岁以上。</p>
<p>一年后，西庇阿说服了元老院的元老，以「前法务官」之职指挥军团，即使现在他从来没有担任过法务官，时年25岁。</p>
<h2 id="闪耀西班牙"><span class="section-num">2</span> 闪耀西班牙</h2>
<p>公元前210年，这位25岁的年经统帅，来到罗马军队在西班牙的军队，迎接他的是历经8年的艰苦战斗幸存下来的士兵，他所做的第一件事就是要消除士兵们的失败阴影。他把他们召集起来说，昨天的事情已经过去，一切明天开始。
他还说，虽然自己年龄不大，但是，海神波塞冬在保佑自己，他甚至让大家相信，自己真正的父亲不是战死在西班牙的科尔涅利乌斯，而是海神波塞冬。（这些军事奇才们，为了笼住部下士兵的心，通常会绿掉自己的母亲）
笃信诸神的罗马士兵，听了这番话以后，开始觉得自己一方一定能获胜。</p>
<p>接着这位年经的统帅开始收集包含友邦马赛在内的所有地方的情报，包含地研，气候，原住民族的分页情况，迦太基军队所在的位置，兵力等等。</p>
<p>而后，西庇阿的第一个目标就是汉尼拨在西班牙的根据地，家族经营10年的城堡，「新迦太基」卡塔赫纳。</p>
<p>仅一天时间，西庇阿就攻克了敌人的根据地&ndash;卡塔赫纳，而迦太基的三支军队根本来不及赶回来增援。</p>
<p>通过这场战斗的胜利，这位年轻人使罗马完全恢复了两年前因其父亲和叔叔失败而失去的在西班牙的势力。</p>
<p>次年，西庇阿迎战三支军队，趁着三支军队还没有合兵于一处，首先击败了汉尼拨二弟哈斯鲁鲍尔率领的军队, 消灭8000人，俘虏1.2万人。</p>
<p>公元前207年，汉尼拨的幼弟马可尼与迦太基将领吉斯戈合兵一处，共7.4万士兵，与西庇阿4.8万士兵决战。最后，以汉尼拨的围歼战法，打败了迦太基的军队，仅有6000人逃离战场。</p>
<p>公元前206年的冬季，西庇阿在已经到手的西班牙境内留下两个军团守卫，自己带着长期在这里坚守战斗的老兵，走海路回罗马，他已经四年未回那里了。</p>
<h2 id="进攻迦太基"><span class="section-num">3</span> 进攻迦太基</h2>
<p>回到罗马后，西庇阿向元老院汇报在西班牙的战况，即使他还不是议员，离30岁的年龄资格还差几个月。结束汇报后，没有要求举行凯旋仪式。
他的战线无愧于凯旋将军的称号，但在共和政体的罗马，指挥一个战略单位，即两个军团的总指挥官资格必须是年龄40岁以上的执政官，前执政官，法务官或前法务官。</p>
<p>西庇阿是破例作为总司令官被派往西班牙，而当时他的年龄只有25岁，即使完成西班牙霸权的现在，他也只有29岁。在这个年龄上要求元老院为他举行凯旋行为，似乎过于奢望</p>
<p>对罗马将军来说，凯旋仪式是至高荣誉，西庇阿放弃了这一荣誉，取而代之，他要求元老院推荐自己为第二年即公元前205年度的执政官候选人。即使是明年，西庇阿也只有30岁，与执政官的年龄差距仍是10岁。</p>
<p>结果，深受民众喜好的西庇阿，在市民大会上，以压倒多数的票数当选执政官。</p>
<p>执政官是共和政体罗马的最高官职，同时也是军队的最高司令官，由市民大会选举产生。但是，这两位执政官的任地原则上通过抽签决定。但事实上，指挥一个战略单位即两个军团的所有总司令官，包括两位执政官负责的战场都是由元老院决定的。 但西庇阿请求元老院让自己负责北非战线。</p>
<p>而后，西庇阿在元老院展开演讲，阐述自己的「围迦救罗」战略：</p>
<blockquote>
<p>早晚我会和汉尼拨交锋，但是，这场交锋，不是他在发动进攻的时候。我要主动出击，引他出击，让他不得不与我展开会战。战场不应该在卡拉布里亚已经毁了一半的城堡，而是在迦太基!</p></blockquote>
<p>因为这与现有的持久战战略相违背，也正因为持久战战略，才把汉尼拨逼到无处腾挪之地，现状的确没有必要改变，不然有让汉尼拨猛虎出笼的危险。但西庇阿的战法又的确有可取之处。
最后，双方达到一个折中的意见，既不伤害元老院年长者的体面，又不违背年轻议员们的变革意愿：西庇阿的任地在西西里岛，并授予一个权力，如有必要，第二年可以进军非洲。</p>
<p>只是作为执政官，他必须放弃指挥在首都完成编组的两个军团的指挥权，也就是放弃执政官应得到的指挥正规军的权利。取之代之，他有权在西西里招募志愿兵。元老院明确表示：将来西庇阿远征非洲，不是元老院认可的军事行动，一旦远征失败，责任不在元老院，而在他个人。</p>
<p>公元前204年春天，西庇阿以前执政官身份，率领志愿军踏上了非洲的土地。以2.6万士兵，迎战迦太基与盟国努来米底亚联军，共9.3万人。以汉尼拨的围歼战术，再次获胜，直逼迦太基首都。</p>
<p>恐慌中的迦太基政府，发出了召回汉尼拨的命令。</p>
<h2 id="击败汉尼拨"><span class="section-num">4</span> 击败汉尼拨</h2>
<p>在<a href="/zh/post/2022/%E6%B1%89%E5%B0%BC%E6%8B%A8%E7%9A%84%E9%81%A5%E6%9C%9B/#汉尼拨的遥望">《汉尼拨的遥望》</a>一文中，曾经提到, 罗马人与汉尼拨进行过五次决战，前四次都以罗马人大败而收场，而现在终于来到了16年后的第五场会战，扎马战役。由归国的汉尼拨，迎战学习其战术的「学生」西庇阿。</p>
<p>如果要列举古代5位名将，汉尼拨和西庇阿一定是其中的两位。如果要列举迄今为止历史上的10位优秀将领，他们二人无疑也会位列其中。虽然历史造就了无数优秀的武将，但是，发生在具备同等才能的人之间的会战，却少之又少。这少而又少的事情，就在扎马战场上演。</p>
<p>在开战前一日，西庇阿和汉尼拨各带一队骑兵离开了各自的营地, 各带翻译，前往指定的地点. 指定的地点位于两军之间的一个小山丘上，骑兵留在山下，只有二将带着翻译继续前往。</p>
<p>具有同等才华的名将交战极为罕见，在交战的前一天，这样的两个人坐在一起会谈，在历史上也是空前绝后的。</p>
<p>公元前202年，秋日的阳光柔柔地照在扎马和纳拉格拉之间开阔的平原上。两军分别在这里摆下阵型。迦太基军队的总指挥是汉尼拨，战斗力为步兵4.6万人，骑兵4000人，合计5万人。罗马军队由西庇阿担任总指挥，步兵共3.4万人，骑兵6000人，共计4万人。</p>
<p>扎马平原重现了14年前坎尼平原上发生的事情，只是，对象变了。</p>
<p>古代屈指可数的名将，45岁的汉尼拨只有眼睁睁地看着自己的亲兵纷纷被杀，超过2万个战士在扎马遭到全歼，还有多达2万人被捕。余下的人向着10行程之外的首都迦太基逃去。汉尼拨只带着数名骑兵，逃离战场。扎马战役中，罗马方面的战死者是1500人，西庇阿完胜。西庇阿也成为唯一一个击败汉尼拨的罗马将领。</p>
<p>普布利乌斯-科尔涅利乌斯-西庇阿从此被人们尊称为“阿非利加努斯”，意思是“征服非洲的人”。</p>
<h2 id="风流总被雨打风吹去"><span class="section-num">5</span> 风流总被雨打风吹去</h2>
<p>15年后，被尊称为阿非利加努斯，长年占据元老院“第一人”的西庇阿，被检举。质疑部分军费，在西庇阿远征马其顿王国中下落不明，要求其接受传讯与审查。甚至提起17年前，西庇阿在西西里曾经越权，前往任地外的地方攻打迦太基军队之事。</p>
<p>像这种没有事实根据的检举，与其说是检举，不如说是弹劾，政敌把西庇阿赶下来的一种手段。审判的第一天，在两位检举人的轮番揭发中结束，第二天由被告为自己作辩护。</p>
<p>「这让想起了《三体》里面的执剑人，罗维。放下剑后，被控谋杀罪」</p>
<p>这一天，西庇阿迟到了，他带着一大群朋友和支持者来到人群簇拥的会场：</p>
<blockquote>
<p>两位护民官及罗马各位市民，今天，是我在非洲扎马与汉尼拔和迦太基军队作战，有幸取得胜利的第15个纪念日。在这样一个值得纪念的日子里，我建议让我们忘掉一切争执，大家团结一心，向诸神奉上我们的感恩之心。</p>
<p>现在，我就要出发前往卡匹托尔山，向供奉在那里的、以最高神朱庇特和朱诺女神及密涅瓦女神为代表的诸神表示感谢，感谢他们给了我和参加那次战役的所有罗马市民为祖国罗马的自由和安全竭尽全力的机会。</p>
<p>各位，如果你们愿意，我诚心邀请各位与我同行。希望各位和我一样对诸神心怀感激之情。因为从我17岁开始到已显老迈的现在，是罗马的各位市民给了我打破常规的机遇，让我有机会发挥了自己的才能。</p></blockquote>
<p>说完，没等人们开口回答，西庇阿就离开了会场，他的身后，不只有他的朋友们和支持者们。因为所有罗马人终于都想了起来，元老院议会站起了身，旁听的市民们离开了会场，连书记员都放下铁笔，跟随在西庇阿之后。会场只剩下两个检举人和西庇阿的政敌。</p>
<p>历史学家李维写道：这一天，身着托加的西庇阿已经不见昔日的风采。他脑袋秃顶，身体羸弱。但是，市民们对他的敬爱之情，胜过第二次布匿战争结束，从非洲凯旋时，人们向三十几岁的年轻胜将发出喝彩声，并送上鲜花。李维还说：“这一天，成了西庇阿灿烂辉煌的最后一天。”</p>
<p>第二天，西庇阿离开了罗马，在海边的别墅过起了隐居生活。4年后，西庇阿-阿非努加利斯在别墅出世，享年52岁，但他留下遗言，拒绝葬在祖祖辈辈的墓地里，原因是墓地在罗马境内：</p>
<blockquote>
<p><code>不知感恩的祖国，你们有何资格拥有我的遗骨</code></p></blockquote>
<div center class="qr-container">
<img src="/ox-hugo/qrcode_gh_e06d750e626f_1.jpg" alt="qrcode_gh_e06d750e626f_1.jpg" width="160px" height="160px" center="t" class="qr-container" />
公号同步更新，欢迎关注👻
</div>
]]></content:encoded>
    </item>
  </channel>
</rss>
