关于数学和软件设计

喜欢这里的氛围,所以对于一些想法我也很想提出来,让大家来分享一下。
经常看见bang老师和大家热烈的讨论数学中的算法和软件的思想,那我也谈谈这方面的论点。算法其实是数学的一部分,也是比较特定的,就像软件开发中的硬编码,即这段代码是死的,没有很大的灵活性重用性,人们之所以学数学也不是为了记几个有用的公式和算法,不然我们中的大部分人学到初三就行了。之所以学数学,有一个原因我想大家都知道那就是可以提高逻辑能力,没有一定逻辑能力你的推导就会是处处矛盾,你的程序也会错误百出。
其实学数学还有另为一个作用,也是我想说的,那就是让你有抽象的能力,学会站在一定的高度去看待问题。为什么这么说呢,纵观数学历史,起初只有几串数字而已,接着出现了数学的变量(不是指软件语言的变量),这是一个很了不起的发现,变量代表了所有的数。接着是符号的产生,这更是伟大的变革,符号的产生可以说是极大的解放了我们人类的思维,因为符号可以代表一切事物。然后你可以利用符号对一切事物建模,进行演算并得出合理的解决方案。所以说学了数学可以让你有抽象的能力,而抽象正是软件设计中强有力的工具,没有抽象也就没有设计模式,更加没有程序语言的函数,当然也不会有庞大的软件。我想每一个软件人员还是得懂点数学知识的。而bang老师如此反对算法的重要性以及区分数学和软件设计,我想是国内的环境导致了对算法和数学的误解吧。
数学也是一种大道至简,没有一门学科或者应用可以如此的简洁。


[该贴被admin于2010-08-09 16:32修改过]

讲得很好,数学和算法是有区别的,算法是实现软件功能,属于软件设计管理范围。
面向过程程序=算法+数据
面向对象程序=对象+消息

可能由于国内过于强调数学对软件重要性,我提出一些理性思考。下面我多谈些个人对数学认识,屁股决定脑袋,只是我的角度:
数学可以培养抽象和逻辑能力,但应该不是唯一方式。
数学是支撑西方科学重要工具,牛顿提出万有引力,如果不用数学推导出来,那么就和中医一样,如果有人用数学公式把中医或易经一些结论推导出来,结果怎样?哈哈。
数学很强大,但也有其局限,中国古代有象数之争,象就是凭借直观外部特征判断,是使用它;而数就是数术,用今天话说,就是用数学表达事物,甚至能从事物无到有推导出来,但是因为数学粒度可能太细,表达或推导相当繁琐,一些人毕其一生推导一个公式,能成功已不简单,跨几个世纪没有结果是正常的,那是不是没有推导解剖之前不能用它呢?

当然不是,中医等数学推导出来可能人类都不存在,但是我们在用它,这就是象数之道,要灵活使用,炒股票也是,是不是股票走势没有被经济学家推导出来,我们不能赚钱?否定的,凭借中国的大象之道,从外界观察它,趋势第一;同样,软件建模也是从外部分析事物,四色原型,实体和值对象都属于从事物外部认识其象行。

数学当然很重要,几乎是近代科学的基础,

尤其是计算机方面,从硬件到编程语言。几乎全是数学原理呀,
(最简单的例子,CPU的加法电路和乘法电路,没有一定数学基础的人看懂都困难,更别说发明出来了....)

虽然数学和算法有区别,但是我觉得没有好的数学基础,很难能写出好的算法,尤其是一些复杂行为。 比如棋类游戏中的AI,我觉得这种类似的程序如果没有很好的高等数学基础,几乎很难实现。

只不过banq 老师站在一个架构设计者的角度,对于算法就会考虑的比较少。但是对象都设计出了后,对象的行为恐怕也得有好的算法实现吧。
我觉得如今不注重算法的主要原因是:面向对象和具体业务联系很紧密,而一般的业务对算法要求都比较低,所以如果开始设计的够好,算法就不太重要。而如果业务本身逻辑性很强(比如棋类游戏),那么算法应该是不可避免要考虑的吧?