今天我和你将从计算机专用到通用的发明过程,看看世界进步的一个规律。
直到20世纪初,机械计算机不论多么复杂,都有两个缺陷。
首先,它们没有存储单元(或者说只能存一个结果),因此只能做一步运算(当然有些运算的一步很复杂)。如果要做今天看似非常简单的四则运算,由于有许多步,就必须用计算机做一步,停下来,把中间结果记录下来,再做下一步。
第二,很多复杂一点的、在工程上常用的计算,比如三角函数的计算,当时计算机是无法完成的。因此,计算机在这个时间点以前,只是我前面讲到的第一类发明。
此外,除了上述技术上的缺陷,20世纪初的机械计算机还存在一个建造的成本问题,建造它们不仅太贵,而且加工起来非常困难,这有点像今天第一代的激光雷达,因此根本无法普及。
任何产业都遵循一个普遍规律——效率不高,性价比极差的产品,哪怕里面的技术含量再高,都无法普及,最后可能就不了了之了。因此,用工程师的思维做事情,一定不要做成那样。
接下来,我和你要进行一次思维训练了。假如你回到20世纪初,会如何在巴贝奇工作的基础上改进计算机?
最容易找到的方法是沿着巴贝奇的思路继续设计更复杂,能够解决更多问题的计算机,然后投入研发,解决机械制造问题。这是大部分人能够想到的方法,符合人的天性。但是我之前讲过,苹果公司从来不这么做事情,它是有什么原料做什么菜,不会为了炒鱼香肉丝现养猪。
第二种思路则有点违背人的直觉,就是要先回到一个问题的本源。对于计算机来讲,要先搞清楚计算的本质到底是什么,争取一次性解决大批的计算问题。后来图灵和香农就是采用了这种思路。
关于图灵的工作以及图灵机,你可以回顾《第004封信 | 为什么计算机不是万能的》。今天我和你讲讲香农的工作。
香农今天为大家所知主要是作为信息论的发明人。当然,他还有一大贡献,就是设计能够实现布尔代数,也就是二进制运算的开关逻辑电路。今天所有的计算机处理器里面的运算功能,都是无数个这样的电路搭出来的,就如同你用乐高积木搭出一个复杂的房子一样。
香农的想法简单地讲,就是所有的加减乘除运算都可以变成布尔的二进制的逻辑运算(关于布尔的二进制运算,如果你有兴趣,可以读《数学之美》相应的章节),当然二进制逻辑运算是英国数学家布尔在19世纪发明的。
接下来,那些二进制的逻辑运算,可以通过简单的电路实现。也就是说,香农将加、减、乘、除运算和简单的电路之间搭起了一座桥梁。
香农是什么时候发明这个理论的呢?说出来你可能不信,是在他做硕士论文的时候。因此,他的那篇硕士论文后来被誉为了20世纪最重要的硕士论文。
今天有时我看到媒体上报道某个人发表了一篇《自然》和《科学》的论文,就说有了改变历史的、诺贝尔奖级的成果。对此,我只觉得写这种报道的人真是没有见过世面,如同数数超不过三的原始部落酋长。想当年香农还在读硕士的时候就奠定了今天所有数字电路设计的基础,那是何等彪炳千秋的贡献啊。
讲回到香农的思想, 我们可以把它总结为“模块化”和“等价性”两个方面。所谓模块化就是用少数简单的模块,搭建出各种复杂的功能,这是今天IT行业工程设计的核心思想。
比如,你要设计一个功能非常强大的程控交换机,里面基本的模块是非常简单的。你要设计一个超级计算机(即媒体上所说的超算),用大量相同的模块搭就可以了。很多学者讲,超算其实在计算机科学方面水平并不高,更多的是工程的成就,就是这个道理。
模块化的思想,使得IT产业和其它工业有很大的不同。在一般的工业产品中,有数量巨大,形状和功能各不同的组成部分,比如一辆汽车里的上万个零件,形状各异,就连一台钢琴,也有上千个不同的零件。
但是在IT产品中,常常是大量相同模块的复制,这也是IT产业能发展很快,摩尔定律能够成立的重要原因。 要理解IT这个产业,就要理解模块化。
同样,如果要理解为什么中国在IT产品上进步很快,把德国远远甩在后面,而在内燃机汽车、光学仪器等制造上,和德国差了一大截,而且没有赶得上的迹象,模块化也是一把钥匙。
前者是依靠大量简单而相同的模块拼出来的,而后者各个部分差异巨大,要依靠长期技术积累。前者容易后来居上,而后者的进步有待时日。今后是电动汽车的天下,它更像是一个IT产品而不是传统工业品,中国超过德国指日可待。
当然,计算机和IT产品容易通过模块化实现的背后,还有一个原因是等价性,即再复杂的计算都可以等价成很多加减乘除运算,再进而等价成开关电路的逻辑运算。 也就是说,实现了后者,前者就实现了。
在科学上,常常有两个问题,它们是等价的,解决了第一个问题,就等于解决了第二个问题,反之亦然。而科学的美妙之处又在于,这两个等价的问题,一个比另一个容易得多。
比如你要证明两个三角形是全等的,即它们的三条边和三个角都相等,这不是一件容易的事情。但是它的一个等价问题则简单得多,你只要证明两个角相等,另外有一条边相等即可,难度就降低了很多。
科学家的工作,是证明两件事情等价,而工程师的工作,则是要实现等价的桥梁。
对计算机来讲也是如此,像巴贝奇那样直接实现微积分的计算是一件非常困难的事情。把微积分计算变成加、减、乘、除,再变成简单的逻辑运算,则是容易的事情。至于怎么变,或者说怎么控制只能实现简单操作的计算机完成复杂的功能,就是软件工程师的事情了。
有了模块化和等价性的原则,计算机的设计思想就改变了。在20世纪之前,数学家们为不同的问题设计不同的计算机,这就如同汽车和轮船都是交通工具,但是长得完全不一样,里面的结构也不同。
在图灵那个时代,大家开始考虑能否设计一个通用的计算机硬件,再设计一组控制指令。对于不同的问题,计算机硬件不用改变,只需要改变控制指令的序列就能解决各种问题。
这个想法如同造一个变形金刚,机械部件还都是那些,至于它是作为汽车在地上跑,轮船在水上漂,还是飞机在天上飞,就看控制它的指令序列是如何设置的了。
可以讲,图灵和香农等人超越时代的地方在于, 别人发明计算机是把那些机器当作第一类发明来做的,而他们将它上升为第三类发明,即变成了平台。
回顾20世纪前三十年数学家们在计算机上的思考过程,对我们今天其实依然很有启发。除了模块化和等价性,我还有以下心得:
1. 人类总是根据不断增加的需求逐渐增加所发明的东西的复杂度,但是等非常复杂之后,就会有人开始进行更高层次的思考,搞清楚问题的本质,然后用简单的办法把它解决。 图灵和香农就是这样的人。
2. 世界上有很多东西,无论是自然界的物质、生命,还是人发明的计算机,都由大量极小的基本单元构成,它们分别是原子、细胞和晶体管。 探求世界奥秘和改变世界的过程,其实就是搞清楚它们的基本单元和构建它们之间关系的过程。
3. 在搞清楚上面两个问题之后,人类终于制造出了通用的,用程序控制的计算机。今天计算机的计算能力比1936年图灵思考计算的本质时高出了不知道多少万亿倍。但是,在计算机的数学原理上,比图灵那时并没有突破。
也就是说,图灵机划定了一条今天所有计算机(包括运行人工智能程序的)所能解决问题的理论极限,这就如同热力学第二定律为热机的效率划定了极限一样。但是,为什么世界上没有几个人相信永动机,却有大量的人在迷恋所谓的超人工智能呢?因为人们对后者缺乏常识性了解。
当然,有人可能会问是否有非图灵机的计算机,目前还没有,而且世界上现在也没有人做,因此你可以认定在我们生命结束之前恐怕是没有这样的计算机的。
有趣的是,最早用模块化原理实现可编程计算的,不是图灵、香农等人,而是在大西洋彼岸一个连他们二人的理论都不了解的德国人。关于他的故事我明天再和你讲。
网友评论