<audio id="audio" title="结束语 | 和数学打交道这么多年，我的三点感悟" controls="" preload="none"><source id="mp3" src="https://static001.geekbang.org/resource/audio/4b/9f/4b7448095c43530b93e8b8b9821c369f.mp3"></audio>

你好，我是朱维刚。

一眨眼就到了课程结束的时候了，其实我特别不喜欢“结束”这个词，因为学习是没有终点的。我想了很久结束语应该写些什么内容，最后，我还是想从自身的经历，以及技术人的角度，分享一些故事给你，希望能对你有些启发，能够更多地从底层逻辑去思考问题、从数学角度去思考问题。

## 很多问题归根结底都是数学问题

在课程开篇词里我分享过，自己出生于上世纪80年代初，从小父母就一直给我灌输“学好数理化，走遍天下都不怕”的思想。但一开始，我只知道要学好数学，对数学能用在什么地方根本没什么概念。直到进入大学和研究生阶段，学了工程数学之后才真正恍然大悟——原来数学可以用在各类工程上。

后来正式参加工作，我和数学之间的关系也愈加紧密。2008 年，我第一次出国，去比利时首都布鲁塞尔工作。得空的时候，我就坐上小火车去一些名校蹭课、听讲座。像比利时的鲁汶大学、荷兰的乌得勒支大学等等，都是我经常光顾的地方。

<img src="https://static001.geekbang.org/resource/image/fd/2c/fd44286cafa1f6a3f31310d1be3e992c.png" alt="">

每次我都会去听一些教授的理工类课程，这些知识的摄入也让我慢慢形成了自己的底层逻辑思维，特别是会更多地从数学角度来考虑解决问题的方法。

虽然和数学打了这么多年交道，但有意思的是，我觉得自己其实不算是对数学本身特别感兴趣。真正让我对数学保持探究精神的原因是，我对什么东西都很好奇，我总是想看看它背后到底有着怎样的原理。只是我看到最后发现，很多问题其实都变成了数学问题。比如，在导读中说的KNN监督学习算法的底层，其实就是计算向量之间的距离。

好奇心让我们不停地刨根问底，也是促使我们不断学习的原动力。所以在我看来，不管是学习数学还是学习其他学科或技术，保持一颗好奇心非常重要。用乔布斯当年在斯坦福大学毕业典礼上给年轻人的那句赠言：“Stay hungry. Stay foolish.”

## 任何复杂问题都能解决，就看你分解到多细

我在开篇词里说过，我是从2006年年初开始从事机器学习相关工作的。当时我是加入了 IronPort（后来被思科收购了）公司的 TDA（Threat Data Analyst）团队。不过那会儿我才刚毕业没多久，并不知道自己做的是机器学习的工作，也根本不知道什么是机器学习，而且机器学习在当时各应用领域并不火。我只是想着工作和数据分析有关，就“上船”了。

当时，公司的主要业务集中在“反垃圾邮件”这个领域，我的主要职责就是每天分析全球大量邮件数据、人工打分类标签，并且写匹配规则来优化反垃圾邮件引擎，希望能够阻挡更多的垃圾邮件。这个工作其实有点类似如今的数据分析师和数据科学家，基本上每天都在跟“数学”打交道。

不了解的人可能会觉得这些工作没什么大不了的，不就是每天看看邮件，根据设定好的规则给邮件打上 Spam 或 Ham 这类标签，以及做一些正则匹配吗？但事实并非如此。

摆在我们团队面前的，有许多技术层面的挑战。比如，公司的产品面向的是全球用户，邮件内容包含了全世界各类语言，再厉害的机器学习分类算法，也很难做到语言的全覆盖。即便是放到今天，NLP也有很长的路要走，更何况是 14 年前。那该怎么办呢？

当时，我们团队主要是从两方面入手来解决这个难题。一方面，把问题层层分解，引入了反垃圾邮件的多层防御体系，多层过滤垃圾邮件，将一个个复杂问题分解成可以解决的小问题；另一方面，针对分类算法无法识别的内容，采用了部分用人工来分析数据，靠经验打标签的方式来解决，同时还搭建了机制把人工积累的内容转换成经验模型，最后反馈到机器学习算法中。

这段工作经历让我悟出了一个道理：**任何复杂问题都能解决，就看你能分解到多细。**就像马斯克做特斯拉、做火箭，这些看起来非常复杂的产品，其实都是把一个个复杂问题，层层分解到细枝末节的。

当然，遇到问题也要学会多角度思考。一个问题会有很多解决方案，不一定复杂的方案就是好的，有时候可能一个简单的数学公式，就能完美地解决问题。

## 程序员和年龄没有关系，重要的是要足够专注

后来，我又去国外工作了很多年，曾带领国际团队主导比利时电信云BeCloud，以及新加坡政府云 G-Cloud 的建设工作。

在国外工作的那段时间，我的思维方式变换了许多。我开始认识到**程序员这个工作和年龄没有关系，重要的是要足够专注**。“35岁程序员被清退”在国内是热议，很多媒体也经常会拿程序员的中年危机做文章。但在国外，大龄程序员是一抓一大把。

就拿我当时所在的团队来说，整个团队除了我，全都是叔叔辈的，而且还都是大牛级别的。当时团队里最年轻的程序员是来自荷兰的弗雷德里克（Frederik），45 岁；年纪最大的是来自德国的弗兰克（Frank），60 岁。

和这些“高龄”大牛程序员们接触一段时间后我发现，人家不仅工作效率相当高，而且从底层解决问题和记忆的能力，都着实让人惊叹。除此以外，他们还让我认识到了，做技术是需要有产品思维的。更确切地说，技术人要把产品思维融入自己的血液里，变成自己的一部分。这样，技术人在理解需求时会更快、更准，看待问题多了一个角度，也能看得更广、更全。

[<img src="https://static001.geekbang.org/resource/image/f4/96/f43ec5c9093635eb372a8ff2b6506996.jpg" alt="">](https://jinshuju.net/f/s0nXMW)

总之，数学这门学科和程序员的关系可谓是非常密切，甚至经常有人说“数学决定了一个程序员技术水平的上限，会决定一个程序员未来的发展潜力”。不过，在我看来，**数学更多的是扮演一个“工具”的角色，帮助程序员在实际工作中更好地发现问题、解决问题，它是程序员必备的素质**。

所以，我希望“学习数学”在你的人生中没有“结束”的那一天，请让线性代数融入到你的工作和生活中吧！
