程序员的数学基础课
黄申
LinkedIn资深数据科学家
立即订阅
23478 人已学习
课程目录
已完结 57 讲
0/4登录后,你可以任选4讲全文学习。
开篇词 (1讲)
开篇词 | 作为程序员,为什么你应该学好数学?
免费
导读 (1讲)
导读:程序员应该怎么学数学?
基础思想篇 (18讲)
01 | 二进制:不了解计算机的源头,你学什么编程
02 | 余数:原来取余操作本身就是个哈希函数
03 | 迭代法:不用编程语言的自带函数,你会如何计算平方根?
04 | 数学归纳法:如何用数学归纳提升代码的运行效率?
05 | 递归(上):泛化数学归纳,如何将复杂问题简单化?
06 | 递归(下):分而治之,从归并排序到MapReduce
07 | 排列:如何让计算机学会“田忌赛马”?
08 | 组合:如何让计算机安排世界杯的赛程?
09 | 动态规划(上):如何实现基于编辑距离的查询推荐?
10 | 动态规划(下):如何求得状态转移方程并进行编程实现?
11 | 树的深度优先搜索(上):如何才能高效率地查字典?
12 | 树的深度优先搜索(下):如何才能高效率地查字典?
13 | 树的广度优先搜索(上):人际关系的六度理论是真的吗?
14 | 树的广度优先搜索(下):为什么双向广度优先搜索的效率更高?
15 | 从树到图:如何让计算机学会看地图?
16 | 时间和空间复杂度(上):优化性能是否只是“纸上谈兵”?
17 | 时间和空间复杂度(下):如何使用六个法则进行复杂度分析?
18 | 总结课:数据结构、编程语句和基础算法体现了哪些数学思想?
概率统计篇 (14讲)
19 | 概率和统计:编程为什么需要概率和统计?
20 | 概率基础(上):一篇文章帮你理解随机变量、概率分布和期望值
21 | 概率基础(下):联合概率、条件概率和贝叶斯法则,这些概率公式究竟能做什么?
22 | 朴素贝叶斯:如何让计算机学会自动分类?
23 | 文本分类:如何区分特定类型的新闻?
24 | 语言模型:如何使用链式法则和马尔科夫假设简化概率模型?
25 | 马尔科夫模型:从PageRank到语音识别,背后是什么模型在支撑?
26 | 信息熵:如何通过几个问题,测出你对应的武侠人物?
27 | 决策树:信息增益、增益比率和基尼指数的运用
28 | 熵、信息增益和卡方:如何寻找关键特征?
29 | 归一化和标准化:各种特征如何综合才是最合理的?
30 | 统计意义(上):如何通过显著性检验,判断你的A/B测试结果是不是巧合?
31 | 统计意义(下):如何通过显著性检验,判断你的A/B测试结果是不是巧合?
32 | 概率统计篇答疑和总结:为什么会有欠拟合和过拟合?
线性代数篇 (13讲)
33 | 线性代数:线性代数到底都讲了些什么?
34 | 向量空间模型:如何让计算机理解现实事物之间的关系?
35 | 文本检索:如何让计算机处理自然语言?
36 | 文本聚类:如何过滤冗余的新闻?
37 | 矩阵(上):如何使用矩阵操作进行PageRank计算?
38 | 矩阵(下):如何使用矩阵操作进行协同过滤推荐?
39 | 线性回归(上):如何使用高斯消元求解线性方程组?
40 | 线性回归(中):如何使用最小二乘法进行直线拟合?
41 | 线性回归(下):如何使用最小二乘法进行效果验证?
42 | PCA主成分分析(上):如何利用协方差矩阵来降维?
43 | PCA主成分分析(下):为什么要计算协方差矩阵的特征值和特征向量?
44 | 奇异值分解:如何挖掘潜在的语义关系?
45 | 线性代数篇答疑和总结:矩阵乘法的几何意义是什么?
综合应用篇 (6讲)
46 | 缓存系统:如何通过哈希表和队列实现高效访问?
47 | 搜索引擎(上):如何通过倒排索引和向量空间模型,打造一个简单的搜索引擎?
48 | 搜索引擎(下):如何通过查询的分类,让电商平台的搜索结果更相关?
49 | 推荐系统(上):如何实现基于相似度的协同过滤?
50 | 推荐系统(下):如何通过SVD分析用户和物品的矩阵?
51 | 综合应用篇答疑和总结:如何进行个性化用户画像的设计?
加餐 (3讲)
数学专栏课外加餐(一) | 我们为什么需要反码和补码?
数学专栏课外加餐(二) | 位操作的三个应用实例
数学专栏课外加餐(三):程序员需要读哪些数学书?
结束语 (1讲)
结束语 | 从数学到编程,本身就是一个很长的链条
程序员的数学基础课
登录|注册

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

