1.2 未来预测

书名:《代码的未来》
作者:松本行弘(Yukihiro Matsumoto)
译者:**周自恒 **


本试读章节摘自:『第1章 编程的时间和空间』

没有哪个人能够真的看到未来,也许正是因为如此,人们才想要预知未来,并对预言、占卜等方式充满兴趣。以血型、出生日期、天干地支、风水等为依据的占卜非常热门,事实上,杂志和早间电视节目中每次都有占卜的内容。

这些毫无科学依据的占卜方式是不靠谱的,虽说如此,占卜却还是大肆流行起来,其中有这样一些理由。

首先,最大的理由莫过于 “巴纳姆效应” 了。 “巴纳姆效应” 是一种心理学现象,指的是将一些原本是放之四海而皆准的、模棱两可的一般性描述往自己身上套,并认为这些描述对自己是准确的。比如,找一些受试者做一份心理测试问卷,无论受试者如何回答问卷上的问题,都向他们提供事先准备好的内容差不多的测试结果,大多数的受试者都会认为这个结果对自己的描述非常准确。你觉得 “占卜好准啊” ,其实多半都是巴纳姆效应所导致的。即使是随便说说的一些话,也会有人深信不疑,这说不定是人类的一种本能吧。人类的心理到底为什么会拥有这样的性质呢?

其次,有很多算命先生和自称预言家的人,实际上都是利用了被称为 “冷读术” (Cold reading)和 “热读术” (Hot reading)的技巧,来让人们相信他们真有不同寻常的 “能力” 。

冷读术,就是通过观察对方言行举止中的一些细微之处来进行揣测的技巧,就像夏洛克·福尔摩斯对他的委托人所运用的那种技巧差不多。例如通过说话的口音来判断出生地,通过衣服上粘着的泥土来判断对方之前去过什么地方等等。冷读术中的 “冷” 代表 “没有事先准备” 的意思。

相对地,热读术则是通过事先对对方进行详细的调查,来准确说出对方的情况(逢场作戏)。通过事先调查,掌握对方的家庭构成、目前所遇到的问题等等,当然能够一语中的,再加上表演得像是拥有超能力一样,总会有人深信不疑的。

结论,占卜之类的方法都不靠谱,它们都是不科学的。那么,有没有科学一点的方法能够预测未来呢?比如说,像艾萨克·阿西莫夫的基地系列中所描写的心理史学那样。

科学的未来预测

心理史学是阿西莫夫所创造的虚构学科。用气体分子运动论来类比,我们虽然无法确定每个气体分子的运动方式,但对于由无数气体分子所组成的气体,我们却可以计算出其整体的运动方式。同样地,对于由无数的人所组成的集团,其行为也可以通过数学的方法来进行预测。这样一类比的话,是不是感到很有说服力呢?

基地系列正是以基于心理史学的未来预测为轴,描写了以整个银河系为舞台,数兆人类的数千年历史。

然而,在现实中,特定个人的行动往往能够大幅左右历史的走向,即便是从整体来看,用数学公式来描述人类的行为还是太过复杂了,心理史学也许只能停留在幻想中而已。虽然心理史学只是一门完全虚构的学科,但这并不意味着不可能通过科学的方法来预测未来。虽然我们无法对未来作出完全准确的预测,但在限定条件下,还是可以在一定概率上对未来作出预测的,尤其是当我们要预测的不是未来人类的行动,而是纯粹预测技术发展的情况下。因此,IT 领域可以说是比较容易通过上述方式进行未来预测的一个领域了吧。

IT未来预测

之所以说 IT 领域的未来比较容易预测,最大的一个理由是:从计算机的出现到现在已经过了约半个世纪,但在这40多年的时间里,计算机的基本架构并没有发生变化。现在主流的 CPU 架构是英特尔的 x86 架构,它的基础却可以追溯到 1974 年问世的 8080,而其他计算机的架构,其根本部分都是大同小异。这意味着计算机进步的方向不会有什么很大的变化,我们有理由预测,未来应该位于从过去到现在这个方向的延长线上。

