现在计算机技术发展现象是:无论硬件技术如何发展都满足不了软件需求;无论处理器变得能跑多快,都无法满足软件对计算能力的需要。按照摩尔定律(Moore's Law)处理器(CPU)每平方面积上包含的半导体晶体管数量每18个月将会增加一倍。发展到现在,所有CPU厂商都再也无法按照摩尔定律在一定面积上成倍增加半导体了,大家也都只能朝着增加CPU内核数量上努力了。多核CPU已然成为现代计算机技术发展趋势。现代软件对计算能力的需求暴增主要归咎于现代社会中数据应用的普及和泛滥。这种数据量级单凭增加处理器和存储能力是无法应付的,必须通过分布式计算模式来有效处理。

无论我们如何通过垂直拓展(Scale Up)增加CPU、内存、硬盘始终都无法解决数据通道(Bus)的无限扩张。只有通过水平拓展(Scale Out),即分布拓展通过增加计算机服务器然后用分布计算技术把计算任务切细分派给各分散独立的服务器进行处理;这也就是大数据技术的核心。

可以预见的是,我们将来面对的是:分布式数据、高并发处理、并行运算、NOSQL及超大型互动复杂的网络平台编程。作为一个算是老资格的程序员,经历了从BIOS到云平台应用开发全过程,面对这些新的硬件环境和软件要求还是觉着力有不及。我自己分析了一下;如果依赖自己目前所掌握的技术和经验,用java或者C#这几种面向对象编程语言(OOP)再加上现有的资源库去面对分布式(distributed)、并行运算(parallelism)、高并发(concurrency)软件的开发,感觉还是力犹不及,像Mission Impossible。

通过一段时间的调研,发现Scala能够比较简单地解决心目中的难题。Scala是一种JVM编程语言,与java在bytecode层面相等(不只兼容)。我觉着可以说Scala是java的升级,一方面保持bytecode的兼容,另一方面从功能上又简化解决了许多以前java编程中遇到的难题。有关Scala编程语言方面的资料还是比较容易找到的。它到底是一个什么样的编程语言、功能如何强大、特点如何,这些自不用我多说。Scala是面向对象编程(OOP)和泛函编程(FP)的完美混合体。Scala针对多核CPU并行运算及高并发处理这方面主要是通过泛函编程范畴(Functional Programming Paradigm)来实现的。我发现在国内互联网上有关Scala泛函编程的教材非常匮乏,Scala语言教程倒是比较容易找到。我下面一系列的文章就不会描述那些Scala编程语言的语法语意,而是以展示如何从OOP编程思维转换到泛函编程模式为主。

之所以选择了Scala主要还是它是我在寻找解决方案时第一个碰巧遇到的一个新的编程语言,能够解决一直以来思考的那些在java开发工作中所遇到的问题。后来为了进一步了解泛函编程又看了其它一些编程语言资料,包括Haskell, Clojure,Erlang等。不过最终还是选择了Scala,基于以下理由:

1、Scala是JVM编程语言,与java高度兼容,可以充分利用现有的java程序资源

2、Scala是OOP和FP混合体,有些问题可以通过OOP形式来解决,是良好的OOP到FP编程模式的转换过渡

3、新发布的java 8中新增了许多Scala的特长(Features)。将来这两款编程语言是不是会逐步接近,越来越相似或者在某些方面进行合并?当java能解决所有问题时我们可能又回归到java编程;又可以充分利用java经验和资源积累了。

4、Scala构建工具SBT是Maven后的强大工具。可以完整构建大型软件系统及实现团队开发管理

5、已经有一些知名企业使用Scala开发了自己的平台如Tweeter, Gilt, Foursquare等。大型的成功项目最著名的是 Spark

scala泛函编程是怎样被选中的的更多相关文章

  1. 怎样学习Scala泛函编程

    确切来说应该是我打算怎么去学习Scala泛函编程.在网上找不到系统化完整的Scala泛函编程学习资料,只好把能找到的一些书籍.博客.演讲稿.论坛问答.技术说明等组织一下,希望能达到学习目的.关于Sca ...

  2. 实用的Scala泛函编程

    既然谈到实用编程,就应该不单止了解试试一个新的编程语言那么简单了,最好通过实际的开发项目实例来演示如何编程.心目中已经有了一些设想:想用Scala泛函编程搞一个开源的数据平台应用系统,也就是在云平台P ...

  3. 新一代编程:scala泛函编程技术-唠叨

    准备了半年后,终于决定在这里开始我的scala编程技术学习体验撰写之旅.初步打算在这里把我学习.体验.掌握scala编程的过程与有兴趣的朋友分享.我想,虽然我这不是正式论文或者教课书之类的,但写个开场 ...

  4. 泛函编程(4)-深入Scala函数类

    既然是泛函编程,多了解一下函数自然是免不了的了: 方法(Method)不等于函数(Function) 方法不是函数但可以转化成函数:可以手工转换或者由编译器(compiler)在适当的情况下自动转换. ...

  5. 泛函编程(34)-泛函变量:处理状态转变-ST Monad

    泛函编程的核心模式就是函数组合(compositionality).实现函数组合的必要条件之一就是参与组合的各方程序都必须是纯代码的(pure code).所谓纯代码就是程序中的所有表达式都必须是Re ...

  6. 泛函编程(29)-泛函实用结构:Trampoline-不再怕StackOverflow

    泛函编程方式其中一个特点就是普遍地使用递归算法,而且有些地方还无法避免使用递归算法.比如说flatMap就是一种推进式的递归算法,没了它就无法使用for-comprehension,那么泛函编程也就无 ...

  7. 泛函编程(27)-泛函编程模式-Monad Transformer

    经过了一段时间的学习,我们了解了一系列泛函数据类型.我们知道,在所有编程语言中,数据类型是支持软件编程的基础.同样,泛函数据类型Foldable,Monoid,Functor,Applicative, ...

  8. 泛函编程(5)-数据结构(Functional Data Structures)

    编程即是编制对数据进行运算的过程.特殊的运算必须用特定的数据结构来支持有效运算.如果没有数据结构的支持,我们就只能为每条数据申明一个内存地址了,然后使用这些地址来操作这些数据,也就是我们熟悉的申明变量 ...

  9. 泛函编程(24)-泛函数据类型-Monad, monadic programming

    在上一节我们介绍了Monad.我们知道Monad是一个高度概括的抽象模型.好像创造Monad的目的是为了抽取各种数据类型的共性组件函数汇集成一套组件库从而避免重复编码.这些能对什么是Monad提供一个 ...

随机推荐

  1. 转 jsp中 session的简单用法

    Session对象:是用来分别保存每一个用户信息的对象,以便于跟踪用户的操作状态.Session的信息保存在服务端,Session的ID保存在客户机的Cookie中.事实上,在许多服务器上,如果浏览器 ...

  2. Visual Studio 2012系统环境变量设置(命令行)

    方法1.运行脚本vsvars32.bat:D:\Program Files (x86)\Microsoft Visual Studio 11.0\Common7\Tools\vsvars32.bat ...

  3. MyBatis学习总结(七)——Mybatis缓存

    一.MyBatis缓存介绍 正如大多数持久层框架一样,MyBatis 同样提供了一级缓存和二级缓存的支持 一级缓存: 基于PerpetualCache 的 HashMap本地缓存,其存储作用域为 Se ...

  4. Asp.Net实现无刷新文件上传并显示进度条(非服务器控件实现)(转)

    Asp.Net实现无刷新文件上传并显示进度条(非服务器控件实现) 相信通过Asp.Net的服务器控件上传文件在简单不过了,通过AjaxToolkit控件实现上传进度也不是什么难事,为什么还要自己辛辛苦 ...

  5. CGContextTranslateCTM: invalid context 0x0. If you want to see the backtrace, please set CG_CONTEXT_SHOW_BACKTRACE environmental variable.

    最近在测试的过程中, 发现了SpringBoar的一个问题: SpringBoard[53] <Error>: CGContextTranslateCTM: invalid context ...

  6. CSS实现水平垂直同时居中的5种思路

    × 目录 [1]水平对齐+行高 [2]水平+垂直对齐 [3]margin+垂直对齐[4]absolute[5]flex 前面的话 水平居中和垂直居中已经单独介绍过,本文将介绍水平垂直同时居中的5种思路 ...

  7. javase基础复习攻略《七》

    容器是什么?通俗的讲容器指可以装其它东西的器皿,前面我们提到的数组便是容器的一种,容器的概念在JAVA中便可以理解为用来存储其它对象的器皿.本篇就让我们一起来认识一下JAVA为我们提供的容器类. 1. ...

  8. Java多线程系列--“基础篇”07之 线程休眠

    概要 本章,会对Thread中sleep()方法进行介绍.涉及到的内容包括:1. sleep()介绍2. sleep()示例3. sleep() 与 wait()的比较 转载请注明出处:http:// ...

  9. 转载--How to Install VMware Tools on CentOS 6.3

    源地址:http://www.ehowstuff.com/how-to-install-vmware-tools-on-centos-6-3/ VMware Tools is a group of u ...

  10. Web 前端开发精华文章集锦(jQuery、HTML5、CSS3)【系列二十】

    <Web 前端开发精华文章推荐>2013年第八期(总第二十期)和大家见面了.梦想天空博客关注 前端开发 技术,分享各种增强网站用户体验的 jQuery 插件,展示前沿的 HTML5 和 C ...