BlogHome

2022 年度总结

2022-12-25

1. 前言

又到了即将辞旧迎新的 2022 年尾了, 首先祝大家圣诞节快乐~!

而今年个人的兴趣由于种种原因而从 编程语言理论 (Programming Language Theory, PLT), 函数式编程 (Functional Programming) 相关转移至数学上了, 因此今年以来好像几乎都没写什么代码, 而是在打数学系本科的基础, 那么以下来总结一下个人的一些自学进度吧!

2. 具体学科心得及进度

2.1 数学分析

进度

完成集合论, 实数理论部分, 数列极限部分推进至 Stolz 定理 与 Bolzano-Weierstrass 定理.

感言

虽然数学分析对于整个数学系来说是基础中的基础, 但由于自身分析基础较为薄弱, 并且之前已经好几年几乎未曾接触过数学方面的内容了, 推进的时候其实遇到蛮多困难的, 尤其例如说利用 $\epsilon-N$ 证明数列极限的命题中, 利用不等式进行各种技巧性的缩放, 凑项等, 大量的技巧性方法在一开始的时候几乎是浑然不知的, 现在算是大致有点掌握这方面的技巧了, 数分目前算是开了个头吧 (至少不至于看书的时候连几页都看不懂的那种), 希望明年上半年能彻底完成数学分析1 (一元微分与积分学) 的课程吧!

2.2 抽象代数

进度

跟读 Algebra - Hungerford (GTM 73), 完成群论基础, 有限群, 循环群, 陪集与商群及群同构定理的相关笔记, 并初步开坑了群作用, 环与理想的章节.

感言

抽象代数这门学科笔者在几年前写 Haskell (一门函数式编程) 的时候就已经听说过, 就是上面的 Semigroup, Monoid 这些 typeclass, 但一直都是处于一种开了个坑又摆了的状态, 对抽代的真面目并不真的了解. 为了改变现状, 今年做了大量笔记与习题, 并且重新补了一些初等数论的内容, 目标就是为了扎实抽象代数的基础, 希望明年下半年进度可以推进至振奋人心的 Galois 理论.

2.3 高等代数 (线性代数)

进度

观看 丘维声教授 主讲的 清华大学高等代数公开课, 推进至 $n$ 阶行列式的性质以及线性空间的各种性质.

感言

最开初的时候跟读的是 Linear Algebra Done Right - Sheldon Axler, 但发现该书并不是特别侧重于计算, 导致其实我在计算一些具体实例时会感到有些吃力, 因此后来我改而跟随了国内声誉很好的网课, 就是丘教授的高等代数公开课进行学习, 目前笔记大致是记到行列式部分的性质了. 说实话丘的网课质量是真的名不虚传, 每个概念都过渡得非常的丝滑, 衔接得很好, 并且都给予了足够的动机, 讲课风格十分幽默, 是国内为数不多的好课之一了.

2.4 点集拓扑

进度

跟读 点集拓扑讲义 - 熊金城, 而笔记大概做到 子/积/商空间 以及 连通性 部分.

感言

虽然点集拓扑上带有 "拓扑" 二字, 但其实它并不是特别的 "拓扑", 因为这门学科的研究对象并不是拓扑图形那类的数学对象, 而是对 "点集" 的研究. 而它的具体实例还是常见于数学上各种分析学科中, 因此点集拓扑必须配合好数学分析的具体实例去理解, 反之数学分析中的很多内容都可以被对应到点集拓扑上进行延伸, 例如将某些数分上的定理推广至多元微积分便是利用了点集拓扑的观念.

虽然个人不太感兴趣但还是能从中了解了许多拓扑中的基本定义以及概念, 这对代数拓扑的学习的确起到奠定基础的一些帮助.

2.5 代数拓扑与同调代数

进度

观看 齐震宇教授 主讲的 台大代数拓扑公开课, 且配合 nLab 上的代数拓扑与同调代数教程, 从奇异同调群入坑, 目前初步了解到, 奇异同调群, 链复形, 链同伦与同伦的部分.

感言

