吴军的谷歌方法论 | 009 计算机工作的原理和它的本质特征
上周的内容主要围绕发明背后的逻辑展开,本周介绍 计算机工作的原理和它的本质。
为什么算盘是计算机?
虽然大家今天都在用计算机,但是大部分人对它为什么能算题其实并不清楚,以至于把它想得很神奇,特别是这两年人工智能大热起来之后。
几年前人们谈起计算机时还会说它笨,甚至嘲笑Google什么都是基于机器算法的服务应付了很多细微的场景,今天这些人来了一个180度大转弯,觉得人工智能超级聪明。
在历史上有一个现象,把一个历史人物捧上天的和把他打入地狱的是同一批人,这并非人的偏见所致,而是缺乏了解所致。
那么从业者对计算机是否十分了解呢?也不尽然。我在过去的十多年里大约面试过近千位的求职者和创业者,发现对计算机的领悟能让我从内心赞叹的人,不过50人左右,也就是5%吧。
大部分人能胜任一些工作,比如编写一些程序,或者当一些产品出了问题时能修修补补,用我们的行话说时修补漏洞(Fix Bug),但是给他们一个尚未知道解决办法的问题,让他们用计算机这个工具来解决,大部分人是做不到的,因为他们对计算机能做什么,不能做什么并不清楚。
也就是说,对计算机内在的工作逻辑不清楚。当然,今天不是讲计算机的原理,而是通过发明计算机过程的内在逻辑,提高认知水平。
要讲清楚计算机工作的原理和它的本质特征,其实用一个很简单的工具就可以说清楚。这个工具就是中国人用了上千年的算盘。
算盘能否算作是计算机呢?可以的!
这倒不是因为我要炫耀国粹,而是硅谷的计算机博物馆的看法。如果你走进位于硅谷的、世界上最大的计算机博物馆,一进门最显眼的地方放着一个大展牌,上面写着“计算机2000年的历史”,旁边放着一把中国的算盘。
看到这个展牌的人会有一个疑问,为什么计算机的历史不是从1946年埃尼亚克(Eniac)诞生时算起,而是往前推进了两个千年纪,然后大家看到算盘就明白了。
算盘真是中国人发明的么?如果按照最早发明的时间来看,应该不是。最早的算盘(活着说类似算盘的计算工具)出现在美索不达米亚地区。
接下来,到了公元前五世纪,希腊出现了和中国算盘颇为相似的铜质(或木质)计算工具,今天英文里面的算盘一词 abacus 便是源于古希腊文[ 文字:(άβακασ)]
中国出现算盘最早可能在东汉到三国时期,比古希腊至少晚了5个世纪。不过古希腊的算盘没有被当成是计算机,而中国的却被认为如此,这又是何原因呢?
古希腊人的算盘和中国的在外观上很相似。古希腊的算盘实际上是用一些小石块帮助计算过程中的计数,但是计算的工作还是要靠心算。也就是说,古希腊的算盘又了存储的功能,但本身病没有计算的功能,因此不是计算机。
中国的算盘从外观上看并不比古希腊的有多大改进,但是它是靠一套珠算口诀来控制算盘操作,这种口诀相当于今天控制计算机运行的指令。
真正会打算盘的人,都不是靠心算的,而只是根据背熟了的珠算口诀拨动算盘珠子而已,人所提供的不过是机械动能,而非运算能力。计算则是算盘在口诀指令的控制下完成的机械运动,这就和图灵机所描述的机械运动相一致了。
为了便于大家理解,不妨看一个实例。
我们都知道一句俗话“三下五除二”,这其实来自于一句珠算口诀。它是做加法时,“加上三”的一种操作指令,意思是说,加三时,可以先把算盘上半部分代表的五的珠子落下来,再从下面扣除两个珠子,加三的计算就完成了。
这其实从数学上很容易解释,加上3就等于先加5再减去2。会打算盘的人,是不需要熟悉数学的,甚至不需要什么心算能力,只要背下这些口诀,操作的时候别拔错珠子,就能很快地算题。换句话说,如果猴子能背下这些口诀, 它照样能打算盘。
为了验证过去的会计们心算能力未必很强,我在写《文明之光》关于计算机的一章时,专门找来两个老会计和他们比心算,我发现他们心算能力极差,甚至不如今天好一点的小学生。但是,给他们算盘,他们算题速度快得难以置信。
现在我总结一下,有了口诀控制,或者说指令控制,算盘才能算计算机,否则,它只是一个辅助的计数工具。接下来我问你一个问题,对于算盘这种计算机,到底是这个实物重要,还是那一套口诀重要呢?
我认为是口诀重要,没有了木头边框、里面一大堆算珠的算盘,你还可以发明其它样式的算盘,但是没有口诀,不会算数的人是无法让算盘工作的。
将这个道理延伸到今天的计算机领域,计算机的软件就相当于口诀,要远比硬件,即那个算盘实物,重要得多。今天,有些计算机就显得比其他的聪明。
比如Google的AlphaGo能下围棋,IBM的沃森能看病,它们和你家的计算机最大的差别是在于软件商。你买几台在家里,今天其实花不了多少钱,但是它们下围棋的水平和AlphaGo可就差远了。
人类发明的大部分东西,都有一个特定的功能。比如纺纱机能纺纱,汽车能行驶,电池能供电储能。但也有一些东西,它的功能取决于你如何使用它。
比如一个锄头,虽然可以锄地,但是农民起义军可能会把它当成武器,农民在家可能会把它用作杠杆,做扁担,甚至是顶门的工具。
计算机属于第二类工具,它可以做很多事情,具体做什么,则看背后的人是如何操控它们了。我在很多场合讲,不用担心人工智能本身,要担心的是背后操控它的人。
一个机器学习算法,既可以帮助系统安全员发现安全漏洞,也可以被犯罪分子用来分析某个单位计算机系统的安全漏洞,并进行攻击。这是我今天要讲的第一个要点。
今天要说的第二个要点是,发明有三种。
第一种是发明一个完成特定功能的新设备、新仪器,或者新方法。比如,你发明了电动汽车,就属于这一种。我们大部分人对发明的认知只停留在这一类。
第二种是在原有的设备基础上发明一种新的使用方法。比如很多年前,算盘只有加减法口诀,因此它只是一个加减法器。但是后来,有人发明了乘法口诀,算盘就能做乘法了。
我们人尝尝注重的是第一种发明,而忽视第二种发明。关于第二种发明的重要性,我不妨给你举三个例子,你就容易理解了。
第一个例子,阿司匹林的使用。最早的时候,阿司匹林是作为镇痛、退烧药发明出来的,但是今天它的一个最大的用途是预防血栓,很多中老年人定期服用阿司匹林,这使得人类心血管疾病的死亡率下降很多。
第二个例子,“伟哥”(威而刚)这种药的主要成分是一氧化氮(在医学上的作用是内皮细胞松弛因子),它最初是被用来治疗心脏病的。
后来医生们发现,试用这种新药的心脏病患者很少按照要求在试验完毕后把多余的药交回去。进一步调查才发现,原来病人用了这种药后,男性的机能增强了,于是它今天成为了治疗男性某种疾病的药物。
更广泛地讲,今天很多药品虽然一开始是针对疾病A研制的,但后来都发现对其他疾病的治疗有帮助。比如斯坦福医学院就发现,一款原来用于治疗心脏的药,后来对治疗胃病很有效。
第三个例子,是我们计算机领域使用的GPU,即图形处理器。最早它是用于图像处理的,比如做显示卡。
但是后来计算机科学家们发现,用它搭建超级计算机,比传统的处理器CPU更有效,或者说单位能耗的计算能力更强,于是它就成为了进行海量计算的超级机的核心部件。再后来,大家发现它做人工智能中的机器学习计算非常有效,于是第一代的AlphaGo就大量食用了GPU。
了解了第二种发明,你工作时的视野就拓宽了。很多另辟蹊径做出发明创造的人,其思路其实就是把现有的技术用好。当苹果推出iPod时,那就是中关村已经烂大街的MP3播放器的翻版,但是它同时推出了音乐下载服务,大家就锁,“咦,想不到这东西还能这样玩”。
接下来简单说说第三种发明。有些发明,虽然一开始为了某一个目的,属于第一类发明,但是后来很多人在此基础上将它进行功能性的扩张,它就成为了一个平台,这就成为了第三种发明——平台的发明。
下面我们简单地看三个这种发明的例子:
第一个例子,Google的搜索引擎,最初它只是用于查找信息,后来变成了互联网入口。
第二个例子,Facebook的社交网站,后来成为了互联网2.0的平台,大家在上面发布各种应用软件。
第三个例子,亚马逊公司内部的应用软件接口,开始只是为了不同公司里面的团队协调工作,后来成为了云计算AWS的用户接口,并且让亚马逊在世界云计算领域执牛耳。
计算机(包括算盘),或多或少具有平台的特点更确切地讲,通常计算机硬件的研究是尽兴第三类发明,做大家都能够使用的平台,而软件的研究属于第二类,在现有平台上,做更多的事情。
理解了三类发明,希望对你的工作有所启发。
计算机从简单到复杂
算盘,它让古代中国人在记账上非常先进。但是使用算盘时,人类会遇到一个不方便的地方,就是要求打算盘的人牢记珠算口诀,并且练习,熟练到成为一种本能的反应。这时候的人其实不过是一个有动力的机器而已,但是做到这一点又谈何容易。
算盘的另一个缺陷是,万一不小心拨错了一个珠子,差错可是很麻烦的,因此打算盘的人通常至少要打两遍。即便如此,出错也是经常的。
上一代会计都有这样的体会,有时因为两分钱对不上号,要来回来去打一晚上算盘。
为了解决自动计算的难题,人们就想要设计一种能够通过机械传动完成计算的机器。人类的这种努力其实在古代就有,但是都不太成功。
第一个成功实现用机器实现简单计算功能的,是我所钦佩的 法国数学家帕斯卡(Blaslse Pascal),他发明了一种被称为机械计算机的装置。
帕斯卡的这个机械装置其实原理很简单,它由上下两组齿轮构成,每一组齿轮可以代表一个十进制的数字,在齿轮组外面有对应的一排小窗口,每个窗口里又刻了0~9十个数字的转轮,用来显示第一个操作数和计算结果。
该计算机的动力来自于一个手工的摇柄,要计算时,将上下两组齿轮拨到相应的位置,比如要做加法运算15+29,就把第一组的两个齿轮分别拨到1和5的位置,
第二组齿轮上相应的齿轮拨到2和9的位置。然后转动手柄直到转不动为止,在这个过程中,齿轮带动有数字的小转轮运转,最后停到应该停的位置,这时计算结果就出现在计算机上方的小窗口里。
帕斯卡计算机操作很简单,但显然不可能算得很快,甚至比算盘慢得多。不过即使如此,帕斯卡计算机也是一个巨大的进步,因为计算是自动的,只要输入的数字不错,答案就错不了。这也就是说,计算机的控制,由人变成了机械。
在所有控制机械计算器的部件中,最复杂的是一个逢十进一的机械装置。这种进位装置在机械钟表中经常用到,帕斯卡用到的就是类似的装置。但是,这个装置对复杂的机械计算机并不是很方便。
后来大数学家莱布尼茨为了改进帕斯卡的计算机,花了足足40年的时间。他先后制作了两个机械计算机,它们可能做乘法,这些机械今天经过修复后,居然可以工作。但是和帕斯卡的计算机一样,它们并不好用。
不过,后人要感谢莱布尼茨在研制计算机的过程中发明了一种转轮,它可以很好地解决进位的问题,在随后的三个世纪里,各种机械计算机都要用到这种转轮。
除了改进机械计算机,莱布尼茨还发明了二进制,它成为了今天计算机的基础,这一点以后还会仔细讲。
不过今天要说的一点是,莱布尼茨所设计的计算器还是十进制的,和二进制无关,而他发明二进制,从某种程度上是为了证实上帝的伟大。关于这一点,他还给康熙皇帝写了封信,希望后者皈依基督教。
讲回到早期的计算机,无论是算盘还是欧洲人发明的机械计算器,其实都只能做加、减、乘、除运算,从这个角度讲,它们是专用的。当然,从能够做各种不同的四则运算来讲,它们也是通用的平台。
接下来的问题就是,它们能否做更多的事情,或者比如加、减、乘、除更复杂的事情。
在莱布尼茨之后的近两百年里,大家一直在考虑这个问题。直到十九世纪中期,英国数学家巴贝奇才有了本质的突破。
如果说世界上有天才的话,巴贝奇(Charles Babbage,1791—1871)必定入选。他24岁时成为了英国皇家学会会员(院士),后来担任了剑桥卢卡斯数学教授,这个讲席教授可是以前牛顿担任的。巴贝奇参与创建了英国天文学会和统计学会,还是科学管理的先驱。
在研究科学管理时,他整天琢磨怎么能把脑力计算的工作让机械来做,并且从法国人杰卡德发明的提花织布机上得到了灵感,马上灵光一动地想到了,既然人们能够按照设计的旨意控制织布机的运动,编制出各种图案,为什么不能够用一种相应的控制流程来控制齿轮的运动,从而自动计算不同函数的数值呢?
巴贝奇对当时齿轮机械控制的原理非常了解,他开始设计运算所对应的齿轮控制流程,这个流程一旦启动,它就控制齿轮的转动,并且在流程结束时,让机械停止下来,停下来的位置就是答案。
为了证实他的这种想法时可行的,他决定用机械来解决微积分计算的问题。在20岁的时候,巴贝奇便设计制造了一个简单的差分机,让它完成微积分中一些简单的运算。
在巴贝奇那个时代,机械加工水平极差,整个计算机从设计绘图到零件加工,都得他自己亲自动手。好在他从酷爱机械加工,车、钳、刨、铣、磨,样样拿手,而他那位银行家的父亲让他不必为生计发愁。
在孤军奋战了10年后,巴贝奇终于造出来一台差分计算机,运算精度达到了6位小数,当即就为大家算出好几种函数表。后来证明,这种机器非常适合于编制航海和天文方面的数学用表。
接下来巴贝奇就致力于研制一台有20位精度的差分计算机。由于有第一台的成功经验,他幸运地拿到了英国政府1.7万英镑的资助,这在当时是一笔巨款,因为制造一台蒸汽机车的费用还不到800英镑。
但是巴贝奇显然高估了当时的机械加工的水平,第二胎差分机大约有25000个零件,每个零件的误差不得超过千分之一英寸,即便用21世纪的加工设备和技术,要想造出这种高精度的机械也绝非易事。
在随后的10年间,巴贝奇不仅花光了政府的资助,自己还倒贴了1.3万英镑。人们都说他是骗子,著名使人拜伦爵士的女儿阿达(Ada),也就是洛普雷斯伯爵夫人,成为了他的支持者和研究伙伴。
阿达当时只有27岁,有着极高的数学造诣和研究热情。在她的帮助下(包括财力的资助),巴贝奇的工作取得了很大的进展,但不幸的是,她在36岁时英年早逝了。
阿达去世后,巴贝奇又独自坚持了20年,最终只完成了这台计算机的一小部分。因此他是带着遗憾离开人世的。所幸的是,巴贝奇和阿达留下了30种不同的设计方案,近2100张组装图和50000张零件图,清晰地告诉了后人他们的设计思想,而今天的人根据他们的设计图制造出了能工作的差分计算机。
这台差分机在制造完成之后重达4吨,它的一个副品保留在今天硅谷的计算机博物馆里。这里顺便说一下,美国国防部主导设计了一种程序语言,就是以阿达的名字Ada命名的。
最后,来梳理一下思维的脉络:
-
从算盘,到帕斯卡、莱布尼茨、最后到巴贝奇,你可以看出发明的一个轨迹,就是为了让一种设备完成更多、更复杂的功能,发明变得越来越复杂了。这是发明的常态。为什么我们讲专业知识重要,因为没有精深的专业知识,就无法应对越来越复杂的工作。
-
在上述过程中,我们再次看到“控制”对于计算机的重要性,或者说它是计算机的本质之一。控制从人、到简单机械,到复杂机械,这是一个渐进的过程,但是设计这些控制过程的永远是人。
3. 巴贝奇的悲剧在于他的想法太超前,以至于当时的工业基础无法满足他的设计要求。从这个意义上讲,巴贝奇更多地是科学家,而不是工程师。我在《见识》一书中介绍了前苏联设计和制造“米格25”战斗机的成功经验,从那个案例中可以看出好的工程师是如何在边界之内做事情的。
- 显然,我们不能为了做越来越复杂的事情,就把设备越做越复杂,事实上,当什么东西变得太复杂后,就要有人换一个思路进行发明,将它重新变得简单,这也是发明的大趋势。
计算机从专用到通用背后的逻辑
今天和你将从计算机专用到通用的发明过程,看看世界进步的一个规律。
直到20世纪初,机械计算机不论多么复杂,都有两个缺陷。
首先,它们没有储存单位(或者说只能存一个结果),因此只能做一步运算(当然有些运算的一步很复杂)。如果要做今天看似非常简单的四则运算,由于有许多步,就必须用计算机做一步,停下来,把中间结果记录下来,再做下一步。
第二,很多复杂一点的、在工程上常用的计算,比如三角函数的计算,当时计算机是无法完成的。因此,计算机在这个时间点以前,只是前面讲到的第一类发明。
此外,除了上述技术上的缺陷,20世纪初的机械计算机还存在一个建造的成本问题,建造它们不仅太贵,而且加工起来非常困难,这有点像今天第一代的激光雷达,因此根本无法普及。
任何产业都遵循一个普遍规律——效率不高,性价比极差的产品,哪怕里面的技术含量再高,都无法普及,最后可能就不了了之。因此,用工程师的思维做事情,一定不要做成那样。
接下来,我和你要进行一次思维训练了。假如你回到20世纪初,会如何在巴贝奇工作的基础上改进计算机?
最容易找到的方法是沿着巴贝奇的思路继续设计更复杂,能够解决更多问题的计算机,然后投入研发,解决机械制造问题。这是大部分人能够想到的办法,符合人的天性。但是我之前讲过,苹果公司从来不这么做事情,它是有什么原料做什么菜,不会为了炒鱼香肉丝现养猪。
第二种思路则有点违背人的直觉。就是要先回到一个问题的本源。对于计算机来讲,要先搞清楚计算的本质到底是什么,争取一次性解决大批的计算问题。后来图灵和香农就是采用了这种思路。
关于图灵的工作以及图灵机,你可以回顾《为什么计算机不是万能的》。今天我和你讲讲香农的工作。
香农今天为大家所知主要是作为信息论的发明人。当然,他还有一大贡献,就是设计能够实现布尔代数,也就是二进制运算的开关逻辑电路。今天所有的计算机处理器里面的运算功能,都是无数个这样的电路搭出来的,就如同你用乐高积木搭出一个复杂的房子一样。
香农的想法简单地讲,就是所有的加减乘除都可以变成布尔的二进制的逻辑运算(关于布尔的二进制运算,如果你有兴趣,可以读《数学之美》相应的章节),当然二进制逻辑运算是英国数学家布尔在19世纪发明的。
接下来,那些二进制的逻辑运算,可以通过简单的电路实现。也就说,香农将加、减、乘、除运算和简单的电路之间搭起了一座桥梁。
香农是什么时候发明这个理论的呢?说出来你可能不信,是在他做硕士论文的时候。因此,他的那篇硕士论文后来被誉为了20世纪最重要的硕士论文。
今天有时我看到媒体上报道某个人发表了一篇《自然》和《科学》的论文,就说有了改变历史的、诺贝尔奖级的成果。对此,我只觉得写这种报道的人真是没有见过世面,如同数数超不过三的原始部落酋长。想当年香农还在读硕士的时候就奠定了今天所有数字电路设计的基础,那是何等彪炳千秋的贡献啊。
讲回到香农的思想,我们可以把它总结为“模块化”和“等价性”两个方面。所谓模块化就是用少数简单的模块,搭建出各种复杂的功能,这是今天IT产业工程设计的核心思想。
比如,你要设计一个功能非常强大的程控交换机,里面基本的模块是非常简单的。你要设计一个超级计算机(即媒体上所说的超算),用大量相同的模块塔就可以了。很多学者讲,超算其实在计算机科学方面水平并不高,更多的是工程的成就,就是这个道理。
模块化的思想,使得IT产业和其它工业有很大的不同。在一般的工业产品中,有数量巨大,形状和功能各不同的组成部分,比如一辆汽车里的上万个零件,形状各异,就连一台钢琴,也有上千个不同的零件。
但是在IT产品中,常常是大量相同模块的复制,这也是IT产业能发展很快,摩尔定律能够成立的重要原因。要理解IT这个产业,就要理解模块化。
同样,如果要理解为什么中国在IT产品上进步很快,把德国远远甩在后面,而在内燃机汽车、光学仪器等制造上,和德国差了一大截,而且没有赶得上的迹象,模块化也是一把钥匙。
前者是依靠大量简单而相同的模块拼出来的,而后者各个部分差异巨大,要依靠长期技术积累。前者容易后来居上,而后者的进步有待时日。今后是电动汽车的天下,它更像是一个IT产品而不是传统工业品,中国超过德国指日可待。
当然,计算机和IT产品容易通过模块化实现的背后,还有一个原因是等价性,即在复杂的计算都可以等价成很多加减乘除运算,再进而等价成开关电路的逻辑运算。也就是说,实现了后者,前者就实现了。
在科学上,常常有两个问题,它们是等价的,解决了第一个问题,就等于解决了第二个问题,反之亦然。而科学的美妙之处又在于,这两个等价的问题,一个比另一个容易得多。
比如你要证明两个三角形是全等的,即它们的三条边和三个角都相等,这不是一件容易的事情。但是它的一个等价问题则简单得多,你只要证明两个角相等,另外一条边相等即可,难度就降低了很多。
科学家的工作,是证明两件事情等价,而工程师的工作,则是要实现等价的桥梁。
对计算机来讲也是如此,像巴贝奇那样直接实现微积分的计算是一件非常困难的事情。把微积分计算变成加、减、乘、除,再变成简单的逻辑运算,则是容易的事情。至于怎么变,或者说怎么控制只能实现简单操作的计算机完成复杂的功能,就是软件工程师的事情了。
有了模块化和等价性的原则,计算机的设计思想就改变了。在20世纪之前,数学家们为不同的问题设计不同的计算机,这就如同汽车和轮船都是交通工具,但是长得完全不一样,里面的结构也不同。
在图灵那个时代,大家开始考虑能否设计一个通用的计算机硬件,再设计一组控制指令。对于不同的问题,计算机硬件不用改变,只需要改变控制指令的序列就能解决各种问题。
这个想法如同造一个变形金刚,机械部件还都是那些,至于它是作为汽车在地上跑,轮船在水上漂,还是飞机在天上飞,就看控制它的指令序列是如何设置的了。
可以将,图灵和香农等人超越时代的地方子啊雨,别人发明计算机是把那些机器当作第一类发明来做的,而他们将它上升为第三类发明,即变成了平台。
回顾20世纪前三十年数学家们在计算机上的思考过程,对我们今天其实依然很有启发。除了模块化和等价性,我还有一下心得:
1. 人类总是根据不断增加的需求逐渐增加所发明的东西的复杂度,但是等非常复杂之后,就会有人开始进行更高层次的思考,搞清楚问题的本质,然后用简单的办法把它解决。图灵和香农就是这样的人。
-
世界上有很多东西,无论是自然界的物质、生命,还是人发明的计算机,都由大量极小的基本单元构成,它们分别是原子、细胞和晶体管。探求世界奥秘和改变世界的过程,其实就是搞清楚它们的基本单元和构建它们之间关系的过程。
-
在搞清楚上面两个问题之后,人类终于制造出了通用的,用程序控制的计算机。今天计算机的计算能力比1936年图灵思考计算的本质时高出了不知道多少万亿倍。但是,在计算机的数学原理上,比图灵那时并没有突破。
也就是说,图灵机划定了一条今天所有计算机(包括运行人工智能程序的)所能解决问题的理论极限,这就如同热力学第二定律为热机的效率划定了极限一样。但是,为什么世界上没有几个人相信永动机,却有大量的人在迷恋所谓的超人工智能呢?因为人们对后者缺乏常识性了解。
当然,有人可能会问是否有非图灵机的计算机,目前还没有,而且世界上现在也没有人做,因此你可以认定在我们生命结束之前恐怕是没有这样的计算机的。
有趣的是,最早用模块化原理实现可编程计算,不是图灵、香农等人,而是在大西洋彼岸一个连他们二人的理论都不了解的德国人。
事倍功半 vs 事半功倍
今天继续讲讲在计算机发展过程中的一些思考。当然,讲故事的目的是为了说明事倍功半 vs 事半功倍的做事办法。
昨天提到最早用模块化原理实现可编程计算机的是一位德国人,他的名字叫做楚泽(Konrad Zuse),生于1910年,在德国的大学里读的是力学。
在楚泽那个年代,数学和力学是不分家的,因此他对数学算是非常精通的。大学毕业后,正值德国备战期间,因此楚泽到了一家飞机制造厂从事飞机的设计工作,这项工作涉及大量繁琐的计算,而当时真正能帮上忙的工具只有计算尺。
很快楚泽就发现很多计算其实使用公式都是相同的,只是要代入不同的数据而已,比如计算飞机机翼宽度从10米到11米之间,每变化一厘米时它的升力。这种重复的工作完全应该交给机器去完成,而不是动用大量的专业人才。有了这个想法后,楚泽于1936年辞职回家,自己去研究这种能够计算的机器了。
在此之前,楚泽对计算机一无所知。同年,图灵博士已经在大洋的彼岸提出了可计算性理论,但由于楚泽并并不属于数学家的圈子,因此直到二战结束都不知道图灵的理论,楚泽甚至不知道一个世纪前的巴贝奇的工作。当时,他才26岁,完全是凭着一股热情,加上良好的数学基础,独自一人在家研制能够计算的机器。
所幸的是,由于有了几年从事工程计算的经验,楚泽深知能计算的机器不应该只服务于一种或者多种特定的计算,而是应该能做各种计算,至于怎么算,应该有一些指令序列,也就是你们所说的程序来控制。也就是说,楚泽其实和图灵一样,按照第三类发明的逻辑在设计和制造计算机
当然为了做到这一点,就要设法让所有的计算都变成一两个最基本的运算,然后用机械搭建出实现这种基本运算的模块,再大量复制这样的模块,就如同我们用乐高积木搭建各种形状一样。
如果说楚泽比巴贝奇先生有什么进步的话,想到用简单的模块实现基本运算恐怕是关键。巴贝奇试图用复杂的机械实现复杂的运算,结果那个难度超出了当时的工业水平,因此他穷其一生都没有造出自己所设计的计算机。
楚泽知道英国数学家布尔再19世纪末所发明的布尔代数,懂得用二进制来实现运算和控制机械计算机。当然他还需要实现十进制和二进制的转换,这也可以通过简单的机械模块来实现。
当然你可能会问,为什么要多此一举进行十进制到二进制,再到十进制的两次转换呢?很简单,因为0和1(或者是开和关)这两个操作在机械上容易实现,而要用机械实现十进制的运算则很难。
当时楚泽并不知道美国的香农已经提出用二值的布尔代数实现所有的计算,而是从一个工程师的经验出发发现了类似的规律。遗憾的是,楚泽不是理论专家,更像一个工匠,即使做出了实物,却不能像香农那样提出一整套理论
最终,采用简单方法实现复杂的功能的设计思路,让楚泽能够在很短的两年时间里造出一台可编程的计算机。他把这台计算机称为Z1,Z是楚泽名字的首字母。
Z1是世界上第一台依靠程序自动控制的计算机。在Z1之前的各种计算机无论结构多么复杂,动力来自于人还是电,都无法自动运行程序。如果你单纯数Z1零件的个数,其实它比巴贝奇设计的计算机的零件并不少,但是里面的逻辑要简单很多,因为是大量简单模块的重复。
不过Z1依然存在明显的缺陷,它并不能实现图灵机的全部功能,比如不能比较两个数值的大小。此外,这台计算机是由电机带动庞大的机械装置,因此计算速度很慢,每秒钟只能计算一次。
楚泽后来得到了纳粹德国政府的资助,这让他在战后遇到不少麻烦,但是有了钱他的工作进展顺利了很多,很快他将机械的计算机改成了继电器的,取名Z2,速度达到每秒钟五次计算。
然后他又进一步改进,制造出了第三个版本Z3.其中特别值得一提的是这个Z3,它使用了2000个继电器,真正实现了图灵机的功能,这是人类历史上的第一次。
楚泽的成功之处,有必然的结果,也有偶然性。
首先,他没有重复巴贝奇的老路,搞一个非常复杂的计算机,而是 先实现一种(或者几种)简单的最基本的模块,然后大量复制这样的简单模块实现一个复杂的功能。
其次,他巧妙地利用了等价性原则。十进制运算和二进制运算是等价的,但是前者实现起来非常复杂,后者就要容易得多。当然,这种等价性的转换意味着要多做一些事情,但是 两件简单的事情做起来要比一件复杂的事情容易得多。
最后,相信命运,大环境的影响。计算机在二战前后在大西洋两岸先后获得突破,是大环境使然——对这些发明的需求,相关技术的成熟等等。因此,楚泽的命很好,相比之下,巴贝奇的命就不太好。
楚泽和巴贝奇的经历给了我这样三点启发:
1. 当世界上任何东西越做越复杂的时候,就是开始从复杂往简单转变的时候了。计算机发展历史上的第一个转折点就出现在20世纪初到30年代这段时间。在后面关于计算机思维的来信中国,我还会多次讲到很多事情都是从简单到复杂,再回归简单的过程。
2. 一口吃一个胖子的结果可能是零。大的目标要分解成简单的,一个个解决,一个复杂的问题如果能拆成两个等价的简单的问题,成功的可能性就大很多,就可以事半功倍。但是,这并不等于做两件收效小的事情,就等于一件大事,这就是事倍功半。
- 巴贝奇的悲剧除了时机不对之外,还有一个重要的原因,就是他低估了问题的复杂度。复杂度通常不是随着问题的规模呈线性增长的,而是呈指数上升。巴贝奇很早就制造出一个简单的差分计算机,他本以为用原来的方法,放大一下就能够制造出精度更高的计算机,但是显然低估了它的难度。
这件事说明,对不同规模的问题要采用不同的方法。对于今天什么都是大体量、大规模的时代,你需要有超出常人的思维方式。
来信补充 | 五级工程师和职业发展
讲完本周的计算机发明的逻辑,留言中看到许多读者反馈,希望能讲一讲工程师应该如何发展、如何突破。我选择了《硅谷来信》中的一篇来信分享给你。
其实不仅仅是工程师,接下来的这篇来信补充,适用于任何行业。
我知道在我的读者中,很多人可能正在努力往上打拼,有些人可能在基层位置上工作了很多年,遇到了职业发展的天花板。他们并不想放弃自己所喜欢的专业,但是觉得在单位中如果无法当官,就没有前途。一些人听说国外一些公司对工程师很重视,非常向往,同时也抱怨自己的单位对自己不重视,并且将这种情况上升到制度文化的高度。今天我们就来谈谈这个问题。
我们先来定一个对专业人士的评价体系,这个体系不是我发明的,而是苏联著名的物理学家郎道。
郎道一生有三个贡献。首先作为一个科学家,他发明了郎道变换,并因此而获得诺贝尔奖。
其次,作为一个教育者,他建立了一个被称为“郎道堡垒”的理论进阶练习,这实际上是时候i 一系列越来越难的物理学练习题,一个学习理论物理的人可以看看自己能攻克多少郎道堡垒,知道自己的水平,提高自己的水平,这有点像游戏中的通关。
第三,他提出了一种按照水平和贡献划分物理学家的方法,被称为物理学家的等级。
按照郎道的理论,物理学家可以分为五个等级,第一级最高,第五级最低,每一级之间能力和贡献相差十倍。
在第一级中,郎道列出了当时十几个世界级的大师,包括波尔、狄拉克等人。
在二级中,全世界也只有几十位。郎道将自己只列入2.5级,在获得诺贝尔奖之后,将自己提升到了1.5级。
在所有的物理学家中,郎道给出了一个零级的大师,就是爱因斯坦。
郎道等级最核心的思想是,人和人的差距,能力和能力的差距,是数量级的差别,而不是通常人们想象的差一点点。
仿照郎道的方法,我也将工程师分成了五个等级,对于其他专业人士,也可以依次分类。分类的原则大致如下:
第五级:能独立解决问题,完成工程工作;
第四级:能指导和带领其他人一同完成更有影响力的工作;
第三级:能独立设计和实现产品,并且在市场上获得成功;
第二级:能设计和实现别人不能做出的产品,也就是说他的作用很难取代;
第一级:开创一个产业。
以计算机行业为例,一个人毕业后,经过一段时间的锻炼,能够熟练应用工程的知识和技能解决问题,独立完成所分配的工作,而不需要他人指导,就算是一个合格的五级工程师了。
在具体一点,比如这个人在京东公司任职,老板让他做一个工具,找出那些不断帮助女(男)朋友买书的读者。他自己知道在公司内找谁去要数据,如何确认两个人可能是男女朋友,而且经常买书。也知道自己在京东公司的环境里,应该使用什么样的开发工具。以及为了方便客户使用,这个工具应该有什么样的基本功能。
如果还做不到这件事情,就算不上是一个合格的工程师。在过去,工程师和科学家是可以并列的头衔,今天在法国和德国依然如此——那里的工程师会有一个特殊的资格证书,就如同医生和律师有特殊的资格证书一样。
但是在中国,很多人从工科大学一毕业,公司就在他的名片上印上工程师,然后就似乎已经成为工程师了,很多人有这个头衔,但并不具有工程师所应该有的基本技能。
在IT行业很多人被称为码农,虽然名字不太好听,但是仔细想想,似乎也是对天天简单重复低层次IT工作的人的一个形象的写照。我想,上述对一个五级工程师的要求任何一个从工科大学毕业的学生,只要自己有心,往这个方向努力,不难达到。如果达不到这个层次,不能算合格的工程师。
对于第四级的工程师,就需要有领导能力和在工程上把大问题化解为小问题的能力了。用我之前写的“愿景—目标—道路”的逻辑,他们能够寻找出实现比较大的目标的道路。工程师和科学家不同,后者考虑的是对和错,前者只是在现有条件下考虑好和坏的解决方案。
比如在建造一座海湾大桥时,工程师会在现有资金的条件下,根据交通的需求设计一个200年使用寿命的大桥,但是为了让军队迅速通过一条河,他们追求的目标就变成了在最短时间内建造足够让军队安全渡河的浮桥。目标不同,工程师的解决方案就不同,这件事对于土木工程师和桥梁工程师来讲,常常不是问题。但是很多搞IT的人,常常会把海湾大桥修成浮桥,也会把浮桥按照海湾大桥来慢慢修。
因此,能否成为四级的工程师,要看能否最好地解决一个这样有规模的实际问题。这个能力远不是熟练写程序就够了的。很多人抱怨自己的机会不够,其实从管理者的角色看,中国IT公司里非常缺乏这样有头脑的工程师。至于为什么有的人能够得到机会,他们和上下级之间较强的沟通能力帮助了他们。
对于第三级的工程师,就应该能够独立带领人做出一个为公司挣得利润的产品了。这里面除了上述能力外,还涉及到对市场的判断和营销能力了。很多人讲,我就是做工程的,这个东西是否有用,我不清楚,有什么事情你叫我做就好了。这样显然达不到第三级的要求。
第三级的工程师,本身必须是非常好的产品经理。一个有良好工程素养的人如果心胸开阔,愿意接受各种意见和建议,经过努力,可以做到这一步。你可能奇怪,我我什么专门强调心胸开阔,因为人有多大的心,就能做多大的事情。有人抱怨自己作为工程师,收入和社会地位太低,我想如果你做到第三级,就不低了。当然再往上,就不是很多人能够做到的了。
第二级是能够做出先前没有的东西的人,世界因为他们多少有点不同。举几个例子,比如北极光风投的创始人邓锋,在他(和谢青、柯岩)之前,世界上没有真正意义上的网络防火墙设备,他们做出了这个设备,并且成功创立了当时世界上最大的防火墙公司(Netscreen),这个公司在被收购前市值大约为20亿美元。他可以算得上是二级工程师,另外,Google云计算的发明人迪恩(Jeff Dean)也可以算。你如果能成为二级工程师非常好,但是如果不能也没有关系,不必对自己太苛刻。
第一级是开创一个产业的人,包括爱迪生、福特、贝尔等人。这可能离我们远一点。
我想接下来大家知道努力的方向了,每提高一级,你的影响力和收入就增肌很多,当然对你的综合能力的要求也多得多。
最后我想你可能会问,“你自己处在哪一级呢?”我权且把自己放在2.5级吧。
也请你想想看,自己在自己的行业中,处于哪个等级?
答读者问09 | 如何锻炼差异化思维?
Q1: 老师您好,专栏的内容让我收获很大。现在的计算机本质都是确定型图灵机,而现在对量子计算机的研究,都是奔着非确定型图灵机的目标。如果研究成功,那么就意味着所有的NPC问题都能够快速解决了,是否标志着一种新的范式?
计算速度的提高一方面是一件好事,因为可以解决很多目前无法在短时间内精确求解的问题;但是另一方面,现在的密码系统都是建立在NP-hard问题的基础上,非确定型图灵机的出现,必然会对如今的安全系统造成巨大的冲击。想听听吴军老师是怎么看待这个问题的?
A:首先要讲的是,你所说的“现在对量子计算机的研究,都是奔着非确定型图灵机的目标”,这个说法我没有见到,如果有,并不正确。
另外,图灵机是一种虚拟的机器,量子计算是一种实现方法,不是一个层面的东西,事实上做量子计算的人并不会说自己做非图灵机的事情。即使想做非图灵机,也不需要使用量子计算,世界上第一台可编程的计算机就不是图灵机。
或许极个别非专业的八卦媒体会有这样的说辞,但是在严肃的媒体上,特别是专业媒体上找不到这种说法。今天互联网上的内容很多,鱼龙混杂,要判断一个说法的真伪实属不易。这里我给大家一个简单的判别标准,就以这个说法为例来说明。
出现了非图灵的计算机,和“会对如今的安全系统造成巨大的冲击”之间是否有逻辑关系呢?没有!
这就如同说,“我买了一只猫,所以家里的狗死了”一样,前后文章毫无逻辑关系。因此即使出现了非图灵的计算机,未必能得到“会对如今的安全系统造成巨大的冲击”这样的结论。如果媒体中用“必然会”“肯定”“显然”这样的词将两个毫无逻辑关系的事情联系起来,你就要怀疑一下小编的水平,甚至是那家媒体的水平上。
我们在《谷歌的方法论》中一直在强调思维的完整性,很重要的一条就是任何结论都必须是能够从前提出发,经过逻辑推理,得到的必然结果。非图灵机计算,和“对如今的安全系统造成巨大的冲击”,没有什么逻辑关系。人类大脑的计算本身就不是图灵计算机,存在了几千年,也没有对“如今的安全系统造成巨大的冲击”。这也从反面说明上述结论不能从前提得出。
今天很多媒体上的文章,不仅有大量常识性错误,而且缺乏逻辑性,我们采用严格的逻辑思维,就能判断其所述之真伪,这个能力我们应该具备。
Q2:吴军老师,我有个疑问:模块化和标准化,是工业时代一个最重要的特征,但这种思维方式并不是人类的天性。不是所有问题都可以模块化,有些问题的实现需要差异化,那么差异化的思维,如何更好地锻炼或者实现呢?
A:模块化和差异化并不矛盾。世界是多样的,人的需求也是多样的。我们一方面可以接受和使用标准化、模块化的产品,比如一件艺术品。不同的东西,可以用不同的方法去做。我们生产纽扣,就没有必要每一个都和其他的不同,一亿个纽扣都是一样的,使用起来并没有什么问题。
差异化本身是手段,而不是目的,这点和模块化是一致的。我们之所以要把东西按照模块搭建,一来是为了将复杂的问题简单化,二来是为了降低成本,提高效率。如果模块化的成本比没有模块化更低,就不会有人采用了。同样的道理,差异化不是目的,是手段,目的是把事情做得更好。
今天很多人理解差异化有一个误区,就是认为只要不同就行了。人类在解决问题时,总是不断找更好的方法和路径。在任何一个历史时间点上,现存着的办法即便不是最好的,也是比较好的,自有它存在的道理。
很多人搞差异化,不去理解为什么大家这么做,而约定要标新立异,找一个不同,但却差劲很多的方法。这就如同从北京到上海,不走最近的京沪高铁,而要绕道武汉一样。这些人可能会说,你看,我和大家不一样。的确不一样,但是不是更好,而是犯傻。很多人在做产品时搞差异化,把按钮从圆的改成方的,方的改成三角的,毫无意义,甚至更糟糕。
如果我们的心中想的是把事情做得更好,做出来的,自然和以前的不一样,不用强调差异化,必然有差异化。因此,对于这方面的训练,重要的是把东西做得更好。
Q3: 每个人的硬件看起来都是一样的,但是每个人的软件不一样,最终两个人相差甚远。很多新发明的技术,大多数只看得到眼前的东西,而不知道,可以应用到其他的地方,比如区块链技术:大家都知道这个技术的重要性,可是为什么大家都拿区块链技术做网络虚拟货币呢?就不能拿这种技术应用到其他的地方吗?
A:首先要讲,这是一个很好的额问题。
世界上大多数人,其实不可能做出超越同时代大部分人的新发明、新技术。Google、苹果等公司招的都是“人精”,一年不过3000多项和2000多项美国专利,相比他们的人数(7.8万和13万)少得可怜,更何况90%以上的专利其实没有用,只是为了防御目的。要想做出超越大家的事情,就必须比大众更有远见、更有执行力,并且有足够多的专业知识。
讲回到你问的区块链,对这样一个新技术,大部分人是不可能看到它位置的用途的,甚至很多自称搞区块链的人对此都没有什么深刻的了解,这种现象并不奇怪。大部分人会看到已经成功的案例,比如比特币,然后模仿。于是区块链的第一波浪潮就是出现一堆类似比特币的东西,但是都不成功。
不过,有很少一部分人看到比特币成功现象背后的一些因素,主要是区块链的一些好处,并且发现了比特币的缺点,比如交割时间特别长等等。他们潜心改进区块链技术,就得到了其他人没有取得的成绩,比如以太坊就是这一代的代表。
不过,在以太坊出现后,很多基于它的协议靠发行货币圈钱的公司出现了,这就是第二代的模仿公司。
今天虽然大部分人在炒作区块链的概念,但还是有不少创业团队在利用它改进个钟业务,比如美国的Skuchain公司,就成功地利用区块链跟踪合同的执行,贷款和付款的流程,以及重要商品的销售等等。目前波音等公司都是它的客户。值得一提的是,它利用的是区块链的可跟踪技术,并不在意它是否是去中心化的。
事实上,它使用IBM的云计算来实现区块链,是集中式的,因此比所谓去中心化的效率高很多。这个例子其实也验证了对上一个问题的回答,差异性是自己改进的,而非刻意的差异化。
相信随着越来越多的人对区块链技术的深刻理解,会挖掘出它更多有意义的应用,而不仅仅是炒币。