黄申 2018-12-03
00:00
07:42
讲述:黄申 大小:7.06M
你好,我是黄申,目前在 LinkedIn 从事数据科学的工作,主要负责全球领英的搜索引擎优化,算法和数据架构的搭建。
2006 年,我博士毕业于上海交通大学计算机科学与工程专业,在接下来十余年时间里,我曾经在微软亚洲研究院、IBM 研究院、eBay 中国研发中心做机器学习方向的研究工作,也负责过大润发飞牛网和 1 号店这两家互联网公司的核心搜索和推荐项目,还写过一本书《大数据架构商业之路》。
对于数学和计算机编程的联系,我之前也没有思考过。直到有一次,在硅谷的一个技术交流 Meetup 上,我听到一位嘉宾分享说:“如果你只想当一个普通的程序员,那么数学对你来说,并不重要。但是如果你想做一个顶级程序员,梦想着改变世界,那么数学对你来说就很重要了。”
听完这句话,我马上感受到强烈的共鸣,因为就我自己的工作经历而言,越是往高处走,就越能发现数学的重要性。我知道,数学对于我们每一个程序员来说,都是最熟悉的陌生人。你从小就开始学习数学,中考、高考、研究生考试还要考数学,所以那些熟悉的数学定理、数学公式,陪伴你至少也有 10 年时间了。
但是,自从做了程序员,你可能早就把数学抛在了脑后,甚至觉得曾经为了应试而“硬学”的数学应该是彻底没什么用了,终于可以和他们 say goodbye 了。毕竟作为一个基础学科,数学肯定是没操作系统、数据结构、计算机网络这样的课程看起来“实用”。
起码我之前就是这么认为的。大学的时候,我非常喜欢编程,甚至还翘过数学课,专门在图书馆看计算机类的图书。那会儿我觉得,数学这东西,完全就是应试教育,我更喜欢计算机这样操作类的课程,不喜欢待在教室里听数学老师讲那些枯燥的理论和定理。
再到后来,我读了硕士,开始接触机器学习,猛然间才发现,机器学习表面上是“写程序”,但实际上剥去外表,本质上就是在研究数学。从那会儿开始,我对数学的认知也才逐步客观和理性起来。
再到现在,我参加了工作,写了这么多年代码,我想说,数学学得好不好,将会直接决定一个程序员有没有发展潜力。因为往大了说,数学它其实是一种思维模式,考验的是一个人归纳、总结和抽象的能力。把这个能力放到程序员的世界里,其实就是解决问题的能力。
往小了说,不管是数据结构与算法还是程序设计,其实底层很多原理或者思路都是源自于数学,所以很多大公司,在招人时,也会优先考虑数学专业的毕业生,这些人他们数学基础很好,学起编程也更容易上手。
所以我觉得,如果编程语言是血肉,数学的思想和知识就是灵魂。它可以帮助你选择合适的数据结构和算法、提升系统效率、并且赋予机器智慧。尤其是在大数据和智能化的时代,更是如此。
举个例子,比如我们小学就学到的余数,其实在编程的世界里也有很多应用。你经常用到的分页功能,根据记录的总条数和每页展示的条数,最后来计算整体的页数,这里面就会有余数的思想。再难一点,奇偶校验、循环冗余检验、散列函数、密码学等等都有余数相关的知识。
遇到这些问题的时候,你能说你不懂余数吗?我想你肯定懂,只是很多时候没有想到可以用余数的思想来解决相关问题罢了。那为什么没有想到呢?我认为,本质原因还是你没有数学思维,还是你数学的基础不够好。
所以,在这个专栏里,我想和你重点聊聊数学。当然,我知道数学博大精深,所以在一开始做专栏的时候,我就和极客时间团队一起定义好了专栏的边界,用一句话来说就是“只做程序员需要学的数学知识”。
首先,我梳理了编程中最常用的数学概念,由浅入深剖析它们的本质,希望能够帮你彻底掌握这些最基础、也最核心的数学知识。这其中包括那些你曾经熟悉的数学名词,比如数学归纳法、迭代法、递归、排列、组合等等。
其次,我把线性代数和概率统计中的抽象概念、公式、定理都由内而外地讲了出来,并分析它们在编程中的应用案例,帮助你提升编程的高阶能力。对于这些内容,我会从基本的概念入手,结合生活和工作中的实际案例,让你更轻松地理解概念的含义。
比如,对于朴素贝叶斯方法,我会从基本的随机现象、随机变量和概率分布等着手。随后,我会逐步深入,结合这些数学知识在编程算法中的应用进行展开。比方说,贝叶斯定理是什么,随机变量之间的独立性是什么,这些是如何构成朴素贝叶斯方法的,而最终朴素贝叶斯又是如何被运用在机器学习的分类算法之中的。
这样的讲解路线,既能让你巩固基础的概念和知识,同时也能让你明白这些基础性的内容,对计算机编程和算法究竟意味着什么。
不过话又说回来,我认为数学理论和编程实践的结合其实是“决裂”的,所以学习数学的时候,你不能太功利,觉得今天学完明天就能用得着,我觉得这个学习思路可以用在其他课程上,但放在数学里绝对不合适。
因为数学知识总是比较抽象,特别是概率统计和线性代数中的概率、数据分布、矩阵、向量等概念。它们真的很不好理解,也需要我们花时间琢磨,但是对于高级一点的程序设计而言,特别是和数据相关的算法,这些概念就非常重要了,这可都是先人总结出来的经验。
如果你能够将这些基本概念和核心理论都搞懂、搞透,那么面对系统框架设计、性能优化、准确率提升这些难题的时候,你就能从更高的角度出发去解决问题,而不只是站在一个“熟练工”的视角,去增删改查。
最后,我希望数学能够成为你的一种基础能力,希望这个专栏能帮你用数学思维来分析问题和解决问题。数学思想是启发我们思维的中枢,如果你对数学有更好的理解,遇到问题的时候就能追本溯源,快、准、稳地找到解决方案。
伽利略曾经说过,“宇宙这本书是用数学语言写成的”,数学是人类科学进步的重要基础,所以,你我都要怀着敬畏的心态去学习、思考数学。同样,我还要求我自己的孩子一定要学好数学,因为我确信,这对于他未来的发展来说,至关重要。
编程的世界远不止条件和循环语句,程序员的人生应当是创造的舞台。我希望,通过这个专栏的学习,能够让你切实感受到数学这个古老学科的活力和魅力。
好了,说了这么多,相信你已经下定决心和我一起攻克数学。重新开始就要告别过去,你可以在留言区做个“数学学习复盘”,在之前的学习过程中,你的学习状况是怎样的?你遇到的最大困难是什么?现在,你最希望学到的是什么?
Now,你说,我听!
取消
完成
0/1000字
划线
笔记
复制
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
该试读文章来自付费专栏《程序员的数学基础课》,如需阅读全部文章,
请订阅文章所属专栏。
立即订阅
登录 后留言

