Pluveto

“ Tell me, what is it you plan to do with your one wild and precious life?”

我学习数学的一些经验分享(理工科适用)

首先确保自己精神充沛。如果在痛苦或疲倦的状态下学习,效率低不说,很可能建立起一学数学就痛苦的反射,失去对学数学中的乐趣的感知。

背景

本身我是计算机专业的,很多地方需要用到数学(比如密码学、图形学、机器人、电路等等),所以数学不得不学。上学阶段本身已经学了一些了,但问题在于中国大学教育的学习方式更鼓励你通过考试,并没有对概念形成深刻的理解,也不强调公理化。这是很致命的。

目的

所以,我学习的目的很直白,就是获得理解直觉,能够在不同的地方找到关联,解决实际问题。甚至可以更直白一点说,就是关键的时刻不被 AI 忽悠。从而可以去做更有挑战的事情。

理念

所以我站欧拉、庞加莱那边,更强调直观能力的培养。 我是反对大量精力学习证明的(我不反对掌握一些证明中的精髓,甚至鼓励记住证明的结构)。因为证明往往冗长,且脱离直觉,还浪费时间。比如证明任何方阵都能分解成对称加上反对称(A=S+K)很容易,但写出这个证明并不能让我直观地看到一个具体矩阵就能想象出其 S 和 K,我需要的恰恰是后者不是前者。而学习后者常常更简单:亲自算一遍即可。

我觉得书上的“定义—定理/性质—证明—例子” 这种直接硬塞且超人脑符合的组织方式完全是反人类、违背人的认知规律的的。人的认知顺序基本是相反的,先从现象、困境、例子出发,发现一些性质,再尝试严格地用定义和证明去描述,并且推广到更丰富的场景(衔接到下一块学习)。

所以核心就是符合人脑认知规律。

方法论

所以,绝大多数教材都会被我直接跳过。现在是 2026 年了,没必要死磕你那影印版无法复制公式的盗版 PDF 了!你可以用 AI 定制你自己的学习流程。

我是这么做的:

  1. 让 AI 制定一个好的学习大纲(把我的理念发给他,分成 Part - Chapter - Section 的格式。每个 Section 不得超过一个难点,Chunk by Chunk)。
  2. 然后,一种策略是边对话边学。这种在前期进展非常迅速,因为只要你别钻牛角尖,能容忍前期的模糊度,每个领域的基础知识都不太难。
  3. 但这样效率到后期其实不高,我实际采用直接输出的格式,可以理解成让它输出符合认知顺序的教科书。直接去读这个 AI 教科书。
  4. 但这个时候 AI 生成的教科书依然可能非常逆天,乱跳跃,硬塞等等。不用管。你重点攻克大 Boss,比如“特征值分解”显然是一个大 Boss。
  5. 你会发现要领悟“特征值分解”,最好得领悟小 Boss “谱分解”(但暂时没必要搞懂DFT这种特殊谱分解)。
  6. 所以你现在可以去攻打小 Boss。攻打小 Boss 的过程中,你会发现很多基础不牢靠。这个时候你前期容忍的哪些模糊度现在终于可以正面对待了。攻打 Boss 的过程中你被迫重新审视你的基础知识,产生了更强和更精准的逻辑或直觉。
  7. 注意我们强调情景,所以你肯定学会了 SVD 的常见使用情景,然后你可以更进一步去结合你的工程实际去找别的情景,加深理解。
  8. 然后继续攻打别的章节的 Boss。
  9. 最后,这门课的图景在你脑子里应该会比较清晰了。

需要提醒的是笔记,别傻乎乎地打笔记了。也不要把 AI 生成的东西复制一遍当自己的笔记,假装自己会了。我发现比较有用的是做成 Anki 卡片。你可以按你的需要用下面的方式做笔记。

<!--card-->
正面
<!-->
反面
<!--/card-->

举个例子:

<!--card-->
一个 $m$ 行 $n$ 列的矩阵 $A$ ,如何理解其输入和输出空间
<!-->

把 $A$ 视做列向量构成的行向量  
  
$$  
A=(a_1\ a_2\ \cdots\ a_n),\qquad a_j\in\mathbb{R}^m  
$$  
则
  
$$  
Ax=x_1a_1+x_2a_2+\cdots+x_na_n  
$$  

$T_A(x)=Ax$ 是 $A$ 的 $n$ 个列向量的线性组合,组合系数是输入的 $n$ 个分量 $x_1,\dots,x_n$.
  
所以输入自然是 $n$ 维的;  

输出的维度依然取决于每个列向量的维度 $m$.
<!--/card-->

并不是所有东西都值得做笔记。非常基础的知识,或者非常难的知识,都不应该进笔记。