如果像量子计算机这样和现在的计算机架构完全不同的东西成为主流的话,我们的预测也就不成立了,不过还好,在短时间内(比如 5 年之类的)这样的技术应该还无法实现。此外,在这个行业中,5 年、10 年以后的未来已经算是相当遥远了,即便预测了也没有什么意义。总之目前来看,这样的趋势还是问题不大的。

支配计算机世界 “从过去到未来变化方向” 的一个代表性理论,就是在 1.1 中已经讲解过的 “摩尔定律” 。

LSI 中的晶体管数量每 18 个月增加一倍。

在摩尔定律的影响下,电路变得更加精密,LSI 的成本不断降低,性能不断提高。其结果是,

在过去的近 40 年中:

  • �价格下降
  • �性能提高�
  • 容量增大�
  • 带宽增加

这些都是呈指数关系发展的。呈指数关系,就像 “一传十、十传百” 一样,其增大的速度是十分惊人的。

图:性能呈指数关系增加
图:性能呈指数关系增加

而这一呈指数关系发展的趋势,预计在今后也会保持差不多的速度,这就是IT未来预测的基础。

另外一个需要考虑的问题,就是不同领域各自的发展速度。IT相关的各种数值的确都在以指数关系增加,但大家的步调也并不是完全一致的。例如,相比CPU处理速度的提高来说,存储器容量的增加速度更快,而与上面两者相比,数据传输速度的增加又显得跟不上了。这种发展的不平衡也会左右我们的未来。

极限未来预测

下面我们来介绍一种预测未来的时候所用到的,名叫 “极限思考法” 的简单技巧。曾提出过 “极限编程” (eXtreme Programming,简称 XP)手法的肯特 · 贝克,在其著作《解析极限编程》中这样写道:

当我第一次构建出XP时,我想到了控制板上的旋钮。每个旋钮都是一种(经验告诉我的)有效的实践,我将所有的旋钮都调到10,然后等着看会出现什么情况。

我们也可以用同样的方法来对未来作出预测。比如说, “如果计算机的价格越来越便宜,那当它便宜到极致的时候会怎么样呢?” “如果我们能够买到超高性能的计算机会怎么样呢?” “如果计算机的存储容量增大到超乎想象的程度会怎么样呢?” “如果网络带宽变得非常大的话会怎么样呢?”

大家怎么认为呢?

从价格看未来

首先,我们来看看价格。如果今后计算机的价格不断下降,这将意味着什么呢?我想这意味着两件事。第一,普通人所能拥有的计算机的性能将比现在大大提高;第二,现在还没有使用计算机的地方,以后都会安装上计算机。

这里有一个很有意思的现象,根据摩尔定律,关于计算机的很多指标都在发生剧烈的变化,但PC的价格似乎变化并没有那么大。1979 年发售的 NEC PC-8001 的定价为 16 万 8000 日元(约合人民币 1.3 万元),而现在主力 PC 的价格也差不多是在 10 万日元(约合人民币 8000 元)上下,即便考虑物价变化的因素,也还是出人意料地稳定。这可能意味着人类对于 PC 的购买力也就差不多只有这个程度,在不断提高的性能和价格之间在寻求一种平衡,因此我估计普及型计算机的价格今后也不太可能会大幅下降。关于将来 PC(PC 型计算机)的样子,我们会在 “性能” 一节中进行讨论。

关于在目前尚未开发的领域中安装计算机这件事,其实现在已经在上演了。例如,以前纯粹由电子电路所构成的电视机,现在也安装了 CPU、内存、硬盘等部件,从硬件上看和 PC 没什么两样,并且还安装了 Linux 这样的操作系统。此外,以前用单片机来实现的部分,现在也开始用上了带有操作系统的 “计算机” ,在这样的嵌入式系统中,软件所占的比例越来越大。今后,可以说外观长得不像计算机的计算机会越来越多,为这样的计算机进行软件开发的重要性也就越来越高。例如,现在由于内存容量和 CPU 性能的限制而无法实现的开发工具和语言,以后在 “嵌入式软件” 开发中也将逐渐成为可能。

