<commit_before>---

layout: post
title: 《程序员的数学基础课》笔记
category: 生活
tags: Life
keywords: math

---

## 简介（持续更新）

* TOC
{:toc}

## 为什么学数学

数学理论和编程实践的结合其实是“决裂”的，所以学习数学的时候，你不能太功利，觉得今天学完明天就能用得着，我觉得这个学习思路可以用在其他课程上，但放在数学里绝对不合适。

徐文浩：理解“程序”和“问题的解决方案”的关系。大部分应用领域的核心解决方案，都是把应用领域的问题，形式化为一个个数学问题。在找到数学问题的“解法”之后，用写程序的方式翻译成实际应用的“算法”。而能够应用“数学”的方式来解决问题，是从一个只能套用现成方案的“码农”，向能够将新问题形式化、并找出创新解决方案的“研发工程师”迈出的第一步。

之前没那么火，但早早就在搜索、广告这些领域，应用的机器学习和推荐算法。这里面其实就是结合了微积分、线性代数、概率论之后的最优化问题。


王天一：作为非数学专业出身的“外行”，我们使用数学的目的不是顶天，而是立地；**不是上下求索艰深的理论问题，而是将生活中的具体问题抽象化，进而加以解决**。因此，对于我们这些票友来说，学习数学的基础在于经验而非哲学，比较实际的思路是秉持功利主义的原则，**用多少学多少**。掌握基本的线性代数与矩阵论、概率论与数理统计知识足以应付日常的使用，盲目地好高骛远通常有害无益。理论化和公理化这些比较深邃的尝试固然让人着迷，但它们可能并没有肉眼可见的实用性，对于绝大部分计算机从业者恐怕过于阳春白雪。PS：**不要死钻定理，用好也是本事**。

其次，在学习时还要理解数学的本质。数学是工具而非问题，是手段而非目的。探索世界奥秘的学科是“格物穷理”的物理学，相形之下，数学更像是个任人打扮的小姑娘，它存在的意义就是通过合理的设计简化物理学的研究。正因如此，在数学中存在着各种各样在现实中不可能出现的理想化模型（比如无穷小和极限的诞生），也存在着对同一个物理过程不同的建模方式（比如矩阵力学和波动力学）。**充分理解数学的人造特质，可以在学习中少走很多无谓的弯路**。

理解数学的工具属性就会自然而然地引出了数学学习中的另一个关键点，那就是工具设计的出发点，也就是所谓的数学思想与数学逻辑。任何一个工具都不是平白无故地设计出来的，它必然要解决某个特定的问题，比如线性代数与矩阵论是对具体对象的抽象表示与运算，比如概率论和数理统计是对不确定性及其定型定量表示的建模。因此，**在掌握每一种数学工具的微观技巧之前，理解它们的宏观目标是更加重要的**。只有掌握了工具诞生的背景与目的，才有可能有效地使用它们。如何透过现象看本质，将不同场景融会贯通，才是值得锻炼的高级能力。PS：[认知的几点规律](http://qiankunli.github.io/2018/11/05/cognition.html)学习这个东西，没有什么捷径。而且往往是需要先明白更多抽象的相对比较难的东西之后，学习简单的东西就只是一个查文档的过程。

数学 ==> 人造  ==> 工具  ==> 发明工具的初衷 ==> 透过现象看本质（相同问题的不同方法，不同问题的相同方法） ==> 融会贯通

## 学什么？

![](/public/upload/life/math_for_programmer_1.jpg)<commit_msg>[fix]add doc<commit_after>---

layout: post
title: 《程序员的数学基础课》笔记
category: 生活
tags: Life
keywords: math

---

## 简介（持续更新）

* TOC
{:toc}

## 为什么学数学

数学理论和编程实践的结合其实是“决裂”的，所以学习数学的时候，你不能太功利，觉得今天学完明天就能用得着，我觉得这个学习思路可以用在其他课程上，但放在数学里绝对不合适。

徐文浩：理解“程序”和“问题的解决方案”的关系。大部分应用领域的核心解决方案，都是把应用领域的问题，形式化为一个个数学问题。在找到数学问题的“解法”之后，用写程序的方式翻译成实际应用的“算法”。而能够应用“数学”的方式来解决问题，是从一个只能套用现成方案的“码农”，向能够将新问题形式化、并找出创新解决方案的“研发工程师”迈出的第一步。

之前没那么火，但早早就在搜索、广告这些领域，应用的机器学习和推荐算法。这里面其实就是结合了微积分、线性代数、概率论之后的最优化问题。


王天一：作为非数学专业出身的“外行”，我们使用数学的目的不是顶天，而是立地；**不是上下求索艰深的理论问题，而是将生活中的具体问题抽象化，进而加以解决**。因此，对于我们这些票友来说，学习数学的基础在于经验而非哲学，比较实际的思路是秉持功利主义的原则，**用多少学多少**。掌握基本的线性代数与矩阵论、概率论与数理统计知识足以应付日常的使用，盲目地好高骛远通常有害无益。理论化和公理化这些比较深邃的尝试固然让人着迷，但它们可能并没有肉眼可见的实用性，对于绝大部分计算机从业者恐怕过于阳春白雪。PS：**不要死钻定理，用好也是本事**。

其次，在学习时还要理解数学的本质。数学是工具而非问题，是手段而非目的。探索世界奥秘的学科是“格物穷理”的物理学，相形之下，数学更像是个任人打扮的小姑娘，它存在的意义就是通过合理的设计简化物理学的研究。正因如此，在数学中存在着各种各样在现实中不可能出现的理想化模型（比如无穷小和极限的诞生），也存在着对同一个物理过程不同的建模方式（比如矩阵力学和波动力学）。**充分理解数学的人造特质，可以在学习中少走很多无谓的弯路**。

理解数学的工具属性就会自然而然地引出了数学学习中的另一个关键点，**那就是工具设计的出发点**，也就是所谓的数学思想与数学逻辑。任何一个工具都不是平白无故地设计出来的，它必然要解决某个特定的问题，比如线性代数与矩阵论是对具体对象的抽象表示与运算，比如概率论和数理统计是对不确定性及其定型定量表示的建模。因此，**在掌握每一种数学工具的微观技巧之前，理解它们的宏观目标是更加重要的**。只有掌握了工具诞生的背景与目的，才有可能有效地使用它们。如何透过现象看本质，将不同场景融会贯通，才是值得锻炼的高级能力。PS：[认知的几点规律](http://qiankunli.github.io/2018/11/05/cognition.html)学习这个东西，没有什么捷径。而且往往是需要先明白更多抽象的相对比较难的东西之后，学习简单的东西就只是一个查文档的过程。

数学 ==> 人造  ==> 工具  ==> 发明工具的初衷 ==> 透过现象看本质（相同问题的不同方法，不同问题的相同方法） ==> 融会贯通

## 学什么？

![](/public/upload/life/math_for_programmer_1.jpg)
{'fraction_non_alphanumeric': 0.13392552101127433, 'fraction_numerical': 0.0061496412709258624, 'mean_word_length': 18.263157894736842, 'pattern_counts': {'":': 0, '<': 3, '<?xml version=': 0, '>': 13, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '129166', 'n_tokens_mistral': 2767, 'n_tokens_neox': 3184, 'n_words': 58}