软件工程与数学论文

时间:2024-03-19 16:00:22 阅读: 最新文章 文档下载
说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。
软件工程与数学

在大学的前3个学期里,我学习了诸如高数,离散,线代,概率论,数理逻辑,数值分析等等很数学学科,虽然以后不一定都会用到,但我觉得学习它们是很有必要的.数学对于我自身能力的塑造,我感觉起到了很大的作用.因为我觉得通过数学的学习,我的思维能力与逻辑能力得到了很大的永久性的提高,虽然我可能会忘记某些数学知识,但思维能力的水平却实实在在 的提高了.这为我学习其他知识(文科类知识除外)提供了良好的条件,我能更快更深刻的理解一个抽象的事物.因为我所学习的专业世界,它就是一个抽象的世界.抽象的人,抽象的物,抽象的物.数学好的人,抽象能力强,比较善于从复杂的现象中概括出与核心问题相关的简化了数学模型。有了数学模型,才容易探讨什么是这个问题的一般性解决方案以及某个解决方案能够成立的边界条件。并且把解决方案数学化表达,进而比较不同解决方案的优劣,如收敛速度或者系统误差等等.数学的重要性在于:重要的不是获得知识,而是发展思维能.

在上大学以前,更确切地说,在学了两年软件工程以前,我一直以为数学与软件工程专业没什么关系.学到现在,我越来越意识到数学对于我所学习的专业是多么的重要,这种重要不仅仅体现在对思维能力的要求,更实际体现在,如果你不知道相关的数学知识,那么你就无法解决这个问题.通常来说,真证去解决一个问题,你得找到问题的所在;找到问题所在之后,你必须能用某种方式去描述他,这就要用到数学,编写软件解决生活中任何一个问题,都要首先把它抽象成数学模型,然后再对其进行数学分析,思考出相应的解决办法(算法),最后才是用编程语言将算法实现.

下面我将用实际的简单的例子,来说明,数学对于程序的重要性,只要你思考一下,运用一数学的思维,那么程序的效率瞬间提升.比如,要求计算从1加到100,完全以运算结果为导向的人,或是训练有素的程序员,很自然的会写出这样的程序:

int sum =0;

for(int i=1;i<=100;++i) sum+=I;

上面这段程序就是让计算机简单的计算1+2+3+4++100,然后得出运算结果,计算机总共执行100多次运算.上面这个程序使用的算法(简单累加)让人一看就明白,可是明明我们在初中时就学过了数列级数的算法,怎么会写出上面那么笨的程序呢?更简单的带有数学思想的程序应该是这样的:

int sum=((1+100)*100)/2;

再来看看另一个例子,计算1加到10000,奇数和偶数的总和.用循环的话,一样很直觉得就写出这样的代码(分别计算从110000的奇数偶数之和): int oddsum=0; int evensum=0;

for(int i=1;i<=10000;++i){ if(i%2==0) evensum+=i; else oddsum+=I; }

这个算法首先判断i(1-10000中的一个数,i1递增到10000)是否为偶数,若是则

evensum=evensum+i;若不是偶数,oddsum=oddsum+i;i递增到10000之后,程序完成计算,分别计算出了奇数和与偶数和.上面的程序看似简单,但用我们学了10多年的数学稍微想一

1 / 3




,可以写出更简单的程序.首先计算1-10000的和sum,然后计算1-10000中所有偶数的和evensum,然后用sum-evensum就可以得到奇数和了. int sum=(10001*10000)/2; int evensum=5000*5001; int oddsum=sum-evensum;

这里需要解释一下evensum=5000*5001.1-10000的偶数和2+4+6+8+10000,把他们全部除以2就是1+2+3+4+.5000.所以1-10000的偶数和就是1-5000的和的二倍.

由此可见,稍微运用一下数学思维,能让程序效率提升N. 相信聪明的人,很容易就可以分析出来这两个例子的两种写法,在效能上迶多大的差异,但这不是我在这里想要表答数学是如何如何增加效率的。我想要表答的是,我们明明辛苦了12年,学了一堆的数学,为什么我们要放弃这样的基本训练?我们笑美国人的数学不好,可我们又用了多少的数学来帮助你的生活和工作?学了又不用,那不如从小学开始就分科系好了,不喜欢数学数学的,就选完全用不到数学的科系

我想表达的不是说在写程序是时钻研那种算法、功式等,去计较那些在现在动不动在2GHZ, 3GHZ,双核心、四核心之下,所省下的那微小的效率。而是对于软件工程与数学的态度!或许有人宁愿多打一些代码,也不愿动一下脑筋,如果态度是这样子的话,那也是活得下去的,不过水平就不过如此而已.

或许有人会反驳我说,需要用到算法、要讲求效率时,再去研究一下就好了,干嘛说的很严重似的。那么请看看下面的例子,今天我们一时兴起,要去爬缙云山,没问题啊,那种程度的山,只要双脚健全走得动的人都能爬。如果换成现在流行的登山步道呢?这需要一点点体力才行。如果要去爬泰山呢?开车到山脚下,穿个好一点的鞋子、好一点的衣服、多一点的体力,也还不是太大的问题。若要站在世界的最高点,去挑战珠穆朗玛峰,那全世界没几个人办得到,而且办到的人事前可是经过了严格的训练。为什么Google会这么重视算法和效率?应该说世界级的大公司都重视,Yahoo、微软、YouTube„,因为这些程序不是给几十个人、几百个人用而已。而是同一时间有几百万,甚至上千万人使用。一个人慢0.1秒好了,一百万人就10万秒,超过一天耶。浏览一个网页,慢个几秒钟我都不能忍受了,更何况是一天。能不计较算法和效率吗?!数学学得好的人,一般有很好的逻辑。而有逻辑是有效率的基础。而效率是一个评判好程序员的重要指标,甚至可以说是最重要的

如果只想当个一般的软件工程师,那么数学不重要。但是如果想当个厉害的软件工程师,数学很重要。在你手里只有锤子的时候,你看什么东西都会是个钉子,想想你如果没有学过算法和数据结构,可能你的大部分程序需要自己写排序的话,都会是傻傻地冒泡吧,反正对于大部分程序来说,在现在这么快的电脑下,这点时间差别,大部分情况下,也就是让你等程序执行测试的时候,多个倒杯水的时间。但是很多新鲜,好玩,有挑战的问题,很多数学的概念没有的话,恐怕不是多等个倒水的时间了。而如果你过了这个门槛,你又会发现,一个崭新的世界,又到了你的面前。 回过头来,我说数学对软件工程很重要,那么重要的是哪些呢?大家常说的通常是离散数学不过很多技术资料都大量依赖于线性代数和概率论,以及一点点微积分。所以,如果希望做点有追求的技术工作的话,那就得多花点时间学习数学其实万事开头难,也许你和我一样,对着一堆公式符号,感到头晕眼花,但是如果真得安下心来,看上一个小时,这么坚持个一周,其实就会发现,这没啥难的。

不过,虽然我一直觉得数学对软件工程很重要,但目前阶段所处的现实似乎却不那么回事,

2 / 3




本文来源:https://www.wddqw.com/doc/c83934afd3d233d4b14e852458fb770bf78a3b84.html