从性能看未来

从近10年计算机性能变化的趋势来看, CPU 自身的性能提高似乎已经快要到达极限了。近几年,很多人会感觉到PC的时钟频率似乎到了 2 GHz 就再也上不去了。这种性能提高的停滞现象,是由耗电、漏电流、热密度等诸多原因所导致的,因此从单一 CPU 的角度来看,恐怕无法再继续过去那样呈指数增长的势头了。

那么这样下去结果会怎样呢?要推测未来计算机的性能,最好的办法是看看现在的超级计算机。因为在超级计算机中为了实现高性能而采用的那些技术,其中一部分会根据摩尔定律变得越来越便宜,在 5 到 10 年后的将来,这些技术就会被用在主流 PC 中。

那么,作为现在超级计算机的代表,我们来看看2012年目前世界最快的超级计算机 “京” 的性能数据。

超级计算机“京”的指标:

  • 性能:10000TFLOPS
  • 价格:1120 亿日元(约合人民币 90 亿元)
  • CPU 数量:88128 个
  • 核心数量:705024 个
  • 内存:2.8PB(平均每个 CPU 拥有 32GB)

虽然它的性能看起来都是些天文数字,但再过20年,这种程度的性能很可能就只能算是 “一般般” 了。

说不定在不久的将来,1024 核的笔记本电脑就已经是一般配置了。如果是服务器环境的话,也许像现在的超级计算机这样数万 CPU、数十万核心的配置也已经非常普遍了。难以置信吧?在这样的环境下,编程又会变成什么样子呢?为了充分利用这么多的 CPU,软件及其开发环境又会如何进化呢?

考虑到这样的环境,我认为 “未来的编程语言” 之间,应该在如何充分利用CPU资源这个方面进行争夺。即便是现在,也已经有很多语言提供了并行处理的功能,而今后并行处理则会变得愈发重要。如果能将多个核心的性能充分利用起来,说不定每个单独核心的性能就变得没有那么重要的。

从容量看未来

存储器的容量,即内存容量和外存(硬盘等)容量,是增长速度最快的指标。2012 年春,一般的笔记本电脑也配备了 4GB 的内存和 500GB 左右的硬盘,再加上外置硬盘的话,购买 2 ~ 3TB 的存储容量也不会花上太多的钱。一个普通人所拥有的存储容量能达到 TB 级,这在10年前还是很难想象的事情,而仅仅过了没多少时间,我们就可以在电子商店里轻松买到 TB 级容量的硬盘了。

那么,存储器容量的增加,会对将来带来哪些变化呢?大家都会想到的一点是,到底从哪里才能搞到那么多的数据,来填满如此巨大的容量呢?

实际上,这一点根本用不着担心。我们来回想一下,无论存储容量变得多大,不知怎么回事好像没过多久就又满了。为了配合不断增加的存储容量,图片数据和视频数据都变得更加精细,尺寸也就变得更大。另外,软件也变得越来越臃肿,占用的内存也越来越多。以前的软件到底是怎样在那么小的内存下运行得如此流畅的呢?真是想不通啊。

因此,问题是我们要如何利用这些数据呢?也许面向个人的数据仓库之类的数据分析工具会开始受到关注。当然,这种工具到底应该在客户端运行,还是在服务器端运行,取决于性能和带宽之间的平衡。

在存储器容量方面,与未来预测相关并值得关注的一个动向,就是访问速度。虽然容量在以惊人的速度增长,但读取数据的速度却没有按照匹配的速度来提高。硬盘的寻址速度没什么长进,总线的传输速度也是半斤八两。不过,像闪存这样比硬盘更快的外部存储设备,现在也已经变得越来越便宜了,由闪存构成的固态硬盘(Solid State Drive,SSD)已经相当普遍,完全可以作为硬盘的替代品。按照这个趋势发展下去,在不久的将来,说不定由超高速低容量的核心内置缓存、高速但断电会丢失数据的主内存(RAM),以及低速但可永久保存数据的外部存储器(HDD)所构成的层次结构将会消失,取而代之的可能将会是由大规模的缓存,以及高速且能永久保存数据的内存所构成的新的层次结构。如果高速的主内存能够永久保存数据,依赖过去结构的数据库等系统都将产生大规模的结构改革。实际上,以高速 SSD 为前提的数据库系统,目前已经在进行研发了。

