你好,我是朱维刚。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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