之前还在码 Agda (带有依赖类型的定理证明器) 以及学习 同伦类型论 (homotopy type theory, HoTT) 的时候就一直听到隔壁某群的群友一直在抛出一些高端的代拓词汇, 感觉像是看天书一样. 而由于代数拓扑算是数学领域里使用范畴论较多的其中一门分支了, 所以我对代数拓扑也比较感兴趣, 而我同时亦多了解一些范畴论于数学中的例子, 而有了抽代的基础, 因此今年年尾下定决心开坑了代数拓扑, 经过一小部分的入门现在大致对代数拓扑这门学科有了个初步了解了, 也不再恐惧了吧.

而课程本身, 齐教授的功力深厚, 内容多是以同调代数与范畴论来讲述代数拓扑的概念, 他本身在哈佛攻读博士时亦是丘成桐的弟子, 也是为数不多个人非常推荐的网课之一了.

3. 学习心得及总结

3.1 任何学科都是 "加点游戏"

在从 PLT 方面转入数学巨坑前, 我一直认为在 Agda 搭了一整套范畴论框架那么抽象代数 (群, 环, 域) 的内容后就可以一路平推, 当然事后把自己脸都给打肿了, 虽然这确实提供了一定程度的帮助, 例如建立全局性的思维, 但这仍然不可能让你很轻松地拿下抽代, 因为抽象代数完完全全可以脱离范畴论建立起来的, 只不过用范畴论来解释时观点会更高也更为现代, 但在证明抽象代数的命题时往往都需要很大量的代数变形的技巧以及对具体数学对象的理解, 例如利用两个数域上的不同性质找出 $(\R^\times, \cdot)$ 与 $(\C^\times, \cdot)$ 为什么会不同构, 利用循环群 $C_n$ 到另一任意群 $G$ 的同态 $f$, 它的同态像 $f(C_n)$ 必为循环群才可以解释为什么任意循环群的自同构群 $\operatorname{Aut}(C_n)$ 中的元素必定由循环群的生成元集所确定. 因此更多的是集合论, 数论, 抽象代数本身的而非范畴论的思路, 因此单纯使用范畴论的方式来学习抽象代数会很快落入名词党的窘境, 即只知道某个概念但说不出来该概念是什么, 它又有什么具体性质, 关于这个概念的具体证明方式又是怎样的. 所以跳掉的知识 (例如上面就是跳过了抽象代数去学习范畴论) 终究还得再补回来, 这并不是什么报应, 而是之前一直遗漏掉的内容.

事实上按照正常的数学专业学习路线来说应该是从具体到抽象的, 例如我不了解更具体一些的抽象代数 (这门学科相对于范畴论来说就是较为具体的, 而它对比起线性代数就是更为抽象的), 那么例如在范畴论中谈及到 商对象 (quotient object) 时又会缺了一些重要实例, 例如在群/环范畴下的 商群 (quotient group), 商环 (quotient ring) 等, 那么就无法形成对某一个概念的深刻了解.

对于 PLT 亦是如此, 例如我在学习依赖类型论, 那么我总得先学会 简单类型的 λ 演算 (simply typed lambda calculus, STLC) 吧, 也总得先学会最基础的 λ 演算, 又例如在 HoTT 中可能遇到一些某个 球面 (sphere)同伦群 (homotopy group), 纤维化 (fibration) 等等这些具有 同伦论 (homotopy theory) 背景的概念, 如果我不单只想从类型论的角度去理解这些词汇, 那么就必须学习同伦论, 而同伦论又是代数拓扑里的一个环节, 那么好了现在代数拓扑实际上就是数学上的一门分支了, 它的前置要求又囊括了抽象代数和一些基本的拓扑概念, 那么抽象代数的许多例子又都能从线性代数以及初等数论中找到, 而基本的一些拓扑概念又能在点集拓扑中学到, 并且点集拓扑中的具体实例又会联系上数学分析, 那么我就必须从头打好基础, 从最简单的数分高代学起 (像打游戏一样从科技树的根基开始加点), 虽然学习的过程可能以年为单位且在得出成果之前会非常枯燥, 但要牢固地逐步竖立起这些概念, 坚持与坚定的信念是必不可少的.

