防止断更 请务必加首发微信:1716143665
关闭
讲堂
客户端下载
兑换中心
企业版
渠道合作
推荐作者

开篇词 | 作为程序员,为什么你应该学好数学?

2018-12-03 黄申(加微信:642945106 发送“赠送”领取赠送精品课程 发数字“2”获取众筹列表。)
程序员的数学基础课
进入课程

讲述:黄申(加微信:642945106 发送“赠送”领取赠送精品课程 发数字“2”获取众筹列表。)

时长07:42大小7.06M

你好,我是黄申,目前在 LinkedIn 从事数据科学的工作,主要负责全球领英的搜索引擎优化,算法和数据架构的搭建。

2006 年,我博士毕业于上海交通大学计算机科学与工程专业,在接下来十余年时间里,我曾经在微软亚洲研究院、IBM 研究院、eBay 中国研发中心做机器学习方向的研究工作,也负责过大润发飞牛网和 1 号店这两家互联网公司的核心搜索和推荐项目,还写过一本书《大数据架构商业之路》。

对于数学和计算机编程的联系,我之前也没有思考过。直到有一次,在硅谷的一个技术交流 Meetup 上,我听到一位嘉宾分享说:“如果你只想当一个普通的程序员,那么数学对你来说,并不重要。但是如果你想做一个顶级程序员,梦想着改变世界,那么数学对你来说就很重要了。”

听完这句话,我马上感受到强烈的共鸣,因为就我自己的工作经历而言,越是往高处走,就越能发现数学的重要性。我知道,数学对于我们每一个程序员来说,都是最熟悉的陌生人。你从小就开始学习数学,中考、高考、研究生考试还要考数学,所以那些熟悉的数学定理、数学公式,陪伴你至少也有 10 年时间了。

但是,自从做了程序员,你可能早就把数学抛在了脑后,甚至觉得曾经为了应试而“硬学”的数学应该是彻底没什么用了,终于可以和他们 say goodbye 了。毕竟作为一个基础学科,数学肯定是没操作系统、数据结构、计算机网络这样的课程看起来“实用”。

起码我之前就是这么认为的。大学的时候,我非常喜欢编程,甚至还翘过数学课,专门在图书馆看计算机类的图书。那会儿我觉得,数学这东西,完全就是应试教育,我更喜欢计算机这样操作类的课程,不喜欢待在教室里听数学老师讲那些枯燥的理论和定理。

再到后来,我读了硕士,开始接触机器学习,猛然间才发现,机器学习表面上是“写程序”,但实际上剥去外表,本质上就是在研究数学。从那会儿开始,我对数学的认知也才逐步客观和理性起来。

再到现在,我参加了工作,写了这么多年代码,我想说,数学学得好不好,将会直接决定一个程序员有没有发展潜力。因为往大了说,数学它其实是一种思维模式,考验的是一个人归纳、总结和抽象的能力。把这个能力放到程序员的世界里,其实就是解决问题的能力。

往小了说,不管是数据结构与算法还是程序设计,其实底层很多原理或者思路都是源自于数学,所以很多大公司,在招人时,也会优先考虑数学专业的毕业生,这些人他们数学基础很好,学起编程也更容易上手。

所以我觉得,如果编程语言是血肉,数学的思想和知识就是灵魂。它可以帮助你选择合适的数据结构和算法、提升系统效率、并且赋予机器智慧。尤其是在大数据和智能化的时代,更是如此。

举个例子,比如我们小学就学到的余数,其实在编程的世界里也有很多应用。你经常用到的分页功能,根据记录的总条数和每页展示的条数,最后来计算整体的页数,这里面就会有余数的思想。再难一点,奇偶校验、循环冗余检验、散列函数、密码学等等都有余数相关的知识。

遇到这些问题的时候,你能说你不懂余数吗?我想你肯定懂,只是很多时候没有想到可以用余数的思想来解决相关问题罢了。那为什么没有想到呢?我认为,本质原因还是你没有数学思维,还是你数学的基础不够好。

所以,在这个专栏里,我想和你重点聊聊数学。当然,我知道数学博大精深,所以在一开始做专栏的时候,我就和极客时间团队一起定义好了专栏的边界,用一句话来说就是“只做程序员需要学的数学知识”。

首先,我梳理了编程中最常用的数学概念,由浅入深剖析它们的本质,希望能够帮你彻底掌握这些最基础、也最核心的数学知识。这其中包括那些你曾经熟悉的数学名词,比如数学归纳法、迭代法、递归、排列、组合等等。

其次,我把线性代数和概率统计中的抽象概念、公式、定理都由内而外地讲了出来,并分析它们在编程中的应用案例,帮助你提升编程的高阶能力。对于这些内容,我会从基本的概念入手,结合生活和工作中的实际案例,让你更轻松地理解概念的含义。