从带宽看未来

带宽,也就是网络中数据传输的速度,也在不断增大。一般家庭的上网速度,已经从模拟调制解调器时代的不到 100kbit/s,发展到 ADSL 时代的 10Mbit/s,再到现在光纤时代的超过 100Mbit/s,最近连理论上超过 1Gbit/s 的上网服务也开始面向一般家庭推出了。

网络带宽的增加,会对网络两端的平衡性产生影响。在网络速度很慢的时代,各种处理只能在本地来进行,然后将处理结果分批发给中央服务器,再由中央服务器进行统计,这样的手法十分常见。这就好像回到了计算机还没有普及,大家还用算盘和账本做着 “本地处理” 的时代。

然而后来,各种业务的处理中都开始使用计算机,每个人手上的数据都可以发送到中央计算机并进行实时处理。但由于那时的计算机还非常昂贵(译者注:原文的 “效果” 应该是笔误,正确的应该是 “高价” ),因此只是在周围布置了一些被称为 “终端” 的机器,实际的处理还是由设在中央的大型计算机来完成的。那是一个中央集权的时代。

在那以后,随着计算机价格的下降,每个人都可以拥有自己的一台计算机了。由于计算机可以完成的工作也变多了,因此每个人手上的 “客户端” 计算机可以先完成一定程度的处理,然后仅仅将最终结果传送给位于中央的 “服务器” ,这样的系统结构开始普及起来,也就是所谓的 “客户端/服务器系统” (Client-Server system),也有人将其简称为 “CS 系统” 。

然而,如果网速提高的话,让服务器一侧完成更多的处理,在系统构成上会更加容易。典型的例子就是万维网(World Wide Web,WWW)。在网速缓慢的年代,为了查询数据而去直接访问一个可能位于地球背面的服务器,这种事是难以想象的,如此浪费贵重的带宽资源,是要被骂得狗血淋头的。话说,现在的网络带宽已经像白菜一样便宜了,这样一来,客户端一侧只需要准备像 “浏览器” 这样一个通用终端,就可以使用全世界的各种服务了,如此美好的世界已经成为了现实。由于大部分处理是在服务器一侧执行的,因此乍看之下仿佛是中央集权时代的复辟,不同的是,现在我们可以使用的服务多种多样,而且它们位于全世界的各个角落。

但是,计算机性能和带宽之间的平衡所引发的拔河比赛并没有到此结束。近年来,为了提供更丰富的服务,更倾向于让 JavaScript 在浏览器上运行,这实际上是 “客户端/服务器系统” 换个马甲又复活了。此外,服务器一侧也从一台计算机,变成了由许多台计算机紧密连接所构成的云计算系统。换个角度来看的话,以前由一台大型机所提供的服务,现在变成由一个客户端/服务器结构来提供了。

今后,在性能和带宽寻求平衡的过程中,网络彼此两端的系统构成也会像钟摆一样摇个不停。从以往的情况来看,随着每次钟摆的来回,系统的规模、扩展性和自由度都能够得到提高,今后的发展也一定会遵循这样一个趋势。

小结

在这里,我们瞄准从过去到现在发展方向的延长线,运用极限思考法,尝试着对未来进行了预测。书籍是可以存放很久的,5 年、10 年之后再次翻开这本书的时候,到底这里的预测能不能言中呢?言中的话自然感到开心,没言中的话我们就一笑了之吧,胜败乃兵家常事嘛。


下一章:『编程语言的过去、现在和未来』

推荐阅读更多精彩内容