建议新开[函数式编程]专区
Kusk 2006-10-24 06:46:03 函数式编程(Functional Programming) 与目前我们常见的命令式编程相对应,前者强调计算过程本身的可再抽象性、无副作用性、面向定义、可扩展,后者则强调面向机器逻辑、在此基础上进行基于状态变化的处理流程。前者的经典代表语言有Haskell、Lisp/Scheme、Proglog(部分地)、ML等,后者的代表语言则是Pascal、C/C++、Java等。
应该说,我国的IT业界近十年来关注的热点是基于命令式的面向对象编程,而对函数式编程思想的关注则几乎是一个空白,至多只是作为一种理论在学术界进行研究,而甚至连学校教育大多数也只是教授一些C/C++,Java,汇编等。鲜有见过专门教Lisp的,至多只是在人工智能或相关课程中略有提及,学生学完出来,对能函数式编程,甚至听说过这个名词的,少之甚少。
但这并不意味着函数式编程思想并不重要。事实上国外的许多大学都采用<<Structure and Interpretation of Computer Programs(简称SICP,由MIT编写出版,中译本:计算机程序的构造和解释)>>作为入学新生的教材,该书是一本关于程序设计思想的书籍,主要介绍了如何将问题进行抽象,分解,如何分离出公共成份,提高代码的复用性与弹性。全书是采用Scheme语言作为蓝本语言进行介绍的。从中可以掌握到许多关于构建合适的模型以求解问题、对问题进行抽象及分解的思维方式。由于Scheme作为一门经典的函数式语言,具有强大的动态性与语言弹性,并保持了极为简单的语法形式,因而学习者可以不需要过多地考虑与计算机有关的底层细节问题,而专注于对分解问题本质的思考。而目前的命令式语言虽然对实际的项目开发有着重要的作用,但对于学习编程的初学者来说,很难起到一个让其能专注进行设计、培养分解思维能力的作用。在许多版面上,一些关于建模、算法求解方面的问题也暴露出了我们学习者在此方面的不足。
另外,随着语言的不断发展,业界也开始注意到了函数式编程所具有的强大弹性。像诸如Python、Ruby等新兴的脚本语言,甚至JavaScript都提供了对函数式编程的不同程度支持。甚至在比较经典的命令式语言,如Java、C++中,无论是语言特性,还是一些高级设计,都可以看到函数式编程的影子。微软的下一代即将推出编程语言F#也注重引入了函数式特性。可以预见,即使函数式编程语言还不太可能在短期内取代命令式语言在业界开发中的地位,但其设计思想的重要性和它所起的辅助地位将越来越高。相较之下,国内在函数式语言的普及还不高,基本上业界中对其有了解的也只是较少部分有机会使用脚本进行开发的人士或许会在有余力的时候进行有限的研究。
而函数式编程本身比较强调思想性,考虑到我们能力的局限性及其本身的特性,暂时更应当作为一个新思想来探讨,而不需要挂接在特定的语言之下(事实上函数式编程语言的基本构成都是惊人的简单和相似)。所以更宜独立开版,而不是挂接在F#或者Python这样的版块之下。
对此,CSDN若能增开一个函数式编程的专版,在函数式编程到来之前起一个普及布道的作用,而在其普遍被使用之后更可以提供一个广泛交流的园地,相信对提升业内人士思维功底会起到一个很好的促进作用。故而在此推荐。如有可能,可以考虑暂时挂接在[专题开发]的大版之下。