读书人

四个软件工程师的一天

发布时间: 2012-11-26 11:48:50 作者: rapoo

四个程序员的一天

你,一个DotNet程序员,刚刚加入一个新项目组。除了你之外,其他的成员包括:Ceer,一直从事C项目的程序员,他刚刚转入C#不到一个月; Jally,整天抱着本Design Pattern(没错,就是GoF的那本)在啃的前Java程序员;以及Semon,你对他完全不了解,只是听PM介绍说他是搞Scheme的(传说中的第二古老的语言LISP的方言之一)。不过你也没在意,毕竟计算机这玩意,老东西是不吃香的。四个软件工程师的一天四个软件工程师的一天

周一,刚打开电脑,老板就跑到你们组的办公座面前:“好吧,伙计们,现在有个function需要你们来搞定。具体是这样的:用户输入2个数,并输入一个操作符。你根据输入的情况来得出相应的运算结果。“

(define (Foo op x y)  (op x y))  

看明白了么,上面的代码只有一个作用:第一行是函数头,定义了一个叫Foo的函数。该函数接受3个参数op, x, y。

第二行定义了函数的行为:把第一个参数op当作运算符,计算后面2个参数。

所以:(Foo + 1 2) = 3. (Foo / 12 6) = 2.

好了好了,不编故事了。

我只是想简单的让大家在繁忙的工作之余,也瞅瞅Function Programming(函数编程)世界的美妙。函数编程,最大的特点是它是将函数作为语言里1st class的元素来对待的。一个函数可以接受另一个函数作为参数,也可以把一个函数作为结果来返回。这样的函数我们称为Higher-order function。

那么,Function Programming和我们传统的面向对象有啥区别捏? 恩,这个嘛,扯得远可以扯到图灵机和冯诺以曼这2种体系的差异...@_@不过那个太学术性,俺就不说了,有时间在『代码之谜』系列文章里面科普吧。不过有句话可以较好的概括FP和OO的区别(好吧,这个也是抄“紫皮书”上面的):

“Pascal是为了建造金字塔...Lisp是为了建造有机体...”“作为Lisp的内在数据结构,表对于这种可用性起着重要的提升作用...”“采用100函数在一个数据结构上操作,远远优于采用10个操作在十个数据结构上工作”“金字塔矗立在那里千年不变,而有机体则必须演化,否则就会消亡”。

而另一个总结得比较好的话是:(同样是抄来的)

一个对象:一组相同的运算上面,外加不同的数据。(想想你的object,是不是这样的?)

一个Closure:一组相同的数据,外加不同的操作。—elegate就是这样的思想,有兴趣的话也可以去看看Ruby)

基本上,恩,没啥说的了。 如果你感兴趣的话,可以去看MIT SICP的课程(有在线版的,MIT也作为Open Course开设了的)

读书人网 >编程

热点推荐