数学对于计算机的重要性
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
数学对于计算机的重要性
可能有很多朋友在网上看过公司早几年的招聘广告,它的第一题如下了:{ },中出现的连续的第一个个数字组成的质数。据说当时这个试题在美国很多地铁的出站口都有大
幅广告,只要正确解答了这道题,在浏览器的地址栏中输入这个答案,就可以进入下一轮
的测试,整个测试过程如同一个数学迷宫,直到你成为的一员。
又如某年的一道面试题目:巴拿赫病故于年月日。他出生年份是他在世某年年龄平方减
去这年年龄的差,问:他是哪年出生的?这道看似很简单的数学问题,你能不能很快地解答呢?
下面则是一道世界第一大软件公司微软的招聘测试题:中间只隔一个数字的两个素数被
称为素数对,比如和,和,证明素数对之间的数字总能被整除(假设这两个素数都大于),现在证明没有由三个素数组成的素数对。这样的试题还有很多很多,这些题目乍初看上去都
是一些数学问题。但是世界上一些著名的公司都把它们用于招聘测试,可见它们对新员工
数学基础的重视。数学试题与应用程序试题是许多大型软件公司面试中指向性最明显的一类
试题,这些试题就是考察应聘者的数学能力与计算机能力。
某咨询公司的一名高级顾问曾说:微软是一家电脑软件公司,当然要求其员工有一定的
计算机和数学能力,面试中自然就会考察这类能力。微软的面试题目就考察了应聘人员对
基础知识的掌握程度、对基础知识的应用能力,甚至暗含了对计算机基本原理的考察。所以,这样的面试题目的确很“毒辣”,足以筛选到合适的人。
四川大学数学学院的曹广福教授曾说过:“一个大学生将来的作为与他的数学修养有很大的关系”。大学计算机专业学生都有感触,计算机专业课程中最难的几门课程莫过于离散
数学、编译原理、数据结构,当然像组合数学、密码学、计算机图形学等课程也令许多人
学起来相当吃力,很多自认为数据库学得很好的学生在范式、函数依赖、传递依赖等数学性比较强的概念面前感到力不从心,这些都是因为数学基础或者说数学知识的缺乏所造成的。
数学是计算机的基础,这也是为什么考计算机专业研究生数学都采用最难试题(数学一)的原因,当然这也能促使一些新的交叉学科如数学与应用软件、信息与计算科学专业等飞
速发展。许多天才程序员本身就是数学尖子,众所周知,的数学成绩一直都很棒,他甚至曾经期望当一名数学教授,他的母校——湖滨中学的数学系主任弗雷福?赖特曾这样谈起过他
的学生:“他能用一种最简单的方法来解决某个代数或计算机问题,他可以用数学的方法来
找到一条处理问题的捷径,我教了这么多年的书,没见过像他这样天分的数学奇才。他甚至可以和我工作过多年的那些优秀数学家媲美。当然,比尔也各方面表现得都很优秀,不仅仅是数学,他的知识面非常广泛,数学仅是他众多特长之一”。影响一代中国程序人的金山软
件股份有限公司董事长求伯君当年高考数学成绩满分进一步说明了问题。很多数学基础很好的人,一旦熟悉了某种计算机语言,他可以很快地理解一些算法的精髓,使之能够运用自如,并可能写出时间与空间复杂度都有明显改善的算法。
程序设计当中解决的相当一部分问题都会涉及各种各样的科学计算,这需要程序员具
有什么样的基础呢?实际问题转换为程序,要经过一个对问题抽象的过程,建立起完善的数
学模型,只有这样,我们才能建立一个设计良好的程序。从中我们不难看出数学在程序设
计领域的重要性。算法与计算理论是计算机程序设计领域的灵魂所在,是发挥程序设计者严谨,敏锐思维的有效工具,任何的程序设计语言都试图将之发挥得淋漓尽致。
程序员需要一定的数学修养,不但是编程本身的需要,同时也是培养逻辑思维以及严谨的编程作风的需要。数学可以锻炼我们的思维能力,可以帮助我们解决现实中的问题。可以帮助我们更高的学习哲学。为什么经常有人对一些科学计算程序一筹莫展,他可以读懂
每一行代码,但是却无法预测程序的预测结果,甚至对程序的结构与功能也一知半解,给他一个稍微复杂点的数学公式,他可能就不知道怎么把它变成计算机程序。很多程序员还停留
在做做简单的,设计一下,写写简单的或用语句实现查询等基础的编程工作上,对于一些需要用到数学知识的编程工作就避而远之,当然实现一个累加程序或者一个税率的换算程序还
是很容易的,因为它们并不需要什么高深的数学知识。
一名有过多年开发经验的老程序员曾说过:“所有程序的本质就是逻辑。技术你已经较好地掌握了,但只有完成逻辑能力的提高,你才能成为一名职业程序员。打一个比方吧,你
会十八班武艺,刀枪棍棒都很精通,但就是力气不够,所以永远都上不了战场,这个力气对
程序员而言就是逻辑能力(其本质是一个人的数学修养,注意,不是数学知识)。”
程序员的数学修养不是一朝一夕就可以培养的。数学修养与数学知识不一样,修养需要一个长期的过程,而知识的学习可能只是一段短暂的时间。下面是一些我个人对于程序员怎
么样提高与培养自己的数学修养的基本看法。
首先,应该意识到数学修养的重要性。作为一个优秀的程序员,一定的数学修养是十分
重要也是必要的。数学是自然科学的基础,计算机科学实际上是数学的一个分支。计算机理论其实是很多数学知识的融合,软件工程需要图论,密码学需要数论,软件测试需要组合数学,计算机程序的编制更需要很多的数学知识,如集合论、排队论、离散数学、统计学,当然还有微积分。计算机科学一个最大的特征是信息与知识更新速度很快,随着数学知识与计算机理论的进一步结合,数据挖掘、模式识别、神经网络等分支科学得到了迅速发展,
控制论、模糊数学、耗散理论、分形科学都促进了计算机软件理论、信息管理技术的发展。
严格的说,一个数学基础不扎实的程序不能算一个合格的程序员,很多介绍计算机算法的
书籍本身也就是数学知识的应用与计算机实现手册。
其次,自身数学知识的积累,培养自己的空间思维能力和逻辑判断能力。数学是一门
分支众多的学科,我们无法在短暂的一生中学会所有的数学知识,像泛函理论、混沌理论以及一些非线性数学问题不是三五几天就可以掌握的。数学修养的培养并不在与数学知识的
多少,但要求程序员有良好的数学学习能力,能够很快地把一些数学知识和自己正在解决的问题联系起来,很多理学大师虽然不是数学出身,但是他们对数学有很强的理解能力和敏
锐的观察力,于是一系列新的学科诞生了,如计算化学、计算生物学、生物信息学、化学
信息学、计算物理学,计算材料学等等。数学是自然学科的基础,计算机技术作为理论与实
践的结合,更需要把数学的一些精髓融入其中。从计算机的诞生来看它就是在数学的基础
上产生的,最简单的、进制就是一个古老的数学问题。程序设计作为一项创造性很强的职业,
它需要程序员有一定的数学修养,也具有一定的数学知识的积累,可以更好地把一些数学
原理与思想应用于实际的编程工作中去。学无止境,不断的学习是提高修养的必经之路。第三,多在实践中运用数学。有些高等学校开设了一门这样的课程——《数学建模》。我在大学时期也曾学过,这是一门内容很丰富的课程。它把很多相关的学科与数学都联系在一起,通过很多数学模型来解决实际的生产生活问题,很多问题的解决需要计算机程序来实现。我在大学和研究生阶段都参加过数学建模竞赛,获得了不少的经验,同时也进一步提高了自
己的数学修养。实际上,现在的程序设计从某些角度来看就是一个数学建模的过程,模型的好坏关系到系统的成败,现在数学建模的思想已经用于计算机的许多相关学科中,不单只
是计算机程序设计与算法分析。应该知道,数学是一门需要在实践中展示其魅力的科学,而计算机程序也是为帮助解决实际问题而编制的,因此,应该尽量使它们结合起来,在这个方面,计算机密码学是我认为运用数学知识最深最广泛的,每一个好的加密算法后面都有一个
数学理论的支持,如椭圆曲线、背包问题、素数理论等。作为一名优秀的程序员,应该在
实际工作中根据需要灵活运用数学知识,培养一定的数学建模能力,善于归纳总结,慢慢使自己的数学知识更加全面,数学修养得到进一步提高。
第四,程序员培养制度与教学的改革。许多程序员培养体制存在很多缺陷,一开始就要求学员能够快速精通某种语言,以语言为中心,对算法的核心思想与相关的数学知识都一