系列文章链接:http://www.cnblogs.com/wowMVP/tag/EXPERT+F%23/
根据维基百科,“包括理论学家在内的科学家专注于开发新的模型以解释目前存在的数据,同时实验家主要专注于通过做实验的方式来测试模型——然而在实践中,对这两种行为的划分并不明显,并且很多科学家同时做了这两件事(译者注:开发新模型和测试模型)”。很多科学家使用数学作为特定领域的语言来定义他们的模型,并且从计算机科学的早期开始,holygrail已经尽最大可能地减小了科学模型和可执行代码间语义上的鸿沟。现在越来越明显的是,所有的科学家都正熟练地使用数学工具,同时,一些科学家,例如理论物理学家,他们在行为上已经无法和纯数学家区别开。所以,我们将编程做得越像数学,我们就越能为科学家和工程师们提供更多的帮助。
在上世纪50年代早期,John Backus 编写了“IBM数学公式翻译系统”的设计,这个设计也就是后来的FORTAN语言。直到今天,FORTRAN语言在科学社区中用来编写高效地数值计算程序仍旧是非常的流行。第二古老的编程语言,Lisp,它是由John McCarthy在1958年发明的。和FORTRAN一样,Lisp同样是受数学的影响,也就是Alonzo Church 的λ演算。今天,Lisp同样在科学社区中用来编写高级的符号计算程序非常流行。
有趣的是,虽然这两种语言(译者注:FORTAN和Lisp)在数学上有着相同的根,FORTRAN语言能够被认为是命令式和面向对象语言之母,同时Lisp语言被认为是声明式语言之母。但是他们的不同点可以被归结到视角的不同上:FORTRAN以机器和数字为起点,并在可能的地方添加若干抽象层来向上趋近于数学。Lisp以数学和符号为起点,并在必要的地方剥下抽象层来向下趋近于机器。但是正如前面引用的文字,在实践,理论和实验家之间的划分中体现得并不明显,并且很多地编程问题同时需要命令式和声明式的方法来解决。
函数编程在今天是一个在研究人员、黑客和在银行和金融机构的精英程序员,芯片设计人员,图形艺术家,以及架构师中严格保守的秘密。作为Lisp的重孙,函数编程语言被开发人员用来编写简练的程序,这些程序非常接近于数学模型,他们被开发出来用于理解宇宙,人类基因,期权定价,石油勘探,网页上的广告服务,或者是编写有容错能力的分布式系统。然而,对于未接受过着方面培训的开发人员来说,函数编程看上去像一个残忍和非自然的行为,一个令人筋疲力尽的怪诞的偶像。函数编程的数学和学术渊源以可怕的大话来渲染,例如类型推断(type inference),结构类型(structural types),封闭性(closures),局部套用函数(currying),延续(continuations),主要类型(principal types),单子(monads), 推断(inference), 非断言的较高的排名类型(impredicative higher-ranked types),等等。更糟糕的是,大多数纯函数化语言目前还不能和主流的专业工具和IDE、类库、框架进行很好地集成。
目前,命令式编程作为一个工具它为从事于模拟动态流体,化学反应,力学模型(mechanical models)的科研开发者,以及从事于编写操作系统,企业级应用和例如文字编辑器,表单,游戏,媒体播放器等紧缩套装软件(shrink-wrapped software)的商业软件开发人员提供了一种选择。命令式语言一般拥有丰富的工具支持,调试器,模具(profilers),重构编辑(refactoring editors),单元测试框架,很快地,以及庞大的标准数值库,并且这些数值库已经过了领域专家们超过20年的验证。作为FORTRAN重孙,他们首先专注于机器操作,然后向上构建抽象层。和函数编程相比,他们的语法是不必要的冗长,并且他们缺少来至于数学计算本身的现代特征(modern features),例如封闭性,类型感知,自治性和结构化类型,以及模式识别。这些特征正是这种使得函数编程变得如此强大的组合化开发的核心。
F#在命令式和声明式语言中是唯一的,并且在它一条黄金铺成的中间道路,这条道路几乎完全覆盖了这两种语言。F#拥有了这两种语言的最好的特性,并且高雅地将这些特性整合到了一种高生产力和简洁的语言中,这种语言能够同时被科学家和开发人员掌握。F#使程序员成为好的数学家,同时使数学家成为好的程序员。
作者:Eric Meijer