是谁先埋下“2000年炸弹”? 陈阳(摘) 1999年 第2期 04版 新的一年又来了,千年臭虫也一步步向我们爬来。是谁埋下了这信息时代的“定时炸弹”呢?她就是被誉为“软件之母”的美国计算机科学家格莱斯·霍普(Grace Hopper)女士。(^020401a^) #1 她发现了第一个计算机“臭虫”。 在第一台计算机ENIAC(爱尼亚克)问世之前,人们已研制出以电磁继电器为主的模拟计算机。其中最有名的要算哈佛大学研制的“马克1号”了。研制者是美国哈佛大学的应用数学教授霍华德·阿肯。“马克1号”(^020401b^)长51英尺,高8英尺,看上去像一节列车,由750000个零部件组成,里面的各种导线加起来总长有500英里!总耗资四五十万美元。阿肯在研制过程中,有一位得力的助手,她就是格莱斯·霍普。格莱斯·霍普1906年生于纽约,1934年获耶鲁大学博士学位,后来加入阿肯小组。1943年,霍普在检测电路时,发现了一处异常情况,经过仔细的分析,她得出结论:在计算机程序中有一个编码错误,她把这一情况作了记录。世界上第一个“臭虫”就这样被发现了! #1 她是第一个程序员 有意思的是,当时编制电脑程序的,几乎都是女士,从“马克1号”到“爱尼亚克”,编程小组中清一色是“娘子军”。第二次世界大战中,美军雇佣许多妇女用台式计算器算火力表,这些人就叫“计算员”(Computer)。一开始“计算机”不叫“Computer”,而是叫“计算器”(Calculator)。当时还没有“程序员”这一称呼,像霍普这样的编程人员也叫“计算员”(Computer)。这样说来,霍普还是第一位现代计算机的程序员。“马克1号”在1944年5月完工后,阿肯忙于海军部方面的事情以及机型改进的设计,“马克1号”的运行主要由霍普负责。霍普完成了电脑史上第一个编译器,能把高级程序设计语言书写的程序转换为计算机能直接执行的机器语言。 1949年霍普被“爱尼亚克”的总设计师埃克特看中,离开哈佛大学,进入埃克特和莫齐利创办的世界上第一家电脑公司埃克特—莫齐利电脑公司,担任“尤尼法克”(UNIVAC)和“比尼亚克”(BINAC)的程序总设计师。在莫齐利的指点下,霍普开始在编程中使用“简短指令代码”。 #1 她开发了第一个商用计算机语言 到了50年代中期,霍普又开发出Flow-Matic语言,起初是针对“尤尼法克”1型和2型电脑的商业数据处理用的。这是第一个用于商业数据处理的类似英语的语言。后来Flow-Matic语言又经改进成为COBOL语言,于1959年问世,它是第一批开发出来的高级程序设计语言之一,广泛用于大型机和小型机电脑的高级商业程序设计。 在50年代,商用大型机刚开始普及时,价格是非常昂贵的。IBM公司为“半自动地面环境”承建的36台电脑,总售价高达7亿多美元。相应的存储设备也非常昂贵,1957年,IBM在“兰马克”电脑上,装配世界上第一个容量为5兆的磁盘,每年的租金就要35000美元,算起来,每兆内存的年租费为7000美元。在我们今天看来是无法想象的,因为现在个人电脑存储系统中,每兆(MB)信息的存储费用只有0.25美分! 60年代初,当《数字化生存》的作者尼葛洛庞帝在麻省理工学院刚念大学时,每一比特(byte)内存的平均价格为1美元,可以想象,1KB就要将近9000美元(8×1024),那1兆呢?当时许多电脑的内存不是以兆而是可怜到以多少个字来算的,霍普负责软件编制的“尤尼法克”(UNIVAC)内存只有1000个字。 #1 “埋下”千年虫炸弹的也是她 在内存资源有限又昂贵的情况下,霍普只能追求精简,否则,多一个字符,真的要多费“千金”。为了节省内存,她开始采用6位数来表示具体的日期,也即年、月、日各两位。随着她主持开发的COBOL语言影响日益扩大,上述简写就成为标准写法。其他电脑语言也如此仿效,多数电脑硬件所提供的系统日期也这样表示。从50年代开始,代代相传。即使到了70年代末80年代初,随着虚拟存储技术的普及,电脑的内存越来越大时,这一6位表示法一直沿用下来。 当80年代中期人们意识到这一可怕的疏漏,并在新的电脑系统上改用4位数表示年份时,已经有点晚了。许多要害部门如核武器库、航空航天、金融保险等等恰恰是最早用电脑的,六七十年代甚至五十年代的大型机至今还在运转,在2000年到来之际,在金融、保险行业会引起利息、保险金的误算,在航空、航天、航海、铁路甚至核武器系统引起一系列的严重问题。这就是电脑2000年问题的由来。 虽然留下了这个疏漏,但霍普对计算机的贡献却是不可以抹杀的。70年代,她又进入军界,主持软件开发。她的努力使电脑在商用化和产业化方面取得长足的进步。霍普一直在美军服役,到80年代中期,当年聪明伶俐的女中尉已成为威严持重、受人尊敬的海军准将。为了纪念这位现代计算机软件的开创者,国际上设立了著名的“霍普奖”。