数学和软件
数学和软件
在我个人的软件开发过程中,自认为得益于数学基础训练较多,但具体有何联系,又感觉说不太明白。
正好论坛中有人提及,借此机会整理一下自己的思路,和大家共享。
用户说:金额大于50万的合同,需要部门经理审批,金额大于100万的合同,需要总经理审批。
用数学语言表述,可以相当于这样一个函数
处理流程=F(合同金额),根据合同金额的差异进行不同的处理
一般情况下,合同金额可以视为一个自然数集合(从1到无穷),很明显的,<大于50万>和<大于100万>不是这个自然数集合的完备划分。
第一:这两个集合有交叉,大于50万的集合显然包括大于100万的集合
第二:这两个集合不能覆盖整个自然数集合,也就是有漏洞
所以,需要给出一个互不冲突的完整划分,使其覆盖整个问题集合。
在本例中,[1,500000),[500000,1000000),[1000000,无穷)就是这样的一个互不冲突的完整划分。
由于软件实现的限制,事实上不可能对无穷大的数进行处理,因此需要确定该数的上限,以便于软件实现。
而且无论是int、long还是其他的数据类型,其范围总是不能和用户所需求的数的范围完全一致。例如是否允许输入负的合同金额?如果不允许,该限制应当由哪部分程序负责?
所有的数学函数都是必须定义变量所在的范围的
y=f(x),x∈N,X>=1,
y=g(x),x为实数,X<>0
……
要点一:输入参数必须定义其所在范围,并且确保所有输入参数的可能性都可以被处理(包括正常处理和异常处理)。
<br/>
所以,要做好软件开发, 没有数学光有逻辑能力还是不行的, 我就大概属于这类人,很多时候,还得回去翻看书籍,没有那种 灵光一闪的能力, 在更高层次的设计方面,这个能力足以让你 "相形见绌" 了. 30 楼 blackanger 2007-05-31 我的理解是:
数学好的人,可以把软件用纯数学的语言来描述,这种方式也许只能数学水平相当的两个人才能交流吧;
数学不好的人,可以用他惯用的描述语言来描述软件,比如UML!
31 楼 cookoo 2007-06-01 hurricane1026 写道庄表伟 写道数学<>逻辑学
软件开发,更重要的,是逻辑能力,而非数学能力。
数学不等于逻辑学。但是数学能力中包含逻辑能力,锻炼逻辑能力最好的方法也是学数学。。
逻辑分形式逻辑和非形式逻辑两类,一般说的数学能力锻炼逻辑能力仅指形式逻辑能力。而非形式逻辑能力如辩论,说服,谈判,反驳需要理科之外的学习和训练。很遗憾,国内的基础教育中非形式逻辑训练非常匮乏,幸好还有GRE,GMAT的逻辑考试。 32 楼 cookoo 2007-06-01 我觉得软件开发有个三个主要问题:做什么;怎么做;为什么这么做。数学有助于后两个问题,重要性不言而喻。不过数学和第一个问题没什么太大关系。计算机科学不是应用数学,我们每开辟一个学科领域是为了解决某个层面的具体问题,所以不能假设生物学是应用化学,化学是应用物理学,物理学是应用数学,所以数学就能解决一切问题。 33 楼 blackanger 2007-06-01 对我们一般程序员来讲,如果将两者结合起来,是有相当难度的。不但要掌大量高等数学知识,还要能够熟练应用――这么高的门槛,绝非一朝一夕之功,这一下子就挡住了许多人的进入。我对数学虽然感兴趣,也只是门外汉,掌握数学所付出的努力,要比学会几门编程语言要高得多。象我这种为生存而奋斗的人,可能只有想想的份,哪有勇气拿出大段时间再读数学呢。