初金来
(哈尔滨师范大学文理学院计算机系2006级,黑龙江 哈尔滨 150000)
学好离散数学是学好计算机的基础,这是为什么考计算机专业的研究生,离散数学都采用最难试题的原由,当然这也能促使一些新的交叉学科--如数学与应用软件、信息与计算科学专业的飞速发展。程序设计中解决的相当一大部分问题都会涉及各式各样的科学计算,这都需要程序员具有怎么样的基础呢?大多数离散数学基础很好的人,如果熟悉了某一种计算机语言,他可以很快地理解某些算法的精湛,并且能够运用自如,不可能写出时间与空间复杂度都有明显改善的算法的实际问题都转换成为程序的问题,只有这样,我们才能建立一套设计完整的程序。要经历一个对问题抽象的行程,建立起完善的离散数学模型,其中我们不难看出数学学科在编程领域的不可取代的位置。计算理论与算法是计算机程序设计中的灵魂,是发挥程序设计员严谨,思维敏锐的最佳工具,所有的程序设计语言都试图把它发挥得淋漓尽致。
程序设计者都需要一定的数学修养,不仅仅是编程本身的需求,还是培养逻辑思维和严谨的编程习惯的需要。离散数学可以磨练我们的思维能力,可以帮助我们更高的学习哲学,可以帮助我们来解决现实中的实际问题。为何经常有人对一些科学计算程序一筹莫展,他可以读懂任意一行代码,可是却无法预测程序的结果,甚至对程序的功能和结构也一知半解,给他一个比较复杂点的离散数学公式,也许他就不知道怎么将其变成计算机程序。很多程序员还停留在做做简单的,写写简单的classes或用SQL语句实现查询等基础的编程工作,对于一些需要用到离散数学知识的编程的工作就远而避之,当然实现中一个累加程序或者一个税率的换算程序还不是程序员的离散数学修养一朝一夕就可以培养的。离散数学知识和离散数学修养不一样,修养则需要一个长期的过程,而知识的学习可能只要一段短暂的学习时间。下面是我个人对于程序员怎么样提高与培养自己的基本看法。
成为一个优秀的程序员,一定的数学修养是非常重要也是必要的。离散数学是自然科学的基础,计算机科学实实上是离散数学的一个分支。计算机理论其实是很多数学知识的融合,软件工程需要图论,密码学需要数论,软件测试需要组合离散数学,计算机程序的编制更需要很多的离散数学知识,如集合论、排队论、离散数学、统计学,当然还有微积分。计算机科学一个最大的特征是信息与知识更新速度很快,随着离散数学知识与计算机理论的进一步结合,数据挖掘、模式识别、神经网络等分支科学得到了迅速发展,控制论、模糊数学、耗散理论、分形科学都促进了计算机软件理论、信息管理技术的发展。严格的说,一个离散数学基础不扎实的程序不能算一个合格的程序员,很多介绍计算机算法的书籍本身也就是数学知识的应用与计算机实现手册。
数学是一门众多分支的学科,我们无法在短短的一生中学会所有的数学知识,像混沌理论,泛函理论以及一些非线性数学问题不是一天半天就可以掌握的。数学是自然科学的基础,计算机技术将理论与实践的结合,更需要把离散数学的精髓融入其中。数学修养的培养并不在于积累离散数学知识的多少,但是要求程序员具有良好的数学学习能力,能够迅速地把一些离散数学知识和自己正在思考的问题联系起来,很多理学教授虽然不是数学系出身,但是他们对离散数学都有灵活的理解能力与敏锐的观察力,于是一系列新的学科就这样产生了,例如计算化学、计算生物学、生物信息学、化学信息学、计算材料学,计算物理学等等。从计算机的产生来看它就是在离散数学的基础之上诞生的,最简单的1,0进制就是一个悠久的数学问题。程序设计成为一项创造力超强的职业,它不但需要程序员自身有一定的数学修养,还要具有一定的离散数学知识的积累,可以完美地把一些数学定理和思想联系于实际的计算机编程工作中来。学无止境,提高修养的必经之路是不断的学习。
有大部分高等学校开了一门这样的课程——《数学模型》。它把很多学科与离散数学都联系在一起,通过很多离散数学模型来解决实际生活中的生产与生活问题,很多问题的解决都需要计算机程序来实现。事实上,目前的程序设计从一些角度上来看就是个离散数学建模的过程,模型的好坏关系到系统的优劣,现在的离散数学建模的思想已经用于计算机的许多相互关联关学科中,不只是计算机程序设计与算法分析。应该知道,离散数学是一门需要在实践中展露其特有魅力的学科,而计算机程序的设计也是为帮助解决实际问题而编制的。因此,尽量使它们结合起来,为我们在这个方面为所欲为,计算机密码学是我认为运用离散数学知识最深最为广泛的,每一个完美的加密算法的背后都有一个数学理论的依据,例如椭圆曲线、背包问题、素数理论,函数等。作为一名优秀的程序员,必须在实际的工作中根据需要灵活运用数学原理,养成一定的离散数学建模能力,善于归纳与总结,慢慢使自己的数学知识更加全面,进而提高自身的编程能力。
许多程序员的培养体制都存在着很大的缺陷,一开始就要求学员能迅速精通某种语言,以语言为中心,对算法的核心思想与相关的数学知识都一笔带过,讲得很少,这造成很多程序员成为背程序的机器,这样很不利于程序员自身的快速成长,也不利于程序员创新的解决问题。通过离散数学用问题来做编程的热身运动,使学员在离散数学试题中激发自己的思维能力,记得有位专家曾经说过,经常做做离散数学题目会使自己变聪明,很长时间不去接触离散数学问题会使自己思维迟钝。很多初学程序者往往写程序时有时候会有思维中断,或者对一些稍难的程序就觉得无从下手,而我采用了一些课前解决离散数学小问题的方法来激起大家的学习兴趣,这些小问题不仅仅是脑筋急转弯,其中有不少是很有代表意义的离散数学思考题。我们可以通过实际的离散数学问题来培养学员的思维跳跃性和严谨性与完整性。为将来进行编程工作打下良好的基础。
离散数学作为计算机专业很重要的一门基础课,对于后续课程,如数据结构,数据库原理,编译等课程起到重要的影响,同时对培养学生编程过程中所需要的逻辑思维能力,抽象思维能力都起着非常重要的作用。
[1]左孝凌.离散数学的形成、发展及其在计算机科学中的作用与地位[J].自然杂志,2005.
[2]陈敏,李泽军.离散数学在计算机学科中的应用[J].电脑知识与技术,2009.
[3]钱程东.基于动态划分的数据挖掘及其在教务管理系统中的应用[J].国防科学技术大学,2006.