3.2 学习的难度应当适中

学习路上一定是布满荆棘的, 举出这一点就是专门为了打我以前的脸的, 因为我之前一直认为学习应该是件很容易的事情, 事实上学习应该是充满困难与挑战的, 但如果说真遇不到, 那就不应该继续学下去了, 而应去学一些更难更深入的知识, 再在基础上折腾就是浪费时间. 而当我们真的彻底地理解透彻这些难点后, 思维上几乎必然会得到一定程度的提升, 这是在舒适区的范围外学习知识时才能带来的一种精神层面上的升华.

那么应该如何判断自身是否处于舒适区中呢?当发现某个学科中的内容大多都是之前从未曾接触过的陌生知识且自身在理解上每走一步都能遇到一定量的难点, 这些都算是位于舒适区外的内容, 但请注意这里我使用了 "一定量的难点", 是因为该处并非是指一步登天的情况, 就好比我连群论, 范畴论都没开始学就学代数拓扑, 那纯粹就是玩火自焚. 因此学习这些知识点还是应该循序渐进地逐个技能点解锁, 即中间的步骤不能一下子跨越太多 (尽可能一个个知识点啃下去而不跳步是最系统化的), 即学习的难度应当适中.

3.3 日拱一卒地推进学习进度

在数学的学习上可能会遇到许多难点或者瓶颈位, 例如经常可能有某道题目会想半天没想出来应该如何证明, 这个问题不解决掉 (一些值得仔细思考的问题除外) 我就不往后推进了. 这是一个很错误的想法, 在学习数学的路上千万不能死钻牛角尖, 花上一天甚至更长的时间去细想, 应该及时于网上直接查找相关的答案或者证明方式, 不然将会浪费大量时间和精力在一个位置上, 到最后可能都没有找到一个合适的思路, 导致后续海量的内容还没学完而心理防线就先崩溃了, 那么等待着你的只会是摆烂的心态, 那么接下来的课程就都不用学了. 事实上今年以来我有无数遍这样子的经历, 太过于执着, 才导致数学的学习进度不如理想.

广义地, 不仅仅针对数学这一门学科的解决方式, 我认为是应该采取打游击战, 围点打援的方式, 对于一些困难的概念实在理解不能, 那么可以稍微放一放, 只留个印象, 先继续学习后续的内容, 因为后续的内容往往可以给予你更多的角度与方法去思考或解决当前的问题, 然后过段时间再回头一看或许问题就会迎刃而解, 例如对于数学分析我觉得某一个定理的证明理解起来实在太过困难了, 那么把这些难点比喻为解放战争中的重要城市, 在敌人多势众时 (即难度过高时) 你是无法撼动它们的, 你只能够在先逐一攻破小据点, 小城市 (相对较为容易的知识点), 累积起来得到足够的群众基础 (就是把后续以及以前知识点都学过一遍后), 此时再攻打这些大城市才时有足够的力量去一举拿下, 正所谓日拱一卒, 积小成多便是如此.

3.4 对未来学习方式的改进

  • 学习如何学习:反思并总结当前的学习方式对某学科来说是否正确, 有针对性及高效的. 例如学编程适用的方式, 在学数学时或许并不适用 (或不高效), 那么就必须及时舍弃并重新建立一套新的方法, 一定不要沉浸在过去的舒适圈当中;
  • 做电子笔记的方式:要调整做笔记时的顺序, 应该用手写将某一节的内容推导过一遍后, 再记到电子笔记上, 而非一边看书一边记电子笔记, 这样子很容易导致失去思路, 又或者只是一种纯抄书的做法, 是低效的;
  • 想方设法激励自己:可以将某本书上的每个即将要学习的每个知识点拆分为非常细节的总览, 例如可以用 Excel 建个表格, 将书上每一章中每一小节的某条定理, 命题的证明, 又或者习题的序号写上, 并在完成时可以在该方格内打上勾, 那么即使很微小的进度亦可以很可观地被看见, 而非感觉今天又没多少进度, 那么就可以像打游戏般激励自己早日将所有表格上的方格都勾上, 这样做便可以建立学习时的成就感.