软件和程序的区别

2013-11-13 14:11 "@banq"的内容
数学家用其语言已经做了这么多错误的事情,特别是微积分之类的东西。没有理由今天编程语言的设计者应该盲目地学习数学。 ...


数学和软件是有区分。我想通过基本概念的划清,对人的思维有很多帮助。

“软件”一词中有“件”,一件一件的意思,如硬件的“件”一样,有组件组装的设计意思。面向工程了。

而“程序”一词中“序”,可能指CPU的时序,编制的代码要考虑到CPU执行,面向纯计算机科学了。

所以,“软件” 不等于“ 程序”。做软件的人叫软件工程师,编程序的叫程序员。

需求功能可用算法实现,可用逻辑实现。

程序=数据结构+算法;
软件=领域模型+逻辑。
前者偏重数学天国;后者偏向尘土人间。

使用算法实现的是数学建模(数学公式是一种模型);使用逻辑实现的是领域建模。
使用算法的思维是面向函数,使用逻辑的思维是面向对象。

这两种思维世界的人在现实中不断碰撞和争吵。其实只要注意自己的边界,天国和人间是可以和平相处的。

[该贴被banq于2013-11-18 10:23修改过]

有人觉得搞出软件与程序区别纯属闲聊无事。我认为实则和自己的职业规划有关。

如果自己擅长数学与算法,在Google那样大公司搞些大数据挖掘或软件基础设施产品研发真的不错,搞个新的NoSQL之类产品。

如果自己流落在社会上,哪里有招聘哪里去应聘,我想多了解点软件与领域模型 OO等设计,也许能证明自己是一个合格的软件工程师。

对自己的职业进行规划,在这两个之中寻找适合自己,自己学起来做起来不费力的钻研下去。成为其中一个方面的专家,回避自己短处,与别人互补合作。编码做起来才轻松持久。

为什么中国程序员到了30岁就要退休,其中一个主要原因是对自己定位不够,算法和模式都要搞,很吃力,不如去卖水果呢。

仅供参考。

@banq

软件是带有人类企图的程序。传统的数据结构+算法,并不等于函数式,传统方式只是让机器运转而已,而且很难模仿出逻辑。FP能使我们更加逻辑,更加领域化。

FP相比过去语言,比起让机器运转,它更多的是语言逻辑,也就是语法。FP的逻辑能力归功与Lambda,所以过去传统语言中的函数,跟这函数是有很大区别的。

2013-11-18 21:26 "@SpeedVan"的内容
传统方式只是让机器运转而已,而且很难模仿出逻辑

我很赞同这句话,你这段话让我有兴趣研究FP和逻辑之间关系,找到一篇文章:
函数式编程和逻辑编程的区别
问题:
我一直在阅读了许多文章试图了解函数和逻辑编程之间的差异,但我到目前为止只知道,逻辑编程定义方案是通过数学表达式。但是,这样的事情是不相关的逻辑编程。

答案:
我不会说,逻辑编程定义是通过数学表达式,这听起来更像是函数式编程。逻辑编程是使用逻辑表达式(当然,最终的逻辑是数学)。

在我看来,函数和逻辑编程的主要区别是“积木building blocks”:函数式编程使用函数,而逻辑编程使用谓词。谓词不是一个函数,它没有返回值。根据它的参数值,它的值可能是True或false,如果一些值是不确定的(通常情况下),我们将尝试找到谓词真值。

Prolog语言使用的一种特殊形式命名Horn子句属于一阶逻辑的逻辑条款; Hilog使用高阶逻辑的句子。

有人说,逻辑编程是函数编程的一个超集,因为每个函数可表示为一个谓词。

比如foo(x,y) -> x+y. 写成:
foo(X,Y,ReturnValue):-
ReturnValue is X+Y.

逻辑和函数之间的另一个区别是回溯backtracking。
..
完。

抄一段话:
Imperative programming is painting, logic programming is sculpture, declarative programming is word art, functional programming process art
命令式编程是绘画,逻辑编程是雕塑,声明编程是艺术字,函数式编程是工艺美术品

逻辑编程与函数编程

[该贴被banq于2013-11-19 08:22修改过]

2013-11-19 06:48 "@banq"的内容
比如foo(x,y) -> x+y. 写成:
foo(X,Y,ReturnValue):-
ReturnValue is X+Y. ...

逻辑关注的是“is”
函数关注的是“+”