0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

程序员为什么要学数学 又如何学数学

工程师人生 来源:wv 作者:简书网 2019-10-25 16:44 次阅读

在开篇,我详细讲了程序员为什么需要学数学。那么,怎样的学习方法才是行之有效的呢?我想你现在心里还没有一个固定的答案,而我不想一味地去讲我自己的一家之言,毕竟没有什么学习方法是最好的。

你能做的是要多看,去找适合自己的。而我能做的,就是尽量给你更多的参考,让你可以自己来选择。所以,我邀请了几位朋友,让他们来谈一谈,自己学习数学的一些心得体会,希望对你有所启发。

程序员是否需要学好数学?原本学数学分析、概率论、线性代数的时候,我也没想到数学和写程序有啥关系,但是随着研究的开源软件越来越多,我发现很多技术深入下去,本质就是数学。

程序员应该怎么学习数学呢?我不建议你将大学的数学书拿出来啃一遍,一来耗费大量时间,二来和实际应用结合不起来,往往该看的忽略了,不该看的费了半天劲用不上,过一阵又忘了。

我们了解一个新技术有三个阶段,第一阶段是,怎么使用;第二阶段是,如何实现,原理是什么;第三阶段是,为什么这样实现。学数学和学一门新技术一样,也有这样三个阶段,先用起来,了解原理,然后了解为什么。

用一句话来说,我们不能为了数学而学数学,学数学要和具体的应用结合在一起。

随着过去几年深度学习成为程序员界的显学,不少程序员开始回头复习微积分、概率论和线性代数这样的基础数学课,乃至开始学习最优化、博弈论这样的应用数学课。我自己则是因为从 2010 年一头扎入了计算广告的大坑之后,重新开始学习数学。

可以说,这次重新学习数学,为我自己推开了程序世界中另一扇门,使得我在埋头具体写代码之外,有机会重新从另一个角度,去认识和理解“程序”和“问题的解决方案”这两件事情。

我为什么要学点数学?

投入时间学习数学,于我来说主要是两个原因,一来,数学在工作中用得上;二来,学点数学很多时候是个有趣的事。

譬如说,过去几年火起来的深度学习,以及之前没那么火,但是实际上早早就在搜索、广告这些领域,应用的机器学习推荐算法。这里面其实就是结合了微积分、线性代数、概率论之后的最优化问题。

事实上,大部分应用领域的核心解决方案,都是把应用领域的问题,形式化为一个个数学问题。在找到数学问题的“解法”之后,用写程序的方式翻译成实际应用的“算法”。而能够应用“数学”的方式来解决问题,是从一个只能套用现成方案的“码农”,向能够将新问题形式化、并找出创新解决方案的“研发工程师”迈出的第一步。

很多问题当你知道如何用数学来解决的时候,常常会有醍醐灌顶的感觉。譬如当我第一次搞明白,广告中的竞价问题,居然能够变成一个博弈论中“寻找上策均衡”的问题,并且能够通过简简单单的公式表示出来的时候,我是很有满足感的。

此外,一旦熟悉了机器学习中用到的数学知识,很多想要解决的系统问题,都能通过定义更好的数学优化目标,变成一个能够找到最优解的程序算法,最后通过写个程序,翻译成数学问题来解决,这个过程带给我巨大的身心愉悦。

我是如何学数学的?

数学整个领域很大,如果想要学点什么,我建议从工作相关的领域开始,先广度,再深度。

从工作相关的领域开始,是让自己一是能有实际用得上学到的知识的机会,二是日常工作中容易耳濡目染,相当于常常在复习。而先有广度,是让自己在心中有一个问题到解决方法的“地图”,遇到具体的问题能够对得上,容易获得正反馈;然后再有深度,具体去对一个特定的主题学习应用。

当开始深入学一个特定问题的时候,最好的方式是,追一门在线课程,譬如 Coursera、TEDx,或者在极客时间上找一门课程来学习。

这是因为,在线课程有明确的节奏,通常还会提供作业和测验。通过作业和测验,让自己对自己的学习有一个联系和反馈的过程。即使实践中没有足够的应用,过一段时间有些知识没有那么熟悉了,但是也容易建立自己很快可以“捡”回来的信心,降低“复习”的启动成本。跟随在线课程的节奏,可以有效避免“三天打渔两天晒网”的恶习,让学习有始有终。

最后,给你介绍一个有程序员特色的学习方法,针对学习的内容写一点程序。把正在学习的问题的解法,写一个算法实现出来。这是一个非常有效的练习方式。譬如学习线性代数,理解仿射,反复读书的效率对我来说,就不如找来 Coding The Matrix,通过写程序,让学习、理解变得更深入。

在数学的学习中,首要的问题是明确需求。作为非数学专业出身的“外行”,我们使用数学的目的不是顶天,而是立地;不是上下求索艰深的理论问题,而是将生活中的具体问题抽象化,进而加以解决。