能进笔记的东西,一定是你第一次看到的时候感觉这个想法点拨到你了,而且你预感到你会忘掉。或者这个东西你其实懂,但每次去用都要卡壳一下。这种才值得进卡片笔记。

如果卡片的背面超过五个逻辑环节,几乎一定说明你搞错了。

比如我的 SVD 的笔记可能是:

正面:请讲述奇异值分解(SVD)的动机和原理。

背面:

(1)谱分解定理要求对称方阵,其本质是在同一个空间里找到一组正交基,使得线性变换在这组基下只是沿各轴独立伸缩。

那对于长方矩阵 $\mathbf{M} \in \mathbb{R}^{m \times n}$,虽然 $\mathbf{M}$ 本身不对称,但把 $\mathbf{M}^{\top}$ 和 $\mathbf{M}$ 乘在一起构造出的 $n \times n$ 矩阵 $\mathbf{M}^{\top}\mathbf{M}$ 永远是实对称的!

(2 关键步骤)对 $\mathbf{M}^{\top}\mathbf{M}$ 应用谱分解定理,取其标准正交特征向量组 $\{\mathbf{v}_1, \dots, \mathbf{v}_n\}$(满足 $\mathbf{M}^{\top}\mathbf{M}\mathbf{v}_i = \sigma_i^2\mathbf{v}_i$)

$$ (\mathbf{M}\mathbf{v}_i)^{\top}(\mathbf{M}\mathbf{v}_j) = \mathbf{v}_i^{\top}(\mathbf{M}^{\top}\mathbf{M}\mathbf{v}_j) = \mathbf{v}_i^{\top}(\sigma_j^2 \mathbf{v}_j) = \sigma_j^2 (\mathbf{v}_i^{\top}\mathbf{v}_j) = \sigma_j^2 \delta_{ij} $$

(3)分析这个结果:

$$ \mathbf{M}\mathbf{v}_i = \sigma_i \mathbf{u}_i \iff \mathbf{M}\mathbf{V} = \mathbf{U}\boldsymbol{\Sigma} $$

在两边右乘 $\mathbf{V}^{\top}$,就得到了奇异值分解。

$$ \mathbf{M}=\mathbf{U}\boldsymbol{\Sigma}\mathbf{V}^\top=\sum_{i=1}^{r}\sigma_i\,\mathbf{u}_i\mathbf{v}_i^\top. $$


你看,即使是 SVD,三步也够了。你在脑子里完全可以推一遍了,不要太追求严谨。

那有人要问:你这个笔记有问题啊,“$\mathbf{M}^{\top}\mathbf{M}$ 永远是实对称的”、“满足 $\mathbf{M}^{\top}\mathbf{M}\mathbf{v}_i = \sigma_i^2\mathbf{v}_i$” 都没说明?

问这个,这说明你的笔记负荷量太大了,这种基础知识点应该属于小怪,你应当直接攻克的,必要时记到另一张笔记上。

之后你可以让 AI 帮你写个脚本,把这些卡片导入 Anki 方便回顾复习。

结语

采用这套方法,你应当发现所有概念都服务于解决实际问题,并且都能分解到能直观理解的地步。大部分情况不需要大量的刷题,也不需要写很多代码或者背证明啥的。毕竟作为码农,最大的痛点就是没那么多时间学习。

如果有任何建议,也欢迎交流。

编码代理

你们敲击键盘
向算法的神灵献祭
神灵吐露费解的话语
而你们并不关心

终于系统吐出卦象
卦象是吉,你们分发奖金
卦象是凶,你们慌乱地烧几个提示词,
以求神灵再次降下恩典
不求甚解地众人以为无所不知
其实一无所知,失去智慧的能力

政府自己可以印钱,那它收税有什么意义?

这个我来解释一下,假设你搞了一个村叫牛村,发行一种代金券牛券。每年收税你暴力胁迫大家必须交等值10%收入的牛券,那大家为了交税,就不得不持有你的牛券。反之,如果你根本不收税,只是不停印你的牛券,那么大家就没有积极性去兑换成你的牛券。大家会直接用别人的券,或者是直接以物易物,那你的这个货币就没有购买力了。这就叫通过强制规定必须用本国货币交税,持续制造对该货币的刚性需求,从而支撑其购买力。

好,现在你发现,只要不停地印钱,就可以用来买老百姓的东西。你自己躺着啥也不干,只要印钱就完事了。然而,印着印着,就发现钱不小心印多了,你发现老百姓东西涨价了,你印的不那么划算了。这个时候你发现,只要增加税收,就可以把多余的钱给他收回来,这样就避免了恶性通胀。所以收税还有个意义,通过减少流通中的名义货币量,降低物价上涨压力,从而抑制通胀。

