最近值得推荐的两篇文章《Map Reduce - the Free Lunch is not over?》以及《函数式编程另类指南》 [zz]

 

MapReduce

分布是Web应用的必然发展方向,当你的网站用户数量在10万内,你可以不懂什么叫分布,而当你的网站用户数量超过百万数量级,你不可能不懂什么叫做分布。

Google 的使命是整合全球信息,使人人皆可访问并从中受益。所以Google比一般网站更早遭遇了只有分布才能存储的数据,这导致了 Google File System的诞生。紧接着他们遇到的问题是怎么才能让公司所有的程序员都学会些分布计算的程序,因为他们用Google File System存储的海量数据分析起来需要的运算量也是惊人的。这就催生了MapReduce技术,通过把海量数据集的常见操作抽象为Map和Reduce两种集合操作,大大简化了程序员编写分布计算程序的难度。

很早以前 我翻译了Wiki上的MapReduce文档,可是很多人说还是看不懂。现在好了,孟岩写了一篇分析深入浅出的文章,把这个东西讲解得很清晰。请看《 Map Reduce - the Free Lunch is not over?

函数式编程

MapReduce论文中,没有忘记提及历史悠久的函数式编程给Google的天才们带来的启示:“我们的灵感来自lisp和其他函数式编程语言中的古老的映射和化简操作”( "Our abstraction is inspired by the map and reduce primitives present in Lisp and many other functional languages.")

由于中国教育的实用主义倾向,很多从业多年的程序员都有可能对函数式编程一无所知。当然这也跟整个计算机史的一些偶然和必然事件相关,这里就不赘述了。

或者我们可以说,函数式编程的思想更接近于推理、抽象等等人类思维逻辑的方式,而图灵机(那个牛比的无限纸带模型,想想自动织布机,其实就是那东西)更接近一个物理可实现的计算模型。

我们现行的计算机的原理就来自于图灵机,所以过程式的语言跟机器语言有比较简单的对应关系。而函数式语言在现行计算机上面的实现,实际上是一个计算模型的转换。这造成了函数式语言相对过程语言的效率低下,这也就限制了函数式语言在微型机上面的应用。

然而,随着微机平台运算能力的发展,特别是多核等技术的出现。如何提高微型机上应用程序的并行能力等等需求出现了。

有趣的地方正在于此,不管是Web平台还是客户端应用程序开发,趋势都是一样的并行!!!

这正是我认为函数式编程将越来越热的原因,至于函数式编程为什么有更好的并行特性,以及历史和特点等等的信息,还是去看《 函数式编程另类指南》吧。这么好的文章,我无论如何是写不出来的。

你可能感兴趣的:(reduce)