书城计算机黑客
2816200000007

第7章 技术模型铁路俱乐部(4)

丹尼斯和斯托克曼共同编写的另一个程序是个比较新的工具——调试器。TX-0本身自带一个名为UT-3的调试程序,利用这个程序,用户可以直接将命令通过Flexowriter电传打字机输入到计算机中,进而赋予了这名用户在计算机运行过程中与其交互的能力。但是,UT-3存在不少非常严重的问题,例如,它只能“读懂”使用八进制输入的代码。所谓“八进制”就是基于8个数字的系统(与此形成对照的是基于2个数字的二进制系统,还有我们日常使用的基于10个数字的十进制系统),这个系统使用起来相当复杂。因此丹尼斯和斯托克曼决心写一个比UT-3更好用的调试器。有了这种调试器,用户就可以使用符号,即较为易懂的汇编语言编写程序了。他们两人编写的程序名为“FLIT”,它可以帮助用户在程序运行期间发现和修改错误,保证程序能够运行下去。(丹尼斯解释说:“FLIT”代表Flexowriter Interrogation Tape,但很明显,这个名字起源于一种同名的杀虫剂。)和UT-3相比,FLIT是一次飞跃,因为它解开了束缚程序员的枷锁,就像音乐家能够用他们的乐器进行创作一样,程序员可以在计算机上进行最原始的创作了。尽管FLIT需要占用TX-0总共4096个“字”内存的1/3,但有了这种调试器,黑客便可以随心所欲地创造出新的、更为大胆的编程风格。

那么,那些黑客自己的程序又做了些什么呢?有时,它们做什么真的一点也不重要。彼得.萨姆森整晚都在编写一个即时将阿拉伯数字转换成罗马数字的程序。杰克.丹尼斯在看了萨姆森的“壮举”之后,对他的编程技巧表示由衷的钦佩,说:“上帝,为什么会有人想做这样一件事?”不过丹尼斯知道为什么。萨姆森在将纸带输送到计算机中,然后观察着闪烁的灯光和开关,接着看到一度在黑板上平淡无奇的、古老的阿拉伯数字变回罗马人发明的那种数字的时候,那种浑身充满力量的感觉和巨大的成就感便是这一切的原动力。其实,正是杰克.丹尼斯向萨姆森建议,利用TX-0计算机向扬声器发送声音的能力将会有超乎想象的广泛用途。虽然没有内置用于定调、控制振幅或调节音质等的控制器,但却有办法指挥扬声器——在任意一毫秒内,是否发声取决于TX-0累加器中每个18位“字”的第14位的状态。声音的开与关取决于第14位是1还是因此,萨姆森着手开始编写让每个“字” 第14位的二进制数以不同的方式变化的程序,以此产生不同的声调。

当年,美国只有很少几个人一直在进行用计算机演奏各种类型乐曲的实验,他们所采用的方法哪怕让计算机演奏出一个音符都需要极大的计算量。很多人警告萨姆森,认为他在这方面的努力无异于逆水行舟。但萨姆森对此类言论表现得非常不耐烦,他想要计算机立刻就能演奏出乐曲来。于是他学习控制那个累加器中第14位数字的方法,想要像查理。帕克操纵萨克斯管那样让计算机也对他俯首帖耳。在这款音乐编辑器的后期版本中,他给这个程序增加了新的功能:如果你在编程中犯了一个语法错误,Flexowriter就会使用红色的墨带打印出“Toerr is human to forgivedivine.”(人非圣贤,孰能无过?)

当黑客圈以外的人听到约翰。塞巴斯蒂安。巴赫那悦耳的旋律竟然以单声部、单音频的方波形式播放,且毫无和谐可言的时候,几乎都无动于衷。这是平地的一声惊雷!这可是台价值300万美元的大型计算机,为什么它不能完成一个价值5美元的玩具钢琴也能完成的小事儿呢?彼得.萨姆森几乎是另辟蹊径,颠覆了有史以来音乐制作的基本流程,跟那些局外人讲这些无异于对牛弹琴。音乐一直是通过直接制造振动(即声音)得到的。而萨姆森的程序只不过是将一大堆数字(或者说是无数输入到计算机里的位信息)组合成一段代码,音乐便蕴涵在这段代码之中。你就算盯着这段代码几个小时也不可能琢磨出音乐到底藏在哪儿。TX-0计算机由大量金属、电线24黑客——计算机革命的英雄和硅片组成,在这些元件中藏着个累加器,只有在累加器中进行数百万次令人眼花缭乱的快速数据交换以后,这段音乐才能播放出来。这台计算机本身并不十分清楚怎样使用声音,现在萨姆森要求它用歌声提升自己的价值,这台TX-0乖乖地照办了。