你收着收着税,发现村里的大户收他 20%,你抽了很多,而且通胀也能控制住;但是一些穷户收他 20%,他剩下的钱直接活不下去了,而且你收上来也没多少,他们被收的时候还非常不乐意。为了避免他们造反,你就发现可以对大户多收税,对平民少收点税。这样改善了分配,你村长的位置坐得更稳。你才发现,有的人种了粮食猛猛地酿酒,因为酿酒赚得多,就导致大家的粮食不够吃了。为了避免以后大家饿肚子,你就把酿酒的税猛猛地提高,把种地的税降低,这样就促进大家多囤粮食,少去酿酒。于是,你发现收税的话可以改善分配,当然这只是理论情况下的,实际情况下就更复杂了。

以上就是教科书里会说的税收的三个主要意义。不过因为印钱的政治成本低、即时阻力小,政府与其提高税率让大家看到之后心生不满,不如偷偷地多印钱。所以短期政府其实确实是会倾向于先用印钱解决问题。但是长期来看的话,会导致大家产生一个政府会不停印钱的预期。这种情况下,就是打压货币自身的信用,结果就是和老蒋一坐桌了。所以,为了避免牛村的牛券变成津巴布韦币,你作为村长,虽然知道提高税率会让大家直接看到并心情不满,但因为你想可持续性竭泽而渔,加税比偷偷印钱印得太多、最后把自己的信用搞没了要更好。因为虽然名义上你是一村之长,但你心理清楚,你的权力确实是来自于下面的牛马的。

然而,以上仅限于你的钱流通范围有限。当你的钱多到一定程度,比如美元,全世界人民都不可不用的时候,你就会有一种特权。这个时候你疯狂地用钱,代价却是全世界的人来承担。所以我认为我们应该避免一种货币变成全球货币,否则这个货币的发行方相当于对全球拥有了收割权,持续获得非对称的收益。

https://www.zhihu.com/question/2006688034284912963/answer/2073768289554129404

留一点地方给自己“古法”编程吧

本文无 AI 辅助创作,请放心食用。

我看了一下自己最近纯手工编程的项目,是开源仓库 Noteman,最近更新时间是 Mar 29, 2025,距今一年多。而真正还在大规模手搓代码,大概是在 2023 年之前

——对上了,22年11月30日,OpenAI发布ChatGPT3.5,自那以后,无论是让 AI 生成之后我再 Copy(大约是在 2023~2025,基本用的是免费的 GPT 和 Gemini Pro 2.5)还是转向纯 Coding Harness(最近两年是诸如 Claude Code 或是 Codex CLI),我再也没有完全手搓代码了。哪怕是去年自己曾经一些极其复杂逻辑,AI 自己理解不了也给不了太好方案的情况下,也依然是让 AI 生成了部分相对不动脑的代码。


然后最近接触了一些刚毕业的校友,我发现他们几乎四年来从来没有自己完整手写地做完过任何一个编程作业——而他们的独立编程能力也十分堪忧。基本上可以说沦为了传话筒,没有 AI 就丧失工作能力只能发呆。他们可以面不改色地面对 AI 写出来的质量非常糟糕的代码,因为他们完全看不出来有任何问题。他们也几乎从未认真了解过 Clean Code 等原则,当我提到 SRP、OCP 时他们往往觉得这些东西过时了,或者应该封装成 Skill 然后就万事大吉了。

例如有个人长期把 Git、Docker 之类操作全部交给 AI,虽然不会手打命令(哪怕切出分支都不记得怎么做),但他们觉得自己已经掌握了 Git 和 Docker。然而据我观察他们并未如我们前 AI 时代的人那样建立了良好的心智模型,一旦遇到一些复杂的局面就只能全权交给 AI 但无法理解,就如一个产品经理遇到 AI 生成的前端代码报错那般。


所以,我想发表一个暴论,AI 时代,每个程序员一定要留一个完全手写的项目。

对老手而言,意义在于能对冲能力退化的风险,在 AI 作用受限时维持技术接管能力。毕竟依然不存在能理解如项目负责人那般周全的上下文的 AI,这块再聪明也没用。依然会有许多情况 AI 跑偏了,或者环境确实受限,或者极端点出现一段完全无法使用 AI 的时期,那么依然能够亲自进入系统解决问题,是你作为 Senior 的实力的证明。

对新手而言,长期来看,在不断设计、反思中手写代码,可能反而是更高效的训练。甚至可以说,保留一点手搓代码,是走向资深工程师的捷径,因为你的多数竞争者已经完全交给 AI 了。而他们享受不到手搓代码带来的一些意外的好处。


是的,手搓代码其实是有一些好处的!因为手搓代码可以迫使你频繁地在最细节的层面,做出有意义的决策。