因此,对于我们这些票友来说,学习数学的基础在于经验而非哲学,比较实际的思路是秉持功利主义的原则,用多少学多少。掌握基本的线性代数与矩阵论、概率论与数理统计知识足以应付日常的使用,盲目地好高骛远通常有害无益。理论化和公理化这些比较深邃的尝试固然让人着迷,但它们可能并没有肉眼可见的实用性,对于绝大部分计算机从业者恐怕过于阳春白雪。

其次,在学习时还要理解数学的本质。数学是工具而非问题,是手段而非目的。探索世界奥秘的学科是“格物穷理”的物理学,相形之下,数学更像是个任人打扮的小姑娘,它存在的意义就是通过合理的设计简化物理学的研究。

正因如此,在数学中存在着各种各样在现实中不可能出现的理想化模型(比如无穷小和极限的诞生),也存在着对同一个物理过程不同的建模方式(比如矩阵力学和波动力学)。充分理解数学的人造特质,可以在学习中少走很多无谓的弯路。

理解数学的工具属性就会自然而然地引出了数学学习中的另一个关键点,那就是工具设计的出发点,也就是所谓的数学思想与数学逻辑。

任何一个工具都不是平白无故地设计出来的,它必然要解决某个特定的问题,比如线性代数与矩阵论是对具体对象的抽象表示与运算,比如概率论和数理统计是对不确定性及其定型定量表示的建模。因此,在掌握每一种数学工具的微观技巧之前,理解它们的宏观目标是更加重要的。只有掌握了工具诞生的背景与目的,才有可能有效地使用它们。

在这里还要多说一句,数学绝不仅仅是算术,把主要精力放在计算上未免因小失大。在经典科幻《银河系漫游指南》中,超级计算机告诉人们,世界的终极答案是“42”——这更像是对数字主义者善意嘲讽的一个梗。但对算术的过度强调并不鲜见,在相当数量的现行数学教材中,讲解线性代数时开篇便给出行列式的计算方法,这种编排着实让人费解。

具体到数学每个子学科的学习方法上,相关的经验教训已然汗牛充栋,很多内容都无需在此赘言。但在我看来,学习时值得突出强调的一点是举一反三的能力。同一种工具及其背后的思想可以出现在不同的场景下,解决不同的问题,但是一旦深入到本质层面,就会发现它们实际上是相通的。如何透过现象看本质,将不同场景融会贯通,才是值得锻炼的高级能力。

同一个工具存在不同应用的例子不胜枚举:

凡此种种都说明,即使是不同的学科,使用的数学基础也有着千丝万缕的联系,将基本的数学概念和充分的想象力结合起来,触类旁通就变得轻而易举。

总结起来,我对数学学习的几点拙见是:把握数学的工具属性,学习具体方法时先溯因再求果,勤于思考解决相同问题的不同方法,与解决不同问题的相同方法之间的联系与区别。希望这几条建议能够在数学的学习中助你一臂之力。

好了,三位老师都分享完了自己的学习方法。其实他们有一个共同的观点,那就是数学要是“实用”的,这和我的想法如出一辙。

首先我们来看最常用的数据结构和编程语句,我想你对它们应该非常熟悉。在我眼里,这些基础的内容,同样富含了数学思维。例如,数组和链表就体现了迭代和递归的思想,判断语句就是使用了逻辑(布尔)代数。

对于架构在这些数据结构和编程语句之上的算法(为了将这些算法和机器学习的算法区分,我称其为通用算法),除了迭代和递归,也体现了排列、组合和动态规划等思想。

对于机器学习的算法而言,我们更需要理解概率统计和线性代数的核心思想,包括什么是概率、贝叶斯定理、数据的统计分布、向量、矩阵、线性方程等等。

整个专栏我基本上都是从数学的角度出发,逐步推进到这些知识在计算机中的应用。不过在绘制这张应用地图的时候,我特意反其道而行之,从计算机编程的角度出发,为你展示程序员应该如何看待编程中的数学知识。

我觉得在开始学习之前,这个地图会给你一个大体的认识,告诉你计算机领域常用的数学思想有哪些。这时,你也许会产生一些疑惑,同时你可以带着自己的思考和问题去逐篇学习。等你学完整个专栏之后,再回头来看看这个地图,应该会有更深的感触。我希望这种双向打通,能够进一步加强你的学习体验。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 程序员
    +关注

    关注

    4

    文章

    949

    浏览量

    29744