因此,计算机程序不仅仅被比作音乐作品,严格来说,它本身就是一部音乐作品。这样的计算机程序看起来好像和能够得到复杂的数学计算结果和进行数据分析的程序没什么两样,并且事实上两者确实没什么两样。萨姆森塞进计算机里的那些数字是可以制造出任何东西(不管是巴赫的赋格曲还是防空系统)的通用语言。

萨姆森并没有对外界透露他的所作所为,而那些外人对他的成就也丝毫不感兴趣。连黑客们自己也不谈论这件事——我们甚至还不清楚他们是否在如此广泛的意义上审视过这一成就。彼得.萨姆森做成了这件事,他的同事也对他的成就表示钦佩,因为这段程序编得非常精妙,仅凭这一个理由就足够了。

……

鲍勃.桑德斯,秃顶、大腹便便,是TX-0的忠实信徒、TMRCS&P小组的负责人,也是一名乐于钻研系统的学生。对于像他这样的黑客来说,这就是一种“完美的生活”。桑德斯在芝加哥郊区长大,自打记事起,电学原理和电话电路便一直吸引着他。进入MIT之前,桑德斯找到了一份理想的暑期工作——为电话公司安装办公室电话总机。一连8个小时,他兴致勃勃地拿着烙铁和钳子在各种系统内忙碌着。虽然午饭时间暂时中止了他的田园诗般的工作,但他还是会抓紧这段时间埋头研究电话公司的手册。正是铁路模型下方的电话公司设备让桑德斯下定决心要在俱乐部中发挥自己的作用。

虽然是高年级学生,但桑德斯在自己的大学生涯里接触到TX-0计算机的时间比考托克和萨姆森都要晚:因为他抓紧每分每秒建立自己的社交关系网,包括向玛吉。弗伦奇求婚并最终走向婚姻的殿堂。玛吉。弗伦奇当时已经为一个研究项目做了部分和计算机有关的工作了(但她的工作还够不上称为“hack”)。尽管社交占用了桑德斯很多时间,但TX-0还是他大学生活的中心。他和普通的黑客一样,也因多次旷课而成绩越来越差。可他并没有对此过于在意,因为他十分清楚自己已经从26号楼240房间Tixo控制台的后面得到了真正的教育。多年以后,他将自己和其他黑客定位为“一群精英”。“其他人逃课,整天待在四层高的楼房里做些没任何用处的东西:要么到物理实验室将小球扔向另一个物体,要么随便做些什么。我们只不过不关心别人正在做什么,因为我们对他们的所作所为不感兴趣。他们研究他们的,我们研究我们的。虽然大家研究的东西很大一部分并不是我们的正式课程,但总的来说我们觉得这一点都不重要。”

黑客们通常昼伏夜出,这是唯一一个充分利用重要的TX-0“业余时间”的方法。白天,桑德斯常常设法在一两节课上露一下脸,然后做些“基本的维护”工作,比如吃饭和上厕所,也许还要到玛吉那里腻上一阵子,不过最后他总是能回到26号楼。在这里,他会重新浏览一遍前晚编的程序,用9.5英寸宽的Flexowriter专用打印纸打印出来,然后在程序清单上圈圈点点,将代码按照他自己的理解升级到下一个操作阶段。时候差不多了,他也许还要到TMRC泡一会儿,拿自己的程序和别人的交换,大家相互看看别人有什么新点子或程序错误。接下来,桑德斯就又回到26号楼TX-0隔壁的Kluge Room,找一台空闲的Flexowriter来修改自己的程序代码。就算自己忙着,他也不会忘了随时去看看是不是有人取消了1小时的上机时间。他自己的上机时间一般都在凌晨2点或3点。他会在Kluge Room一直等着,或者回俱乐部打上几圈桥牌,直到有机会上机为止。

坐在控制台面前,你的对面就是装有计算机晶体管的金属架子,上面每一只晶体管表示内存中某个数位为1还是0。桑德斯打开Flexowriter电传打字机,打字机会首先打出欢迎语——“WALRUS”,那是萨姆森为了向刘易斯。卡洛尔的一句诗“时间到了,海象(Walrus)说……”致敬。看着这条欢迎语,桑德斯会一边笑着一边拉开抽屉,拿出保存着汇编程序的纸带并送到纸带读取器中。现在,计算机已经准备要开始处理他的程序了,于是他把用Flexowriter打印出来的纸带输入到计算机中。当计算机把他的程序从“源代码”(使用汇编语言)转换成“目标”代码(二进制代码)的时候(即在另一条纸带上击打出二进制代码),他总是盯着那些不停闪烁的灯光。由于这根纸带上是用TX-0能够理解的语言目标代码书写的,因此可以将其直接送入计算机中,期待着程序的运行结果完美无缺。

