《程序员的数学》阅读总结
数学学了18年,有时候也不知道数学有什么用。代码写了10年,也觉得用到数学的时候少。只有在最近逐步接触了机器学习和数据挖掘相关的知识,才渐渐明白了数学的重要性。翻出大学的《高等数学》、《线性代数》和《概率统计》,看着满本书的公式和习题,着实需要很大的毅力才能坚持把这些书在看一遍。指导发现了这本《程序员的数学》。这个月看的是第一部,后面还有《程序员的数学2:概率统计》和《程序员的数学3:线性代数》。
这本书面向程序员介绍了编程中常用的数学知识,主要是培养程序员的数学思维。讲解了二进制计数法、逻辑、余数、排列组合、递归、指数爆炸、不可解问题等许多与编程密切相关的数学方法,分析了哥尼斯堡七桥问题、少年高斯求和方法、汉诺塔、斐波那契数列等经典问题和算法。书有着相当不错的易读性和趣味性,虽然讲的都是简单问题,但是讲解的方式和方法还是比较有意思的。
数学不算是编程的基础,但绝对是机器学习和数据挖掘的基础。程序员不需要太多的数学基础。真正需要数学的都是在具体领域里。跟编程结合最紧的,是具体数学,主要是离散数学和组合数学的内容,这一类数学跟程序员的思维密切相关,算跟工作结合比较紧密的。更多的数学则根所在的领域有关:做图形学,以线性代数、几何为基础;而做数据挖掘或者机器学习的,更涉及统计学习理论和最优化的部分。
也许数学对于一个不错的程序员来说,没那么重要,但是要再往上走一步,有一点点技术上的创新,就都是数学的事儿了。有人说过“如果你只想当个Good Programmer,那么数学不重要。但是如果你想当个Great Programmer,那么数学很重要。”
机器学习这个方向,相关资料都大量依赖于线性代数和概率论,以及一点点微积分。所以,如果希望做点有追求的技术工作的话,需要开始花点时间学习数学了。其实万事开头难,如果真的按下心来,看上一个小时,这么坚持个一月,其实就会发现,这没啥难的,就当学门新的编程语言吧。