haskell函数式编程
Ⅰ 什么是编程范式
编程范式Programming paradigm是指计算机中编程的典范模式或方法。
常见的编程范式有:函数式编程、程序编程、面向对象编程、指令式编程等。
不同的编程语言也会提倡不同的“编程范型”。一些语言是专门为某个特定的范型设计的,如Smalltalk和Java支持面向对象编程。而Haskell和Scheme则支持函数式编程。现代编程语言的发展趋势是支持多种范型,如 C#、Java 8+、Kotlin、 Scala、ES6+ 等等。
(1)haskell函数式编程扩展阅读
编程范式中函数式编程的优点及应用情况:
1、易于重构、调试、测试。
2、整体应用:数学计算、人工智能。
3、局部应用:已遍地开花。
Ⅱ 代码之美的作者简介
John Bentley是美国Avaya实验室的一位计算机科学家。他的研究领域包括编程技术、算法设计以及软件工具与界面设计。他已编写了数本关于编程的书籍, 还撰写了大量的文章,主题涉及从算法理论到软件工程的各个方向。他于1974年在斯坦福大学获得学士学位,并于1974年获得硕士学位以及于1976年在 北卡罗来纳大学获得博士学位,随后在卡耐基-梅隆大学任教6年,教授计算机科学。1982年他加入贝尔实验室,并于2001年离开贝尔实验室并加入 Avaya实验室。他曾是西点军校和普林斯顿大学的访问教授、曾经参与开发过软件工具、电话交换机、电话以及网络服务。
Tim Bray于1987-1989年间在加拿大的安大略省滑铁卢大学负责牛津英语词典项目,1989年与他人联合创建了Open Text公司,在1995年启动了最早的公共网页搜索引擎之一,在1996至1999年间与他人共同发明了XML 1.0并合作编写了
《Namespaces in XML》规范,在1999年他创建了Antarctica Systems公司,并于2002-2004年被Tim Berners-Lee任命在W3C技术架构组中工作。目前,他在Sun Microsystems公司Web Technologies部门任主管,他有一个很受欢迎的博客,并且参与主持IETF AtomPub工作组。
Bryan Cantrill是Sun Microsystems公司的一位杰出的工程师,在他的职业生涯中主要从事Solaris内核的开发。最近他与同事Mike Shapiro和Adam Leventhal一起设计并实现了DTrace,这是一个用于产品系统动态控制的工具,获得了《华尔街日报》2006年度的最高创新奖。
Douglas Crockford毕业于公立学校。他是一位登记选民,拥有自己的汽车。他曾开发过办公自动化系统。他曾在Atari公司从事过游戏和音乐研究。他曾是 Lucasfilm有限公司技术部门的主管,以及Paramount公司New Media部门的主管。他创建了Electric Communities公司并且担任CEO。他还是State 软件公司的创建者和CTO,正是在这个公司中他发明了JSON数据格式。他现在是Yahoo!公司的一位架构师。
Rogerio Atem de Carvalho是巴西校园技术教育联合中心(Federal Center for Technological Ecation of Campos,CEFET Campos)的一位教师兼研究人员。他在奥地利的维也纳获得了2006年度IFIP杰出学术领导奖(Distinguished Academic Leadership Award),以表彰他在免费/开源企业资源计划(ERP)上所做的研究工作。他的研究领域还包括决策支持系统和软件工程。
Jeff Dean于1999年加入Google,目前是Google系统架构小组的成员。他在Google主要负责开发Google的网页抓取、索引、查询服务以 及广告系统等,他对搜索质量实现了多次改进,并实现了Google分布式计算架构的多个部分。在加入Google之前,他工作于DEC/Compaq的 Western实验室,主要从事软件分析工具、微处理器架构以及信息检索等方面的研究。他于1996年在华盛顿大学获得了博士学位,与Craig Chambers一起从事面向对象语言的编译器优化技术方面的研究。在毕业之前,他还在世界卫生组织的艾滋病全球规划署工作过。
Jack Dongarra于1972年在芝加哥大学获得数学学士学位,并于1973年在伊利诺理工大学获得计算机科学硕士学位,又于1980年在新墨西哥大学获得 应用数学博士学位。他在美国阿贡国家实验室(Argonne National Laboratory)一直工作到1989年,并成为了一名着名科学家。他现在被任命为田纳西大学计算机科学系的计算机科学杰出教授。他是美国橡树岭国家 实验室(Oak Ridge National Laboratory ,ORNL)计算机科学与数学部的杰出的研究人员,曼彻斯特大学计算机科学与数学学院的Turing Fellow,美国莱斯大学计算机科学系的副教授。他的研究领域包括线性代数中的数值算法,并行计算,高级计算机架构的应用,程序设计方法学以及用于并行 计算机的工具。他的研究工作包括开发、测试高质量的数学软件以及整理相关文档。他在以下开源软件包和系统的设计及实现上做出了贡献:ISPACK, LINPACK, the BLAS, LAPACK, ScaLAPACK, Netlib, PVM, MPI, NetSolve, Top500, ATLAS, 和 PAPI。他公开发表了大约200篇文章、论文、报告以及技术备忘录,还参与编写了数本着作。他于2004年获得了IEEE Sid Fernbach奖,以表彰他在高性能计算机的应用中使用了创新的方法。他不仅是AAAS,ACM和IEEE的成员,还是美国工程院的院士。
R. Kent Dybvig是印第安纳大学计算机科学系的一位教授。在印第安纳大学任教两年之后,他于1987年在北卡罗来纳大学获得了博士学位。他在设计和实现编程语 言的研究上做出了重要的贡献,包括控制运算符、句法抽象、程序分析、编译器优化、寄存器分配、多线程以及自动存储管理等。在1984年,他创建了Chez Scheme软件并一直是主要的开发人员。Chez Scheme的特点在于快速的编译时间、可靠性以及能够高效地运行内存需求巨大的复杂程序,它已经被用于构建企业集成、网页服务、虚拟现实、机器人药品抽 检、电路设计以及其他的商业系统。它还可以用于各种层次的计算机教育以及许多其他领域中的研究。Dybvig是《The Scheme Programming Language, Third Edition》(MIT Press出版社)一书的作者,以及即将发布的“Revised6 Report on Scheme”文档的编辑。
Michael Feathers是Object Mentor 公司的顾问。在过去七年间,他一直活跃于Agile社群,他的工作主要是与世界各地不同的团队合作,培训以及指导。在加入Object Mentor公司之前,Michael设计过一种编程语言,并为这种语言写了一个编译器。他还设计了一个庞大的多平台类库以及用于控制的框架。 Michael开发了CppUnit,也就是最初把JUnit移植到C++;以及FitCpp,也就是把FIT移植到C++。在2005年, Michael编写了《Working Effectively with Legacy Code》(Prentice Hall出版社)一书。在与各个团队合作的间隙,他的大多数时间都花在研究大型代码库中的设计修改方式方面。
1995年,Karl Fogel和Jim Blandy一起创建了Cyclic软件公司,这是第一个提供商业CVS支持的公司。1997年,Karl增加了对CVS匿名只读存储仓库访问的支持,这 样就可以更方便地访问开源项目中的开发代码。1999年,他工作于CollabNet公司,主要从事管理Subversion的创建和开发工作,这是 CollabNet公司和一群开源志愿者们从头开始编写的开源版本控制系统。2005年,他编写了《Procing Open Source Software: How to Run a Successful Free Software Project 》(O'Reilly出版社;在http://procingoss.com上有联机版本) 一书。2006年,他在Google担任了短期的开源技术专家之后离开Google并成为了Question-Copyright.org网站的全职编 辑。他目前仍然参与了多个开源项目,包括Subversion和GNU Emacs。
Sanjay Ghemawat是一位Google Fellow,工作于Google的系统架构小组。他设计并实现了分布式的存储系统,文本索引系统,性能分析工具,一种数据表示语言,一个RPC系统,一 个malloc函数实现以及许多其他的库。在加入Google之前,他是DEC系统研究中心的一位研究人员,主要从事系统性能分析和优化Java编译器的 工作,他还实现了一个Java虚拟机。他于1995年在麻省理工大学获得博士学位,研究领域为面向对象数据库的实现。
Ashish Gulhati是互联网隐私服务Neomailbox的首席开发员,以及Cryptonite的开发员,这是一个支持OpenPGP协议的安全网页邮件系 统。他有着15年的商业软件开发经验,是印度最早的数字版权活动家之一和F/OSS程序员,他编写了大量的开源Perl模块,这些模块可以从CPAN上下 载。在1993~1994年间,他在《PC Quest》和《DataQuest》等杂志上发表了大量文章,这是在印度主流计算机刊物中最早向读者介绍自由软件,GNU/ linux,Web和Internet的文章,在这些文章发表多年以后,印度才拥有了商业的互联网访问,这些文章还构成了PC Quest Linux Initiative活动的重要组成部分,这个活动促使自1995年以来,在印度分发了一百万份Linux光盘。在获得了一组可穿戴的计算机后,他很快地 成为了一个电子人。
Elliotte Rusty Harold是新奥尔良人,他会定期返回新奥尔良去吃一大碗海鲜干波汤(Gumbo)。不过,他目前住在布鲁克林附近的Prospect Heights,和他生活在一起还有他的妻子Beth,狗Shayna,和两只猫Charm(以夸克命名)和Marjorie(以他的岳母命名)。他是纽 约科技大学的一位副教授,主要讲授Java、XML以及面向对象编程。他的Cafe au Lait网站是互联网上最流行的独立Java网站之一;他的另一个网站Cafe con Leche 则成为了最流行XML站点之一。他编写的书籍包括《Java I/O》,《Java Network Programming》和《XML in a Nutshell》(这三本书都由O'Reilly出版社出版),以及XML Bible (Wiley出版社)。他目前的研究领域包括用Java来处理XML的XOM库、Jaxen XPath引擎以及Amateur媒体播放器。
Brian Hayes为《American Scientist》杂志编写计算机专栏,他还拥有一个博客。过去,他还为《Scientific American》、《Computer Language》、 以及《The Sciences》等杂志编写过类似的专栏。他编写的《Infrastructure: A Field Guide to the Instrial Landscape》(Norton出版社)一书于2005年发行。
Simon Peyton Jones,硕士,于1980年毕业于剑桥大学三一学院。在工作两年后,他在伦敦大学学院担任了7年的讲师,然后在格拉斯哥大学担任了9年的教授,后来于 1998年加入微软研究中心。他的研究领域包括函数式编程语言及其实现和应用。他领导了一系列的研究项目,主要研究用于单处理器机器和并行机的高质量函数 式语言系统的设计和实现。他是函数式语言Haskell的主要设计者,此外他还是被广泛应用的Glasgow Haskell编译器(GHC)首席设计师。他还编写了两本关于函数式语言实现的教科书。
Jim Kent是加利福尼亚大学圣克鲁兹分校基因信息小组(Genome Bioinformatics Group)的一位研究学家。Jim从1983年起就开始编程。在职业生涯的前半段,他主要从事绘画和动画软件的开发,他开发了Aegis Animator、 Cyber Paint以及 Autodesk Animator等获奖软件。1996年,由于厌倦了基于Windows API的开发工作,他决定在生物学上追求他的兴趣,并于2002年获得了博士学位。在研究生期间,他编写GigAssembler——这个程序计算出了第 一批人类基因组——比Celera公司发布的第一批基因组提前了一天,从而使得这批基因组成为免费的专利并且避免了其他的法律问题。Jim发表了40余篇 科学论文。他目前的研究工作主要是编写程序,数据库和网站以帮助科学家分析和了解基因组。
Brian Kernighan于1964年在多伦多大学获得学士学位,并于1969年在普林斯顿大学获得电子工程博士学位。他在贝尔实验室的计算科学研究中心一直工 作到2000年,目前就职于普林斯顿大学的计算机科学系。他编写了8本着作以及大量的技术论文,并拥有4项专利。他的研究领域包括编程语言、工具、为非专 业用户设计易用的计算机操作界面等。他还致力于非技术读者的技术教育工作。
Adam Kolawa是Parasoft公司的创建者之一和CEO,这家公司是自动错误预防(Automated Error Prevention ,AEP)解决方案的领先提供商。Kolawa有着多年在各种软件开发流程中的经验,这使得他对高科技企业有着独特的视野,以及成功辨识技术潮流的非凡能 力。因此,他策划了几个成功商业软件产品的开发过程来满足在提高软件质量中不断增长的工业需求——经常在这种潮流被广泛接受之前。Kolawa参与编写了 《Bulletproofing Web Applications》(Hungry Minds出版社)一书,他还撰写了100余篇评论和技术文章,发表在《The Wall Street Journal》、《CIO》、《Computerworld》、《Dr. Dobb's Journal》以及《IEEE Computer》等期刊上。此外,他还撰写了大量关于物理学和并行处理方面的科学论文。他现在的签约媒体包括CNN、 CNBC、 BBC和NPR。Kolawa拥有加利福尼亚理工大学理论物理博士学位,并拥有10项专利发明。2001年,Kolawa获得了软件类别的Los Angeles Ernst & Young's Entrepreneur of the Year奖项。
Greg Kroah-Hartman是目前Linux内核的维护人员,负责多个驱动程序子系统以及驱动程序内核、sysfs、 kobject、 kref和debugfs等代码。他还为启动linux-hotplug 和 udev等项目提供了帮助,是内核稳定维护团队中的重要人员。他编写了《Linux Kernel in a Nutshell》(O'Reilly出版社),并参与编写了《Linux Device Drivers, Third Edition》(O'Reilly出版社)。
Andrew Kuchling有着11年的软件工程师经验,他是Python开发群体中的长期成员。他的一些与Python相关的工作包括编写和维护数个标准的库模 块,编写一系列的“What's new in Python 2.x”文章以及其他一些文档,策划了2006年和2007年的PyCon会议,并是Python软件基金会的主管。Andrew于1995年毕业于麦吉 尔大学并获得计算机科学学士学位。他的个人网页是http://www.amk.ca。
Piotr Luszczek毕业于波兰克拉科夫矿业与冶金大学,并获得硕士学位,他的研究领域是并行的核外(out-of-core)库。他将稠密矩阵计算核应用于 稀疏矩阵直接求解算法和迭代数值线性几何算法中的创新研究使他获得了博士学位。他把这种思想用来开发使用核外技术容错库。目前,他是田纳西大学诺克斯维尔 分校的一位研究教授。他的研究工作包括大型超级计算机安装的标准化评价。他开发了一个自适应的软件库,能够自动选择最优的算法来有效地利用现有硬件以及有 选择地处理输入数据。他还感兴趣于高性能编程语言的设计和实现。
Ronald Mak是高级计算机科学研究所(Research Institute for Advanced Computer Science)的一位资深科学家,在NASA Ames研究中心工作时,他是协同信息系统(Collaborative Information Portal,CIP)的架构师和首席开发人员。在漫步者登录火星之后,他分别在JPL和Ames对探测任务提供支持。然后,他获得了加利福尼亚大学圣克 鲁兹分校的学术任命,并且他再次与NASA签约,这次的工作是设计帮助宇航员返回月球的企业软件。Ron是Willard & Lowe Systems公司的创建人之一和CTO,这是一个针对企业信息管理系统的咨询公司。他编写了 数本关于计算机软件的书籍,他在斯坦福大学分别获得了数学科学学位和计算机科学学位。
Yukihiro Matz Matsumoto是一位程序员,他是一位日本籍的开源倡导者,他发明了最近非常流行的Ruby语言。他从1993年开始研发Ruby,这和Java语言 一样久远。现在他工作于日本Network Applied Communication Laboratory(NaCl,网址为netlab.jp)公司,该公司从1997年起开始赞助Ruby的开发。因为他的真实姓名太长而难以记住,并且 对于非日本的演讲者来说难以发音,因此在网上他使用了昵称Matz。
Arun Mehta是一位电子工程师和计算机科学家,他曾在印度、美国和德国进行过研究和教学工作。他是印度早期计算机活动家,他努力实现了一些方便消费者 (consumer-friendly)的政策,以帮助把现代通信延伸到偏远地区和贫困地区。他目前的研究领域包括农村无限通信以及帮助残疾用户的技术。 他是印度哈里亚纳邦Radaur地区JMIT大学计算机工程系的教授和主任。
Rafael Manhaes Monnerat是CEFET CAMPOS的一位IT分析家,以及Nexedi SARL的海外顾问。他的研究领域包括免费/开源系统、ERP以及最新的编程语言。
Travis E. Oliphant于1995年在美国杨百翰大学获得电子与计算机工程学士学位和数学学士学位,并于1996年在本校获得电子与计算机工程硕士学位。他于 2001年在明尼苏达罗切斯特的梅奥研究生院获得了生物医学工程博士学位。他是Python语言中科学计算库SciPy和NumPy的主要编写者。他的研 究领域包括显微阻抗成像,异构领域中的MRI重构以及生物医学逆问题。他目前是杨百翰大学电子与计算机工程的副教授。
Andy Oram是O'Reilly Media的编辑。他从1992年开始就在这家公司工作,Andy目前主要关注自由软件和开源技术。他在O'Reilly的工作成果包括第一批Linux 系列丛书以及2001年的P2P系列丛书。他的编程技术和系统管理技术大多都是自学的。Andy还是Computer Professionals for Social Responsibility协会的成员并且经常在O'Reilly Network(http://oreillynet.com)和其他一些刊物上撰写文章,这些文章的主题包括互联网上的政策问题,以及影响技术创新的潮 流及其对社会的影响。
William R. Otte是田纳西范德堡大学电子工程与计算机系(EECS)的一位博士研究生。他的研究领域是分布式实时嵌入(DRE)系统的中间件,目前从事CORBA 组件的部署和配置引擎(DAnCE)开发工作。这个工作主要研究运行时规划技术,基于组件的应用程序的适应性,以及对应用程序服务质量和容错需求的规范与 实施。在攻读研究生之前,William于2005年在范德堡大学计算机系毕业并获得学士学位,之后在软件集成系统学院(ISIS)工作了一年。
Andrew Patzer是威斯康星大学医学院生物信息系的主管。过去15年Andrew是一位软件开发人员并且编写了许多文章和书籍,包括 《Professional Java Server Programming》(Peer Information公司)和《JSP Examples and Best Practices》(Apress出版社)。Andrew目前的研究领域为生物信息领域,利用像Groovy这样的动态语言来发掘大量有效的生物数据并 帮助科学研究人员进行分析。
Charles Petzold是一位自由作家,主要研究领域为Windows应用程序编程。他是《Programming Windows》(Microsoft Press出版社)的作者, 1988年至1999年之间共出版了五版,教育了整整一代程序员的Windows API编程技术。他最新的书籍包括《Applications = Code + Markup: A Guide to the Microsoft Windows Presentation Foundation》(Microsoft Press出版社),以及《Code: The Hidden Language of Computer Hardware and Software》(Microsoft Press出版社),在这本书中他对数字技术进行了独特的研究。
T. V. Raman的研究领域包括网页技术和听觉用户界面。在20世纪90年代初,在他的博士论文中介绍了音频格式的概念,叫作AsTeR:Audio System For Technical Readings(技术读物语音系统),这是一个为技术文档生成高质量听觉表示的系统。Emacspeak则将这些思想应用到更广泛的计算机用户界面领 域。Raman现在是Google的一位研究人员,主要研究Web应用程序。
Alberto Savoia是Agitar软件公司的创建人之一和CTO。在创建Agitar之前,他是Google的高级工程主管;在这之前,他还是Sun Microsystems实验室软件研究中心的主管。Alberto的主要研究领域是软件开发技术——尤其是那些帮助程序员在设计和开发阶段进行测试和代 码验证的工具和技术。
Douglas C. Schmidt是田纳西范德堡大学电子工程与计算机(EECS)系的一位教授,计算机科学与工程系的副主任,以及软件集成系统学院(ISIS)的高级研究 人员。他是分布式计算模式和中间件框架方面的专家,并且已经发表了超过350篇的技术论文和9本书籍,内容涉及的主题很广,包括高性能通信软件系统,高速 网络协议并行处理,实时分布式对象计算,并发与分布式系统的面向对象模式,以及模型驱动的开发工具。在他的学术研究之外,Dr. Schmidt还是PrismTechnologies公司的CTO,并且在领导开发应用广泛开源的中间件平台上有着15年的经验,在这些平台上包含了丰 富的组件以及实现高性能分布式系统中核心模式的领域特定语言。Dr. Schmidt于1994年于加利福尼亚大学欧文分校获得计算机科学博士学位。
Christopher Seiwald编写了Perforce(一种软件配置管理系统)、Jam(一种构建工具)和“漂亮代码的七个要素”(本书的第32章,变动的代码,正是从 这篇文章中提取出了有价值的思想)。在创建Perforce之前,他在Ingres公司管理网络开发小组,他花了数年时间来使得异步网络代码看上去很漂 亮。现在他是Perforce软件公司的CEO,并且仍然从事编码工作。
Diomidis Spinellis是希腊雅典经济与商业大学管理科学与技术系的副教授。他的研究领域包括软件工程工具,编程语言和计算机安全。他在伦敦帝国理工大学获得 了软件工程硕士学位和计算机科学博士学位。他发表了超过100篇的技术论文,所涉及的领域包括软件工程,信息安全以及普适计算。他还编写了两本开源方面的 书籍:《Code Reading 》(获得2004年度Software Development Proctivity奖)和《 Code Quality 》(这两本书都由Addison-Wesley出版社出版)。他是IEEE Software编辑委员会的成员,主编“Tools of the Trade”专栏。Diomidis是一位FreeBSD提交者(Committer),并且编写了许多开源软件包、软件库以及工具。
Lincoln Stein是一位硕士/博士,他的研究领域为生物信息数据的集成与虚拟化。在从哈佛大学医科学院毕业后,他在麻省理工大学Whitehead基因研究所工 作,开发用于老鼠和人类的基因图谱数据库。他在冷泉港实验室开发了各种基因数据库,包括WormBase,线虫基因数据库;Gramene,用于水稻和其 他单子叶植物的比较基因映射数据库;国际Hap-Map项目数据库;以及人类基因基础数据库Reactome。Lincoln还编写了《books How to Set Up and Maintain a Web Site》(Addison-Wesley出版社)、《Network Programming in Perl》(Addison-Wesley出版社)、《Official Guide to Programming with CGI.pm 》(Wiley出版社)以及《Writing Apache Moles with Perl and C》(O'Reilly出版社)等书籍。
Nevin Thompson把Yukihiro Matsumoto编写的第29章内容,把代码当作文章,从日文翻译到英文。他的客户包括日本最大的电视网络,以及Technorati Japan公司和Creative Commons组织。
Henry S. Warren, Jr.在IBM工作了45年,他历经了从IBM 704到PowerPC的发展过程。他参与过多个军方指挥与控制系统的开发工作,在纽约大学Jack Schwartz教授指导下从事SETL项目。从1973年起,他在IBM研究部门工作,主要方向为编译器和计算机架构。Hank目前正在参与Blue Gene Petaflop超级计算机项目。他在纽约大学克朗数学研究所获得了计算机博士学位。他是《Hacker's Delight》(Addison-Wesley出版社)一书的作者。
Laura Wingerd多年Sybase和Ingres的数据库产品开发工作形成了她早期对软件配置管理的观点。她在Perforce软件公司创建之初就加盟了这 家公司,并且从她给Perforce客户的建议中获得了大量的SCM经验。她编写了《Practical Perforce》(O'Reilly出版社)一书以及许多与SCM相关的白皮书。她在Google的技术演讲The Flow of Change中首次露面。Laura现在是Perforce 软件公司产品技术部的副主管,主要负责推动合理的SCM流程以及研究新的并且更好的Perforce使用方式。
Greg Wilson在爱丁堡大学获得了计算机科学博士学位,他的研究领域包括高性能科学计算,数据虚拟化以及计算机安全。他现在是多伦多大学计算机科学系的一位副教授,并且是《Dr. Dobb's Journal》杂志的特约编辑。
Andreas Zeller于1991年毕业于德国达姆斯塔特理工大学,并于1997年在不伦瑞克理工大学获得计算机科学博士学位。2001年以来,他一直在德国萨尔兰 登大学的计算机科学系担任教授。Zeller主要研究大型程序以及它们的发展历史,他开发了大量的方法来分析在开源软件以及IBM、Microsoft、 SAP以及其他公司的商业软件中失败的原因。他编写的《Why Programs Fail: A Guide to Systematic Debugging》(Morgan Kaufmann出版社)获得了《Software Development Magazine》杂志2006年度的Proctivity大奖。