精选留言(220)

  • 胡鹏 置顶
    已经迫不及待了 , 希望快快更新

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

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

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

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

    希望大神能带我入门!

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

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

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

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

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

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

    2018-12-03
    10
  • 广洲
    我是一名电工,今年24岁。今年底下定决心要转行程序员。2019年最大的梦想就是可以找一份程序员的工作。突破现在自己的状态,最近在学习Python,零基础入门的那种,学习一门新的课程很吃力。这个专栏是我订阅的第一个极客专栏,希望我可以学有所成,祝福我吧。

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

    2018-12-25
    7
  • 余衫酉
    我是艺术系程序员,大学没有接触过数学。最近看机器学习的公式完全不明白。
    2018-12-03
    6
  • 希望老师能帮助我们提升数学公式的推导能力,引导普通程序员走进机器学习的大门!我发现大多数学机器学习者都是卡在公式看不懂,无法推导上,希望老师能帮我们答疑解惑!
    2018-12-03
    6
  • Roseboy
    学数学学了17年,发现仅仅是学了广阔数学世界的冰山一角,可能都不能算是入门。曾经看过一张图,说曲线曲面积分,级数,正交变换,多维随机变量…只是学习数学的过程中刚刚加速而已。而我却觉得乏力了。这可能是长期惧怕思考,惧怕总结归纳抽象,让自己觉得没有能力去认识数学世界。但直到我看见了程序员的数学这个专题,我重新认识到了不能为了写代码而写代码,编程是为了解决问题,说得更远点,是为了探索未知,改变世界。可能我一辈子也没法成为顶级程序员,可我现在就想开始改变了。加油!
    2019-02-01
    5
  • panda
    老师 我毕业很多年了,数学忘的都差不多了(在学校里面也没感觉学得有多好)有点怕跟不上,有书博客之类补充阅读推荐吗

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

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

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

    2018-12-06
    5
  • 三木子
    吴军老师将 1+1=2 作为人类文明的第一个公式!

    作者回复: 很早就拜读了吴军老师的书,写得很赞,也给我了不少灵感

    2018-12-05
    5
  • Lisa.github.io
    高考数学刷的少,结果很差。考研数学知其然不知其所以然,好无头绪下手,结果惨败。这次刚参加工作不久,和数据又有很大的交道,希望不要重蹈覆辙,很高兴遇见极客,遇见您,还不晚

    作者回复: 相信这个专栏会对你有所帮助!

    2018-12-05
    5
  • TomFish
    目前水平约等于高中水平
    2018-12-03
    5
  • georgesuper
    黄老师两本大数据书都买过,有幸等到黄老师开专栏讲数学

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

    2018-12-03
    5
  • 有数学基础要求吗 😞...比较担心

    作者回复: 不要求太多的数学基础,我尽量通过浅显易懂的例子,把内容说清楚

    2018-12-04
    4
收起评论
99+
99+
返回
顶部