《程序员的呐喊》读书笔记——学习数学的正确方法

本文源于《程序员的呐喊》,作者:Steve Yegge。其中对于程序员学数学的观点令我有所启发,故在此记录当时所想。

并附上pdf电子档下载链接:https://pan.baidu.com/s/1UGdZ4dUc5IPVXMMzsCVWXA 密码:kjs4


对数学的看法

事实是:程序员不懂数学,依旧能生活得好好的。

程序员都觉得自己不需要数学:因为学校教的数学绝大多数都在工作中用不上。

而作者却发现了一些令人惊奇的事:

  1. **懂编程的人学数学会更容易。**如果你是个还算不错的程序员的话,数学简直太好学了。
  2. **学校里教数学的方法都是错的。**错得离谱。只要方法得当,自学的速度会快得多,学会以后也不容易忘。懂数学对程序员来说是如虎添翼。
  3. 哪怕只了解一点点相关领域里的数学,就能让你写出非常有趣的程序来,反之,这些程序会很难写。换句话说,数学知识是可以在空闲时间里慢慢累积的。
  4. 就算是最伟大的数学家也不可能通晓数学。这是一个不断发展的学科,人们总是会发明新的形式化方法来解决问题。和编程一样,任何数学问题总是有多个解的。你大可挑选自己喜欢的方式去解。
  5. 数学······呃,请不要跟别人说这是我说的,不然就再也不会有人找我出去玩了。但是数学······我还是悄悄说吧:数学其实还是很好玩的。

以上是作者原话。



对程序员有用的数学

小学和中学里教的绝大部分数学都是连续的,也就是实数上的数学。而对计算机科学家来说,95%有趣的数学都是离散的,也就是整数上的数学。

程序员所要解决的数学问题一般都是离散数学,其中最有用的课程应该就是组合数学和概率论

除了概率论和离散数学,其他数学分支也是有助于程序员的。可惜除非你去辅修数学,否则学校是不会教你的。它们包含了:

  1. 统计。我的离散数学书里讲到了一点。但是统计是一门完整的学科,而且是非常重要的学科,重要到根本不需要额外介绍。
  2. 代数和线性代数(比如矩阵)。线性代数应该紧跟在代数后面教。它不是很难,而且在很多领域都非常非常有用,比如机器学习。
  3. 数理逻辑。有一本牛逼的书,作者:斯蒂芬·克莱尼。
  4. 信息论和柯氏复杂度。信息论(粗略地讲)主要是关于数据压缩的,而柯氏复杂度(同样粗略地讲)则是关于算法的复杂度(比如最小空间是多少,需要多长时间,程序或者数据结构有多优雅等)的。它们都是好玩,有趣,实用的学科。

当然还有其他的分支,而且有些学科互有重叠。但重点在于:对你有用的数学和学校觉得有用的数学是非常不同的。

几何、三角函数、微分、积分、微积分、圆锥截面、微分方程,以及多维和多元的对应版本——这些都是很重要的应用。只不过没必要全部记在脑子里,花上多年时间去反复证明和做练习似乎没什么意义,程序员通常不需要这些东西。知道大致概念和技巧就可以了,细节方面等到需要的时候再查也来得及。



学习数学的正确方法

广度优先才是学习数学的正确方法,深度优先是不行的。先打开眼界,了解各种名称,搞清楚什么是什么。

忘记那些算法和证明(绝大多数情况下),去了解那些技术的方方面面:名称,作用,大概怎么计算的,历史有多悠久,(有时候还可以了解下)是谁发明的,局限性在哪,相互之间的关联是什么。这就好像是数学里的素质教育。

因为运用数学的第一步是界定问题。能快速定位问题所涉及的知识点才是最能压缩解题时间的要点。

具体方法可以是:

每天15~30分钟浏览各种关于数学分支的文章。自行挑选自己觉得有趣的文章来读(比如:弦理论,傅里叶变换,张量,任何让你觉得很牛的东西)。遇到不懂的,跳过去读,一直读,读到你觉得乏了累了。


本书的精髓内容远不止于此,可惜目前所学不多,无法理解作者所说的诸多概念,唯此数学学习之道给人醍醐灌顶之感,希望本文能给自己还有其他对于数学迷茫的伙伴提供一点帮助,也希望自己有一天能通读全书,并写出新的感悟。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值