举个例子,我最近也开始手搓一个迷你的 RTOS 叫 MiniRT。里面就涉及到大量的决策细节,比如亲手设计 Task 结构的时候,你必须思考哪些字段是最重要和最必要的(例如栈指针、任务状态等字段)。如果交给 AI,基本上大家会看 AI 的方案 Sounds good 就觉得 OK 了,然后不知不觉设计已经变得相当复杂,而你实际上不太清楚他是怎么演化到这样的复杂地步的,心里对整套系统也没有清晰的图景——哪怕你已经 review 了每个 PR。因为 Review 的时候往往你也是觉得看起来合并,就准了。然而不知不觉系统已经被 AI 写成屎山,甚至出错,这个时候才回过头来看设计,智商再高也会有种云里雾里的感觉。

所以手写的价值就是让你不得不仔细斟酌每个设计决定。这种过程是相当锻炼人的,任何经历过无 AI 时代,靠查 CSDN、Stack Overflow、翻书甚至翻论文来手搓代码的人的都能理解我刚刚说这些意味着什么。


所以我建议大家尤其是新人一定要体验一下手搓代码,最好能给自己一块自留地可以长期手搓,如果是和现实业务相关就更好(玩具项目毕竟复杂度还是远不及现实),在这个过程中积累一手的编码设计决策经验,会让你非常快速地成长。哪怕今后 Review 代码和指挥 AI 重构,也会不容易被忽悠。

这和一些传统企业要求高级经理必须从基层做起是一样的,如果没有亲自做过,就很容易缺乏一些不可言说的判断力,被手下的 Agents 忽悠,总之,你写代码就会产生类似外行领导内行的奇妙场景。


而且编程的情绪体验也是很重要的一部分。和 AI 协作编程时,我的基本流程是先出 Design Doc(类似于战略),再出 Implement Guide(类似于战术),最后让 Agents 去施工。这个过程中我约等于 CTO,倒是很锻炼人的架构能力——我会让 AI 反复地拷问我,确保大方向上没有任何歧义和差错。

然而这个过程并不那么畅快,我经常会感觉到有种信息过载的感觉。

相比以前和同事慢慢讨论方案,一边一行行实现一边迭代重构相比,动脑的强度实际上高了很多,然后等待 AI 出工的过程中往往又会有点无聊,对于结果的不可控性和 AI 代码的理解困难性等方面又会让我有点焦虑。

纯手搓代码能够很好地互补这一点——我暂时离开了 AI 驱动的高峰值功率的生产节奏,能够平稳地享受专注的创造,感受心流带来的平静。可以说纯 AI 开发很糟糕地打破了编程的这一部分乐趣。

哎,真有点怀念古法编程时代。


最后叠个甲,我这里的“古法”编程的定义是,项目全部代码亲手编写,不以对话或其他方式让 AI 生成代码。但可以和AI讨论细节实现,至于用不用必须自己判断。用 Fitten 之类的 Tab 补全一行代码是 OK 的。我也不反对生产中用 AI 提效,也不试图说服坚决抵触手写者。本文只想写给仍想保有技术掌控力与完整创造经验的程序员。

2026 年 7 月于昆明

沉沦

我们是人,我们本不需要灯红酒绿的刺激,只需要在大地上奔跑,在大树下看太阳,在吃饭时感受食物的质感和气味,在困倦时闭上眼什么也不想地休息。

我从来看不起那些为了一时的快乐,毁掉自己的人生的人。我看不起明明有重要的考试却依然沉浸于手游的人。我看不起明明可以正常工作,却去乞讨的人。我看不起倾家荡产赌博的人……总之,我看不起自甘堕落的人。

直到有一天,也许是因为长久的加班,又也许是因为别的什么原因,我感觉到从未有的空洞。我好像很痛苦,又好像不是很痛苦。我好像很累,但又好像还能活动。我看向曾经感兴趣的一切事物,却感觉一切都失去了光彩。我成为一个无趣的人。当我关掉下饭的视频,一声打出吃完螺狮粉的臭嗝之后,我发现自己变成一具空壳。我发现当下难以忍受,超越理智地难以忍受。我发现我是孤独的,无法与任何人建立连接。这并非是没有人爱我了,而是我停止了感受,却无法再开启。我变成了那些我看不起的人,我自动地寻求廉价的刺激,但又在刺激满足之时就已经感觉无聊。我和 AI 无止尽地聊天,而它只是换种方式重复我的呓语,我成为了熵增的一个环节。

我开始接受自己是一个普通人,是一个我曾经鄙视的那种傻逼。质疑傻逼,理解傻逼,成为傻逼。没有体验过傻逼所在情境的人,没有资格评价傻逼的傻。油箱空了怎么拧方向盘车都不会走。不过,我还不想成为纯粹的傻逼,所以我要去找个咨询师,然后开点药了。

张雪峰死了。我也发现我的抗压能力是真的强,但是正如网友所说,“如果你只能活到41岁,那么选任何专业都没有意义”。