读阮一峰翻译的《lisp为什么这么先进》最后一段话非常有感触。
程序的形式,应该仅仅反映它所要解决的问题。代码中其他任何外加的形式,都是一个信号,(至少对我来说)表明我对问题的抽象还不够深。
我是这样来理解的,假如我想在一堆数据里检索某一个字符是否存在。
应该怎么写呢?
if(search(string,text)==ture)
print "yes"
else
print "no"
可是马上问题升级了,这个对象在内存中吗?
假如在磁盘的文件系统中,我是否应该先fopen一下。
可是这一堆数据我分开存放了,不是存放在一个文件中。
再假如,我是在一个数据中心,这一堆数据,其实是放在不同的机器上。
这些机器使用不同的处理器,不同的操作系统。fuucck。
我该怎么办?用网络通信吗(感谢网络其实已经屏蔽了相当多的东西。)?把数据复制过来,然后检索,还是远程过程调用,指示这台机器进行检索,然后将结果返回。
假如你最后解决问题了,你会发现代码会越来越庞大,而这些庞大的代码其实在做无关的事情,这些代码没有直接反映我想要解决的问题,仅仅是搭建了我想要解决问题所不得不搭建的平台。
但是mapreduce解决了这一切,有了mapreduce架构,你仍然可以写只和问题相关的代码。
数据放在一个分布式文件系统中,job将启动不同的task来做这件事情,它控制任务的自动负载均衡。
程序的形式,应该仅仅反映它所要解决的问题。代码中其他任何外加的形式,都是一个信号,(至少对我来说)表明我对问题的抽象还不够深。
太对了。