代码是数学的一种方言。越接近机器,数学越清晰;越接近业务,数学越隐蔽——但它从未消失。

程序猿的数学缺口在哪

浮点 bug 看不懂

典型表现
0.1 + 0.2 == 0.3 返回 false,不知道为什么
判断标准
遇到精度问题靠试,不靠理解
解决方向
理解 IEEE 754,学会整数与浮点的本质(第 1 章)

哈希冲突率算不清

典型表现
用了哈希表,但不知道负载因子多少合适
判断标准
只知道用,不知道为什么
解决方向
学概率论的生日悖论,推导碰撞概率(第 8 章)

复杂度分析只凭感觉

典型表现
说出 O(n log n),但推导不出来
判断标准
看 LeetCode 题解学会了,换个题又不会
解决方向
学渐进分析和主定理,推导代替记忆(第 17 章)

ML 代码看不懂

典型表现
梯度下降的代码能跑,但不知道每行在算什么
判断标准
换个损失函数就不会改了
解决方向
学矩阵求导和链式法则(第 10、11 章)

为什么用 Go 学数学

Go 是这门课的最佳载体。静态类型让你直面 int64 vs float64 的精度差异;没有隐式转换让数学错误暴露在编译期;简洁的语法让数学公式到代码的映射几乎是一对一的。你能在 Go 里看到公式活起来。

// 这一行代码暗藏三个数学概念
func isPrime(n int) bool {
    if n < 2 { return false }
    for i := 2; i*i <= n; i++ {  // 为什么到 sqrt(n)?(第 4 章)
        if n%i == 0 { return false }  // 模运算(第 3 章)
    }
    return true
}

20 章的地图

阶段章节核心问题
数论基础1–5数在计算机里怎么存、怎么算、有什么规律
数列与计数6–8怎么数清楚、怎么算概率、怎么建模随机
线性代数9–10矩阵为什么是程序员最重要的数学工具
分析数学11–13连续变化怎么用离散的计算机表达
图与结构14–15关系网络的数学语言
算法数学16–17性能和安全背后的数学本质
应用前沿18–19信息量怎么度量,AI 的数学基础是什么
终章20数值计算:误差分析与精度控制
口诀数论打底,线代拓维,分析连续,图结构关系,应用收口。

如何使用这本书

推荐做法
  • 每章的 Go 代码都跑一遍,改参数观察输出变化
  • 先读定义,再看代码,最后看原理证明
  • 遇到不理解的公式,先跳过,看代码实现再回头
不推荐
  • 只看代码跳过数学推导——那样你只学到了实现
  • 把每章当独立章节读——这20章是一个整体
  • 觉得'工作用不到'就跳过——这正是你的盲点
常见误区
  • 误以为学完能立刻用到项目——数学的收益是长期的认知重构

判断标准:看完一章后,能给同事讲清楚核心概念 → 算学会了。

数学是科学的语言,程序是这门语言的方言。学会数学,就是学会用更精准的眼睛看代码。

— 本课序言