136书屋 > 其他 > 沃兹传:与苹果一起疯狂全文阅读 > 第7章 偶然学习(2)

第7章 偶然学习(2)


  你知道,将数学与电子学结合起来会得到什么吗?答案是“工程学”。

  每次上课,麦卡勒姆先生会站在讲台上,用一把黄色的大计算尺作各种运算。他的课比我们的化学课有更多计算的内容,相当难。他还自己编写这门课的教材。他的讲义清晰简洁,逻辑性极强,深入浅出地引领我们一步步地学习电子学的知识。我们先学习简单的电阻,然后是更难的内容,然后再逐渐加快学习的速度,最终把所学过的内容综合起来。这是教授电子学的绝妙方式,我日后在自己的计算机课程上也采用了这一方式。

  更妙的是,麦卡勒姆先生收藏着数量和种类都让人叹为观止的电子仪器。他拥有各种各样的高级仪器,包括许多我根本买不起的测试仪。他拥有的器材比一般大学的电子学实验室都要全面。他非常足智多谋,成功地说服了我们高中——家园高中(Homestead High School)校方购买了一些不太昂贵的电子仪器工具箱。随着他的学生对电子学学习的逐渐深入,他们用这些工具箱构建了一些电子学仪器,进一步增进了对电子学的学习。在我高中最后一年时,我们的实验室已经相当完备了。

  我们拥有一大堆仪器。这是门多么有趣的课啊!你构建仪器并看着它们成功运转。在达到成功运转之前,你必须不断调试,直到纠正自己所有的错误为止。这个过程中你也学到了自己犯错误时会发生什么,这对学习电子学的学生来说至关重要。我们都曾由于操作失误而吃过苦头。有一次,我被一台电视机高达22000伏的电压电了一下,一下子跳开好远。是不是听上去有点儿吓人?但我发誓,对我这样搞硬件的人来说这就是家常便饭。我们并不像普通人一样害怕电击。

  我有一个轮盘电击仪——四个人一起把拇指按在轮盘的凹槽里,轮盘随着动感的音乐和闪烁的灯光不断转动,之后轮盘会逐渐减速,直到其中一个人被电到。硬件工程师们常玩这个游戏,相比之下,软件工程师就胆小得多。

  麦卡勒姆先生给予我很大的自由,让我自由发挥去制作我想做的任何设备——他甚至允许我在周五下午的上学时间到一家公司去工作,免得我无聊。这家公司就是位于森尼韦尔的喜万年公司(Sylvania),在那里我学会了计算机编程。麦卡勒姆先生说我已经掌握了他课上的全部知识,留我在教室只会让我对别的同学搞恶作剧。我们学校里没有计算机,所以在喜万年公司我第一次接触了可以编程的计算机,从此我也和计算机结下了不解之缘。

  我从未想过自己能真正接触一台计算机。我想,天啊!计算机!真的是计算机!我借了本关于FORTRAN语言的书,并且告诉自己一定要学会计算机编程。喜万年的一位工程师教我如何使用打孔机。我清楚地记得我写出了自己的第一个程序,然后那位工程师帮我输入到电脑里并运行出整个程序的情景。

  我尝试写的第一个真正的程序是关于“骑士巡游”(Knight’s Tour)问题的。骑士巡游问题是指,按照国际象棋中“马”的走法,如何无重复地走完棋盘上所有64个格子,即每个格子必须经过一次且只能经过一次?在我的程序里,我先让“马”走上两步,然后一步一步走,直到无法再走时停下来。若“马”停止时没有走完所有的格子,就退回一步变换一种走法,如果还不行,就再退回一步(即“回溯”),直到可以走通为止。喜万年公司的电脑的计算速度可以达到每秒钟100万次,所以我想这个程序应该很快就能跑出结果来。

  写出了程序后,我不禁开始憧憬接下来我可以一步步地解决现实世界中复杂得多的问题。但你猜发生了什么?电脑上的灯闪了一下,然后就毫无反应,什么输出都没有。我的程序没有跑出来。我的那位工程师朋友让程序又运行了一会儿,然后说道:“好吧,看来陷入循环了。”接着他告诉了我什么是无限循环——编程上“无限循环”是指程序无限地重复下去,从而导致了死机。(说一句题外话,“无限循环”也是现在苹果公司总部所在的那条街的名字。)尽管如此,在接下去的一周里,我把这个程序稍作修改,将每一步尝试的“马”的走法都打印了出来,又拿到这台计算机上去运行了。那天,我拿着打印出来的走法记录钻研了一番,领悟了一件事:我的程序并没有写错,它正是按我的思路在运行,问题在于它所需要的时间太长——要经过1025年这么长的时间才能算出结果!这比整个宇宙存在的时间都要长!

  这个经历让我意识到,即使是每秒钟100万次的运算速度也还有许多解决不了的问题。原始速度再高,也不能解决所有问题。许多容易理解的问题的解决,都有赖于简洁而深刻的解法。顺便说一句,程序的设计思路,即它所遵循的规则、方法和步骤,被称为“算法”(algorithm)。

  什么是骑士巡游问题?

  骑士巡游问题不是个简单的关于“马”的走法的数学问题,它是一个古老的难题,许多世纪以来人们不断尝试解决它。问题的核心在于,让“马”在棋盘上走64步,从而不重复地经过棋盘上的所有格子。

  如果你对这个问题感兴趣,可以参考以下两个网站:http://www.borderschess.org/KnightTour.htm。这个网站允许你直接在网络上尝试解决这个难题,同一个站点上的另一个页面——http://www.borderschess.org/KTsimple.htm则提供了一个解题思路,你可以通过了解这个解题思路学习如何解开骑士巡游问题,从而让别人对你刮目相看。祝你好运!

  那时候的我对老师们很尊敬。我把工程师和老师都视为最值得尊敬的人。他们对我们如此了解,又能这么自然地和我们交流,教给我们许多东西。尽管我很聪明,但老师们对什么都很了解,能充满自信地教授不同的内容,那他们一定比我更聪明。高中时,所有的老师在我眼里都是睿智的思想家。

  后来,我发现在学校里,“聪明”常常被定义为与老师和其他同学阅读同样的书籍、报刊、杂志,对各种习题能作出同样的解答,与别人的想法一致,因此也不那么乐观了。

  如果你跟别人读一样的书、做出一样的答案,又有着同样的观点,你就是聪明的吗?我的想法要独立、激进得多,在我看来,能独立思考、拥有质疑精神,才能称为是聪明的。

  我每天到家园高中上学和放学回家都要走上很长一段路,我开始利用这段时间做一些真正的思考。我每次要走几英里,走路的时候我会分析自己的智力。我那时候数学和理科都很强,英语和历史很弱,我反复琢磨这件事,这是为什么呢?我想是因为英语和历史课的主观性都很强。我亲眼见过那些长相甜美又很会说话的女生们磨着老师提高了她们的成绩。我当时就想:天啊,你们写下的这些文字是多么主观啊,根本就很难分辨是不是正确的答案。正是因为数学黑白分明,要么正确,要么错误,没有烦人的灰色地带,我才喜欢数学。(有一次,老师把我的一个答案判为错误,但我确信它是正确的。最后发现是书本出了错,有时候书本的确会犯错。)而书评或论文则模糊得多,许多种不同的阐释都合理,许多种不同的叙述方式也都可行。谁知道什么最对老师的胃口?谁又能说什么是对书最深刻、最全面的理解?

  在高中几年间徒步上学的路上,我逐渐明了,逻辑在我看来更优越些。我本来就有这样的念头,但这些思考最终帮我形成了自己的观点。我意识到我与社会主流或许并不相容。我知道我与同龄人想法不太一样,我会这样想:这些是真理,这些是谎言。在数学里,二加二等于四,这就是真理,如果某一天人们发现二加二等于五,就需要改革整个真理体系来与之适应。在爸爸教给我的东西里、在我接触的世界里,最接近真理的就是逻辑了。逻辑黑白分明。在我看来,一个人最重要的就是信奉真理,工程师们所做的运算彰显了他们是如何忠于真理的。

  有一次,在喜万年公司里我发现了一本《微型计算机手册》(The Small Computer Handbook)。我对计算机十分感兴趣,而在我的一生中,我是在一次次偶然中逐渐走进了计算机的世界。发现这本书,是我一生中最幸运的偶然事件。

  喜万年的工程师允许我把这本书拿回家。这本小册子详细描述了数据设备公司(Digital Equipment Corporation,DEC)出品的PDP-8型微型计算机的配置。图片上的这台计算机位于摆放在高架上的仪器中间,上面有许多开关和灯泡,看上去很像是工厂车间的一部分。其实我不大能分得出究竟哪台仪器就是这台计算机,毕竟我只见过喜万年公司里的电脑。我从四年级起就一直想了解计算机的内部结构是什么样的,这本小册子正好满足了我的好奇心。

  我很擅长逻辑,知道如何连接不同的元件来构成逻辑电路。我捧着这本册子一连钻研了好几个晚上,慢慢搞明白逻辑电路之间是怎么连接来构成这台PDP-8型微型计算机的。我开始尝试设计自己的电脑,尽管我并未完成我那繁冗的设计处女作,上面可能还有许多错误。但这毕竟是个很有意义的开端。

  那时是我在高中的最后一年。之后的几年里,我搜集来了我能找到的所有微型计算机的说明书。那个时代涌现了一批微型计算机,与最初占据一整间屋子的大型计算机相比,它们的体积要小得多,功能却一点儿也不差。一台典型的具有足够大的内存(使用友好的程序语言)来运行程序的微型计算机大概只有一台微波炉的大小。

  我搜集到瓦里安(Varian)、惠普、数据设备、通用数据(Data General)等公司出品的微型计算机的用户手册。每逢空闲的周末,我就会根据逻辑元件和芯片(它们是计算机的硬件组成部分)的目录和某一特定的微型计算机的用户手册,自己着手设计。在完成首次设计后,我常常会进行第二次、第三次设计,减少使用的芯片数量,优化整体设计。我把使用最少量的芯片来重新设计出这些微型计算机当成一个好玩的游戏。我把自己关在房间里设计电脑,不知不觉间,这已经变成我消磨时间的方式了。这是我个人的娱乐方式,我没有告诉过家长、老师或者朋友。

  我根本买不起构建电脑所需要的元件,所以我的所有计算机都停留在设计图上。每当开始一个新的设计时,我就会连续几晚挑灯奋战,直到把它设计出来为止。作设计时,我会趴在房间的地板上,手边放着可乐,身边丢满了各种各样的草图。因为我无法把我的设计付诸实践,所以我会一遍遍地重新设计,试图用更少的芯片来超越我自己之前的设计。我是在与自己竞争,我所逐渐掌握的方法和窍门绝对无法用语言或文字来描述。差不多一年之后,我感到我节约芯片的能力已经无人能敌。我能用公司原始设计中所用芯片数量的一半来构建功能相同的电脑,但我的设计都停留在图纸上。