比如,对于朴素贝叶斯方法,我会从基本的随机现象、随机变量和概率分布等着手。随后,我会逐步深入,结合这些数学知识在编程算法中的应用进行展开。比方说,贝叶斯定理是什么,随机变量之间的独立性是什么,这些是如何构成朴素贝叶斯方法的,而最终朴素贝叶斯又是如何被运用在机器学习的分类算法之中的。

这样的讲解路线,既能让你巩固基础的概念和知识,同时也能让你明白这些基础性的内容,对计算机编程和算法究竟意味着什么。

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

因为数学知识总是比较抽象,特别是概率统计和线性代数中的概率、数据分布、矩阵、向量等概念。它们真的很不好理解,也需要我们花时间琢磨,但是对于高级一点的程序设计而言,特别是和数据相关的算法,这些概念就非常重要了,这可都是先人总结出来的经验。

如果你能够将这些基本概念和核心理论都搞懂、搞透,那么面对系统框架设计、性能优化、准确率提升这些难题的时候,你就能从更高的角度出发去解决问题,而不只是站在一个“熟练工”的视角,去增删改查。

最后,我希望数学能够成为你的一种基础能力,希望这个专栏能帮你用数学思维来分析问题和解决问题。数学思想是启发我们思维的中枢,如果你对数学有更好的理解,遇到问题的时候就能追本溯源,快、准、稳地找到解决方案。

伽利略曾经说过,“宇宙这本书是用数学语言写成的”,数学是人类科学进步的重要基础,所以,你我都要怀着敬畏的心态去学习、思考数学。同样,我还要求我自己的孩子一定要学好数学,因为我确信,这对于他未来的发展来说,至关重要。

编程的世界远不止条件和循环语句,程序员的人生应当是创造的舞台。我希望,通过这个专栏的学习,能够让你切实感受到数学这个古老学科的活力和魅力。

好了,说了这么多,相信你已经下定决心和我一起攻克数学。重新开始就要告别过去,你可以在留言区做个“数学学习复盘”,在之前的学习过程中,你的学习状况是怎样的?你遇到的最大困难是什么?现在,你最希望学到的是什么?

Now,你说,我听!

© 加微信:642945106 发送“赠送”领取赠送精品课程 发数字“2”获取众筹列表
下一篇
导读:程序员应该怎么学数学?
 写留言

