You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

6.6 KiB

结束语 | 和数学打交道这么多年,我的三点感悟

你好,我是朱维刚。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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