这时候,很可能有几个黑客在旁边七嘴八舌,他们手里拿着从楼下自动售货机里买来的可口可乐和垃圾食品,一边笑一边开着玩笑。桑德斯喜欢柠檬口味的果冻蛋糕(其他人把这种蛋糕称作“柠檬糊糊”)。不过在凌晨4点的时候,任何食品都是美味珍馐。当程序开始运行,指示灯一闪一闪地发光,扬声器按照累加寄存器第14位的内容传出或高或低的嗡嗡声的时候,所有人都目不转睛地看着这一切。程序汇编完并运行后,桑德斯通过CRT显示器首先看到的就是程序崩溃的信息。于是他伸手拉开抽屉,找到保存着FLIT调试器的纸带,将它送入计算机。接着这台计算机就变成了一台具有调试功能的机器,然后他再次输入自己的程序。现在,他可以试着查看哪里出了问题。假如幸运的话,他找出了问题所在,就可以输入几条命令,或按照正确的顺序拨动控制台上的开关,或者用Flexowriter输入一些代码来修改自己的程序。

一旦程序运行顺利(假如某种修改方案生效的话,假如他将整间屋子的晶体管、电线、金属和电流通通组合在一起,让它们按照他的设计方案精确地输出运行结果,那么效果总是令人非常满意),他还会尝试让自己的程序能够更完美一些。在他的上机时间结束后(总是会有人跃跃欲试地等着轮到自己上机),桑德斯会利用接下来的几个小时分析程序失败的原因。

在每天上机的高峰时段,黑客们总是非常紧张地工作,但这之前和之后的数小时内,他们也可以进入一种精神高度集中的状态。如果为计算机编写程序,你就必须十分清楚数千个表示信息的位会如何随着指令的变化而变化,并能预测它们的变化效果,甚至学会挖掘、利用其潜在的变化。

当你将所有这些信息印在大脑中以后,就好像将自己的意念和周围的环境(或计算机)完全融合在了一起。有时,你需要好几个小时才能在自己的大脑中把所有指令连成一个整体。一旦到了这个时候,你会非常舍不得结束这种来之不易的状态,你会继续在计算机上工作,或者到隔壁找台空闲的Flexowriter打字机把程序打印出来再细细地琢磨。你甚至会把这种精神高度集中的状态延续到第二天。

然而不可避免的是,这种“天人合一”情绪已经影响到黑客计算工作以外的方方面面了。由于部分痴迷Tixo计算机的人加入了TMRC,“刻刀和画笔”小组的人对此十分不满:他们将那些TX-0黑客视为旨在破坏这个俱乐部的特洛伊木马,认为他们想把俱乐部的工作中心从铁路转向计算。如果参加每周二下午5点15分召开的俱乐部会议,你就能看到这种担心:黑客们总是抓住每一个可能的议题把会议搞得像他们在TX-0上编写的程序一样复杂。他们所提出的动议只是为了提出别的动议,而别的动议又再提出另外的动议。他们反对被裁定为违反会议规则,好像它们是大量的计算机错误一样。1959年11月24日那次会议的会议纪要中便记着这么一条:“我们不赞成某些成员促进俱乐部发展的做法,他们过于强调技术研究而疏于阅读《罗伯特议事规则》。”萨姆森便是违反规则最严重的成员之一,有时,甚至有一位怒气冲冲的俱乐部成员提出一项动议,要“买个塞子堵住萨姆森喋喋不休、大放厥词的嘴”。

把会议议程搞乱不过是一个示例,编程所需的逻辑思维方式也影响到了普通活动。

你可以向黑客提问并能够感受到他脑中的累加器正在处理每一个数位,最终他会用最为精准的答案回答你的问题。玛吉(此时,她已经是桑德斯的妻子了)每周六上午都会开着自己的大众车到西夫韦超市去采购,当她回来的时候会问自己的丈夫:“你愿意帮我把车上的东西搬进来吗?”鲍勃.桑德斯回答道:“不能。”前几次玛吉觉得十分惊讶,不过还是自己将采购的东西搬进屋子。不过同样的事情发生几次后,她终于忍不住发怒了,气呼呼地冲他大发脾气,质问他为什么对她的要求说“不”。

“你问的其实是个愚蠢的问题,”他回答说,“我当然不愿意帮你把采购的东西搬进来啦。但如果你把‘愿意’两字去掉,问我是否帮你把这些东西搬进来,那就是另一回事了。”

玛吉就好像把一段程序输入到了TX-0中,结果这段程序崩溃了(如果语法错误,程序总是如此)。只有当她“调试”了自己的问题以后,鲍勃.桑德斯才会让这段“程序”在他自己大脑里的“计算机”中顺利运行。