1716143665 拼课微信(193)

  • 胡鹏 置顶
    2018-12-04
    27
    已经迫不及待了 , 希望快快更新
    展开

    作者回复: 快了快了,12月7日开始,每周三篇^_^

  • 嘿,luo
    2018-12-03
    30
    高中学文科,数学相对于理科容易点,大学没学过数学(专业不需要学),当然智商也不是很高,担心是否跟得上,学得懂
    展开
  • C家族铁粉
    2018-12-03
    26
    黄申老师是真大神!!机器学习表面上是“写程序”,但实际上剥去外表,本质上就是在研究数学。这话太有道理。

    最近开始学机器学习和深度学习,才发现数学真的很有用(捂脸)。大学里不管高数、线代还是概率论,基本都靠考前刷题,学完就忘,也一直感觉没什么用。然后一看机器学习的书,简直崩溃,可以说是贝叶斯主导的世界,还要考虑一些向量问题。

    三个月前买了概率论和线性代数的经典大块头,厚厚的原书第几版来着,到现在只看过目录,,,太厚了,真看不下去。终于知道数学重要,但是学不进去的崩溃啊。。。。

    希望大神能带我入门!

    展开

    作者回复: 感谢支持!机器学习等算法里的数学知识,确实不太好懂,我从自己的理解出发,做了一些讲解,希望对你有所启发!

  • 船长
    2018-12-04
    17
    我个人的一个拙见:“对于程序开发这个职业来说,数学和英语是非常重要” 这句话我一直记着!这是大一时一个老师说的!
     但是在整个大学过程中,在开发中有意识的去应用数学是极少的,可能偶尔会想想!
     在做项目的过程中,基本是搭积木的过程!库和自带函数就能满足需求!运用到的数学也是基本的初中数学!连高中的求导都没用过!
     那会做数学题时能想到多种解法,而且会去思考更好的解题方法!更重要的是很开心!
     目前我就是老师所说的普通程序员吧!或许自己选的职位与数学有点距离!更重要的是激情变少了!
     
    数学的重要性对于自己的技术成长是不言而喻的!

    如果大家看到,我的一点建议就是:
    要乐观与希望,坚持而不急躁!
    展开

    作者回复: 最后两句总结的太好了👍

  • 披荆斩棘
    2018-12-03
    12
    我是做Android开发的,工作不到两年还是菜鸟一枚,虽然是计算机系毕业,但是基础还是很薄弱,尤其是有关数学方面的,最简单的进制甚至是字节还搞不清,今天看到博文里面讲color色值运算,一堆进制,矩阵就一脸懵逼,想学新东西,只要关于数学方面的基本就是看不懂,啥也不会,想去补补基础的数学知识,又不知道如何下手,希望老师能带我系统的复习一遍计算机数学知识,不求面面俱到,只求老师给我们指引一条通往高阶工程师的大道,如果老师能给我们这些刚入开发不久的小菜鸟们指导下学习规划那就更好了😁,很期待即将学习的东西,加油!!
    展开
  • 今天也是爆...
    2018-12-03
    11
    看到概率论和线性代数果断入手,上学的时候算了一堆,感觉就没明白过……这回希望能搞定,立个flag!
  • 每天晒白牙
    2018-12-03
    9
    高考,考研都败在了数学上,工作了希望不要再败了
    展开
  • 上善若水(...
    2018-12-03
    9
    第一时间购买,数据结构和算法很重要,但是很多算法又离不开数学,数学是对现实问题的抽象,也就是解决不能靠直觉解决的问题,比如从1加到10, 我们直接加就可以,但是从1加到1亿,如果不抽像总结出规律和公式,是很难实际算正确的。希望作者能结合编程里简单的例子来应用这些知识点,这样我们很容易把这些数学知识记下来。同时能少点理论,多点图帮助理解。
    展开
  • ahnselina
    2018-12-03
    8
    以前最大的问题是学了数学,不知道具体有什么用
    展开

    作者回复: 有同感,有的时候我用了数学的思维都不自知……

  • 2018-12-03
    6
    希望老师能帮助我们提升数学公式的推导能力,引导普通程序员走进机器学习的大门!我发现大多数学机器学习者都是卡在公式看不懂,无法推导上,希望老师能帮我们答疑解惑!
  • 余衫酉
    2018-12-03
    5
    我是艺术系程序员,大学没有接触过数学。最近看机器学习的公式完全不明白。
  • TomFish
    2018-12-03
    5
    目前水平约等于高中水平
    展开
  • panda
    2018-12-07
    4
    老师 我毕业很多年了,数学忘的都差不多了(在学校里面也没感觉学得有多好)有点怕跟不上,有书博客之类补充阅读推荐吗
    展开

    作者回复: 这个专栏是由浅入深的,不用担心一开始就看不懂。至于后面比较难的部分,我也会给出一些参考资料

  • leiyan
    2018-12-06
    4
    工作了十来年了,自打开始涉足机器学习,才发现原来大学里读得那么辛苦的高数原来可以这么用。如果当初老师能多举一些高数的应用,相信学起来会更加卖力。现在为了机器学习,又要重新学数学喽

    作者回复: 可能当时机器学习还没有那么广泛的应用

  • georgesupe...
    2018-12-03
    4
    黄老师两本大数据书都买过,有幸等到黄老师开专栏讲数学

    作者回复: 感谢一贯的支持,之前的书籍涵盖的面比较广,这次专栏我会侧重数学部分,争取讲出不一样的精彩

  • Roseboy
    2019-02-01
    3
    学数学学了17年,发现仅仅是学了广阔数学世界的冰山一角,可能都不能算是入门。曾经看过一张图,说曲线曲面积分,级数,正交变换,多维随机变量…只是学习数学的过程中刚刚加速而已。而我却觉得乏力了。这可能是长期惧怕思考,惧怕总结归纳抽象,让自己觉得没有能力去认识数学世界。但直到我看见了程序员的数学这个专题,我重新认识到了不能为了写代码而写代码,编程是为了解决问题,说得更远点,是为了探索未知,改变世界。可能我一辈子也没法成为顶级程序员,可我现在就想开始改变了。加油!
    展开
  • 广洲
    2018-12-25
    3
    我是一名电工,今年24岁。今年底下定决心要转行程序员。2019年最大的梦想就是可以找一份程序员的工作。突破现在自己的状态,最近在学习Python,零基础入门的那种,学习一门新的课程很吃力。这个专栏是我订阅的第一个极客专栏,希望我可以学有所成,祝福我吧。
    展开

    作者回复: 后面会写一些python语言相关的内容 对你一定有所帮助

  • 寻水的🐟
    2018-12-11
    3
    希望老师多讲 学习人工智能的数学知识
    展开

    作者回复: 人工智能的范畴比较大,我将的内容会涉及一些基础相关的

  • 蔡雪钧
    2018-12-10
    3
    也是想入坑机器学习准备开始学数学,无奈时间太零碎了,而且很多知识忘了,不知道从何开始
  • qinggeouy...
    2018-12-08
    3
    「编程的世界远不止条件和循环语句 程序员的世界应当是创造的舞台」