收藏 人收藏

    评论

    相关推荐

    AI编程工具会不会抢程序员饭碗

    AI编程工具可辅助编程,减少手动编码,提升效率,对程序员有积极影响也有挑战。程序员需深化技能、拓宽知识应对。长远看,AI与人类程序员将共生共荣。
    的头像 发表于 11-08 10:17 22次阅读

    什么是光子

      本文概述了光子,包括其基本原理、关键技术、应用和新兴趋势。 一、光子的基本原理 光子是一门研究光和其他形式辐射能的学科。它涉及使用光学元件、激光、光纤和电子光学仪器来产生、操纵和检测光。它
    的头像 发表于 10-29 06:21 83次阅读

    第五届长沙·中国1024程序员节开幕

    据官方媒体报道,10月24日;  第五届长沙·中国1024程序员节在湖南湘江新区开幕;本次中国1024程序员节以“智能应用新生态”为主题。设置有岳麓对话、技术英雄会、主题峰会及赛事、展览等活动,一场
    的头像 发表于 10-25 15:42 128次阅读

    程序员节视频创意大赛,用串口屏赢取千元大奖

    10月24日,程序员专属的节日里,我们盛大开启“程序员节视频创意大赛”特别活动!这不仅是一场视觉的盛宴,更是智慧与创意的璀璨碰撞。我们诚挚邀请每一位程序员及编程爱好者,拿起你的镜头,记录下那些平凡日子中的不凡瞬间,让编程的魅力与
    的头像 发表于 07-08 10:38 72次阅读
    <b class='flag-5'>程序员</b>节视频创意大赛,用串口屏赢取千元大奖

    程序员节视频创意盛宴,邀您共襄盛举!

    10月24日,程序员专属的节日里,我们盛大开启“程序员节视频创意大赛”特别活动!这不仅是一场视觉的盛宴,更是智慧与创意的璀璨碰撞。我们诚挚邀请每一位程序员及编程爱好者,拿起你的镜头,记录下那些平凡日子中的不凡瞬间,让编程的魅力与
    的头像 发表于 07-04 09:00 67次阅读
    <b class='flag-5'>程序员</b>节视频创意盛宴,邀您共襄盛举!

    神经网络在数学建模中的应用

    数学建模是一种利用数学方法和工具来描述和分析现实世界问题的过程。神经网络是一种模拟人脑神经元结构和功能的计算模型,可以用于解决各种复杂问题。在数学建模中,神经网络可以作为一种有效的工具,帮助我们更好
    的头像 发表于 07-02 11:29 776次阅读

    工业控制器的制作与数学的关系

    数学在工业控制器设计中的应用 工业控制器的设计涉及到多个方面,包括硬件设计、软件设计、系统架构设计等。在这些设计过程中,数学发挥着关键作用。 1.1 硬件设计中的数学应用 工业控制器的硬件设计主要
    的头像 发表于 06-16 14:34 466次阅读

    适者生存,程序员最终会流向哪……

    程序员没有永远的护城河!!就目前的互联网大环境来看,it行业已经是……
    的头像 发表于 03-11 17:11 364次阅读
    适者生存,<b class='flag-5'>程序员</b>最终会流向哪……

    瑞萨Flash程序员V3 发布说明

    电子发烧友网站提供《瑞萨Flash程序员V3 发布说明.pdf》资料免费下载
    发表于 02-19 09:37 1次下载
    瑞萨Flash<b class='flag-5'>程序员</b>V3 发布说明

    2024程序员的未来方向如何走?还看今朝

    这几年的IT行业想必大家已经感受到了,Android、Java、前端等等程序员都经历了大厂……
    的头像 发表于 02-02 09:45 755次阅读
    2024<b class='flag-5'>程序员</b>的未来方向如何走?还看今朝

    机器人运动中的非完整约束与运动模型推导

    机器人运动中的运动约束是指机器人在运动过程中受到的限制,包括位置、姿态、速度和加速度等因素。这些约束会对机器人的自由度产生影响,从而影响机器人的运动和控制。运动约束通常用数学模型
    的头像 发表于 01-18 16:45 1556次阅读
    机器人运动<b class='flag-5'>学</b>中的非完整约束与运动模型推导

    从零起步电子

    探索新的兴趣并了解你身边的多彩世界。电子是现代技术中迷人的一门学科。无论你在哪里,你都能看到电子设备和装置。从汽车到邮局的邮政编码阅读器,几乎每个机器都要用到一些电子控制。你可以不必了解大多数设备
    发表于 12-05 14:27

    程序员表白程序

    电子发烧友网站提供《程序员表白程序.rar》资料免费下载
    发表于 11-21 10:41 16次下载
    <b class='flag-5'>程序员</b>表白<b class='flag-5'>程序</b>

    嵌入式程序员应知道的几个基本问题

    电子发烧友网站提供《嵌入式程序员应知道的几个基本问题.pdf》资料免费下载
    发表于 11-20 11:21 0次下载
    嵌入式<b class='flag-5'>程序员</b>应知道的几个基本问题

    智能低代码洪流涌动程序员节,华为云 Astro 触发 1024 的乘法效应!

      从人工智能至量子计算,再到最新的云原生技术,越来越多的荣耀被程序员斩获。今年 1024 程序员节,华为云 Astro 向全民致敬:「低代码高产出 拓荒数字化版图——人人皆是程序员」,为全球工程师
    的头像 发表于 11-13 09:39 430次阅读
    智能低代码洪流涌动<b class='flag-5'>程序员</b>节,华为云 Astro 触发 1024 的乘法效应!