作为微软的掌舵人,比尔·盖茨(William H. (Bill) Gates)被视为当今个人计算机和办公自动化行业的领军人物。盖茨从年少时代就踏入了计算机软件领域。他和微软的另一位创始人保罗·艾伦,在西雅图的高中时期就已经开始担任编程顾问。1974 年,当时还是哈佛大学学生的盖茨与艾伦合作,为首款商用微型计算机 MITS Altair 开发了 BASIC(基础)编程语言。这个项目大获成功后,他们俩共同创立了微软,目标是为新兴的微型计算机市场提供软件开发和销售服务。
微软在编程语言、操作系统和应用软件方面为整个软件行业设立了标准。盖茨不仅为公司的新产品理念和技术发展提供了方向,还亲自指导技术团队研发新产品,他把大量时间投入到审查和优化微软的软件产品中。
盖茨出生并成长在华盛顿州西雅图地区,至今仍然居住在那里。他的出生年份是 1955 年。
采访者: 作为微软的首席执行官,您身负重任。您现在还亲自编写代码吗?
盖茨: 不,我现在不再编写代码了。虽然我仍然参与设计算法和基本架构,偶尔也会审查代码。但自从我参与开发 IBM PC BASIC 和 Model 100 之后,就没再亲手编写过程序。
采访者: 那么,在微软的程序开发中,您扮演着怎样的角色?
盖茨: 我主要负责两项重要工作。第一,选择程序中要加入的功能。要做到这一点,你需要对哪些功能容易实现哪些难以实现有一个清晰的认识。你还需要理解我们的产品“家族”策略,以及硬件的最新动态。
第二,我负责策划新功能的最佳实现方式,确保它们既紧凑又高效。举个例子,我曾写过一份关于如何设计和实现一个功能的备忘录,这个功能被应用在 Excel 中,它能让程序在屏幕发生变化时自动重新计算公式。
在微软成立的最初四年里,我参与了公司所有程序的编写和设计工作。无论是 BASIC、FORTRAN、BASIC 6800 还是 BASIC 6502,每一行代码在发布前都经过了我的仔细审查。但现在,公司拥有大约 160 名程序员,所以我主要负责对产品和算法进行评审。
采访者: 在您的编程生涯中,您认为自己最伟大的成就是什么?
盖茨: 对我来说,编写 8080 的 BASIC 语言最具影响力,因为它当时非常适用,且我们成功将其精简至极。这是我们创立微软时编写的第一个程序。
我们中有三人能够熟记这个原始程序。在阿尔伯克基的一个夏天,我们有机会对它进行彻底的重写。我觉得我们能够进一步精简代码,使程序更加紧凑。我们极其细致地优化了这个程序,最终打造出一个 4K 大小的 BASIC 解释器 (BASIC interpreter)。
当你对一个程序如此了如指掌,你会自信地认为没有人能够指出更好的编程方法。这种自豪感非常棒,再加上这个程序被众多机器采用,使其成为一项令人激动的成就。
关于 Model 100 上的软件,我也感到非常自豪,尤其是我们如何成功集成了一个非常实用的小型编辑器。我与一位日本程序员杰伊·铃木 (Jey Suzuki) 合作完成了这个项目。我们完成这个项目的时间非常紧迫。当你的软件需要被烧录到 ROM 中时,是没有犯错的余地的。
采访者: 在计算机编程中,你认为最困难的部分是什么?
盖茨: 最大的挑战在于确定算法是什么,并尽可能地简化它们。把事情简化到最基本的形态非常难。你必须在脑海中模拟程序的运作方式,并且完全理解程序的各个部分如何协同工作。最出色的软件往往是那些由个别程序员对程序的工作方式有着完整理解的。为了达到这种理解,你必须真正热爱这个程序,并专注于让它保持极度简单。
采访者: 随着计算机处理能力和内存的大幅提升,程序是否变得更复杂,或者只是更加粗糙了?这如何影响人们编程的方式?
盖茨: 我们不再是处于每个程序都经过精心打造的时代了。但在那些顶尖程序的核心,你会发现关键内部代码通常由少数真正懂行的人编写。
现在,将程序压缩到 4K 内存区域已不再那么重要。你会看到越来越多的情况,人们可以选择使用 C 语言而非汇编语言。遗憾的是,很多程序变得如此庞大,以至于没有一个人能完全掌握它们的所有部分,导致代码共享不如以往那样广泛。此外,因为总有新功能要加入,所以重新编写程序的机会也减少了。
最糟糕的程序是那些在初始阶段未能打下坚实基础的,而且原始程序员后来不再参与其中。这些程序的处理方式达到了我称之为“实验性编程”的地步。程序员对这些程序的了解太少,以至于他们无法预测更改可能如何影响程序的速度等方面。他们可能复用现有的代码,或者不清楚更改某些内容会破坏哪些依赖关系。因此,他们添加新代码,运行后发现“哦,它不是这样运行的”。这是一种极其低效的编程方式,但许多项目最终都沦为这样。
采访者: 在像微软这样有 160 名程序员的公司里,你们是如何创造一个能够开发成功程序的环境的?
盖茨: 组建一个小型项目团队,通常四到五人,其中必须有一人具备深入理解程序的能力是一种方法。当这位负责人在某些问题上有所疑惑时,他或她应该可以与更有经验的程序员进行探讨。
我们的策略之一是在编码阶段前让程序员充分思考。撰写设计文档非常关键,因为在将问题以算法形式表达时,可以实现大量简化。此时,问题以最精简的形式呈现,让你能够看到它们之间的交集。
代码审查也很重要,要确保审查代码,看看有经验的人员能否提出改进的建议。还需要回顾那些进行得非常顺利的类似项目;程序员可以从中学习别人的成功经验,获得改善自己程序的灵感。
采访者: 程序的灵感来源是什么?
盖茨: 实际上没有一个固定的过程。在微软,我们通常会在晚上或周末举行头脑风暴会议。每个人都有一个大概的想法,比如制作世界上最好的文字处理器。我们希望它能满足技术出版部门的所有需求。我们会坐下来讨论:怎样才能提高效率?我们是否能加入绘图功能,或者在不显著降低程序速度的情况下实现字符紧排?我们会探讨各种问题,并产生一些创新的想法。
采访者: 所以这是一个团队协作的过程?
盖茨: 对于确定程序功能而言,确实是一个大团队共同提出建议的过程。接着是一个筛选阶段。最终,我会决定哪些想法是可行的,并确保有负责人亲自投入,确保产品成功。我们选择进行的项目非常少,因为要推出一款产品并设定全新的世界级标准,需要极大的专注和资源。
采访者: 关于大型软件公司难以吸引能够开发出色软件的优秀人才的观点,这些特立独行的人才往往更愿意独立工作,您如何在微软吸引并留住这些优秀人才?
盖茨: 优秀的程序员对于创造软件产品至关重要。但我们不支持那种因为某人能力出众就纵容其任性的做法,比如不注释代码、不与他人沟通或强加自己的想法于他人。
我们希望员工能够真正相互尊重。我相信,大多数优秀的程序员都愿意与同样优秀的同行一起工作。当他们设计出一个非凡的算法时,他们喜欢有能够理解其巧妙之处的同僚。因为在脑海中构思这样的模型是一种孤独的体验。如果你原以为一个过程必须复杂,然后突然找到了简化它的方法,那会让你感到非常满足。但同时,你也希望得到同事的反馈。有了几位优秀人才后,更多的人才也会随之加入。
过去有一种观点,认为程序员的经理总是比程序员本身更优秀,没有所谓的“技术倒置”,即一个程序员为不懂编程的人工作。我们依然遵循这一理念:虽然在某些层级我们设有商业经理,但我们不让非程序员直接管理编程项目。
采访者: 您认为创造优秀程序有哪些特别的原则吗?
GATES: 有人是一头扎进去就开始编码,有人则是先全盘规划后再动手,但我认为你会发现,那些一上来就开始编码的程序员实际上只是在用代码作为思考的草稿。真正关键的是他们脑海里的思考过程。
你需要一位极其聪明的人。一个杰出的程序员会持续不断地思考着程序,无论是在驾驶还是用餐时。这样的思考方式对精神能量的要求非常高。
采访者: 你如何描述自己的编程风格?
盖茨: 在我动手写代码之前,我喜欢先从设计层面上把整个程序想清楚。写完代码后,我还会整体重新编写一遍。设计数据结构是编程最关键的部分,其次是将代码细分成不同的模块。只有当你亲自下手编写时,才能真正明白哪些是应该公用的子程序。
我写出过的那些杰出程序,都是那些我在动手前就反复思考了很长时间的。例如,我高中时为一台小型计算机编写了一个 BASIC 解释器,那时犯了很多严重的错误。后来,我研究了其他的 BASIC 解释器,所以到了 1975 年编写 Microsoft BASIC 时,我的挑战不再是能否写出这个程序,而是如何将其压缩到 4K 并且运行极快。我一直在担心:“这个程序够快吗?会不会有人做得更快?”
我记得在 TRW 遇到一个叫诺顿的人,他总能指出我哪里做得不够好。每当我做事马虎或懒散时,我就会想象他会过来指点我:“你看,这样做会更好。”程序中很容易悄悄产生小的效率问题,如果你想让程序尽善尽美,就必须时刻警惕这些问题的潜入。这也是为什么有时让别人参与你的项目会让你感到困扰,因为他们的编码风格总是和你不一样。记得在开发 BASIC 的时候,我常常重写别人的代码,即使这样并没有带来显著的改进。这种做法可能会让人不舒服,但有时候你就是觉得非这样做不可。
采访者: 在团队合作中,你总是担任设计的主导角色吗?
盖茨: 是的,在我直接参与的所有项目中,我都担任主要的设计角色。在最初的 BASIC 项目中,我在纸上草拟设计方案。我的合作者保罗·艾伦(Paul Allen)负责设计并实现所有开发工具。
在我开始编写代码之前,我通常已经在脑中预演了大部分的指令。虽然这些想法并不是完全成熟的,我在编程时仍会做出调整,但所有好的灵感都是在我动手编程之前就已经浮现。如果程序出现了错误,我会感到非常沮丧,因为这意味着我的心理模拟是有缺陷的。一旦心理模拟出现问题,程序中可能就隐藏着成千上万的错误。我真的无法忍受看到一些程序员在编程时缺乏深思熟虑的过程。
编写 BASIC 是我有过的最愉快的编程经验之一。我完成了 8080 版本的 BASIC,然后和马克·张伯伦(Mark Chamberlain)一起用大约两周的时间开发 6809 版本的 BASIC。那两周开始时,我先学习了新的指令集,并编写了三四个小程序。我还研究了其他人的程序,看看他们是如何利用这套指令集的。将我熟悉的问题映射到这个新的指令集上,并且尽可能地紧凑组合,这个过程非常有趣。
如今的程序变得越来越庞大,增加的功能往往会减缓程序速度。这是因为开发者在添加新特性时,往往未充分考虑到所加入的特殊检查会如何影响效率。要避免这种情况,就需要一个对程序极其熟悉的程序员来把关。以我们的 BASIC 为例,在我和其他创始成员离开后,大约有三年时间里,我们没有做出什么创新。直到最近一年半,我们才找到了那些对 BASIC 有深刻理解和归属感的人,他们可以轻松说出,“没问题,加入子程序和去除行号很简单。”我们一直有这样的目标,但直到找到那些能深入到程序核心,而非仅仅在外围增加功能的人之前,我们都不敢轻易修改程序。
确实,我们现在允许程序稍微变大一些。但就速度而言,不尽力追求最快无疑是种懒惰,因为用户会察觉到那些真正快速的程序,尽管他们可能无法明确指出。在最成功的程序中,快速的执行效率总是令人惊艳。
采访者: 在速度和性能方面,你们是如何做出取舍的?
盖茨: 有时候,我们需要在增加功能和追求快速执行之间做出权衡。但实际上,有很多方法可以在拥有大量功能的同时,依然保持高速度。关键是要确定程序中的常见操作,并确保它们能够高效执行,不被各种特殊情况的检查所拖累。如果程序的核心交互循环布满了各种检查,那么它的速度就会不如其他程序。
采访者: 当你们打算开发世界上最好的文字处理器时,你们是如何入手的?你们会研究市面上所有的文字处理器吗?
盖茨: 是的,我们会从功能角度出发,研究市场上所有的文字处理器,比如,我们会问:“有哪些产品在屏幕上进行字距调整,或者能展示打印页面的实际样子?它们的反应速度如何?”通常,在产品线的顶端,总有一些公司利用昂贵的硬件通过蛮力解决问题。我们无法这样做,因为我们使用的计算机性能有限。很多我们正在尝试的功能,在更强大的计算机上已经实现过;我们的目标是让这些功能在普通用户手中的设备上也能流畅运行。
在产品开发中,我们可以使用各种巧妙的技巧。我们在构建功能列表的同时,也在思考如何使我们的算法超越其他人。“功能”这个概念有些微妙,因为功能越多,用户手册就越厚。功能真正有价值的是在用户花时间去使用它们的时候。而速度——如果能更快地打印页面、在屏幕上更快地显示或更快地处理数据——这些则有极大的价值。如果你能为用户提供几个简单的命令,并确保程序足够高效,以便用户用这些简单的命令就能完成他们想要的操作,那就更好了。优秀的程序的一个标志是它们在内部也遵循简化的原则。它们在执行复杂任务时,会调用简单的操作,而不是每次都从头开始处理。
采访者: 用户的重要性有多大?您是如何了解数据库管理员在其数据库或电子表格中真正需要或希望的内容?
盖茨: 有些程序员并不假装能准确理解最终用户的需求,他们依然是顶尖的程序员。但对市场的了解尤为重要,尤其是在应用程序团队中。因此,我们有专职人员负责向客户展示代码或审查其他的规格要求等。在微软初创时,我们只专注于系统程序,因为我们自身就是程序员,所以非常了解其他程序员的需求。这就是我们为什么会开发出 BASIC。
采访者: BASIC 中最具创新性的方面是什么?
盖茨: 最关键的是我们让用户能够充分发挥机器的性能。我们引入了 PEEK 和 POKE 功能,允许用户读取和修改机器的状态。我们还加入了 TRON 和 TROFE 这样的跟踪程序。即使用户使用的是高级语言,我们也让他们能够接触到机器上所有他们可能想要添加的高级功能。用户可以在不使用 BASIC 的情况下理解内存的使用情况,感受到他们对自己的机器有控制权。 为了使 BASIC 适配到仅 4K 的内存,我们采用了一种称为“单表示解释器”的策略。这是一个非常明智的选择。我之前从未看到过这样的解释器。虽然采取这种方法有一定的风险,但我对这个方案充满信心。我在脑海中多次推敲,对此感到十分满意。
采访者: 在编写过程中,您是否预见到它会取得如此巨大的成功?
盖茨: 没有,绝对没有。是保罗·艾伦给我看了一本有 Altair 介绍的杂志,我们意识到,“天哪,我们必须开始行动了,因为我们知道这些机器将会非常受欢迎。”那时我停止上课,我们开始昼夜不停地工作。最初的程序在大约三周半的时间内完成。我们总共花了大约八周的时间,才让程序达到我真正满意的水平。之后,我又回去重新编写了程序。 没有一个伟大的程序员会坐在那里想,“我要赚很多钱”,或者“我要卖出十万份。”因为这样的想法对解决问题没有任何帮助。伟大的程序员会思考如何改进代码:我是否应该重写这个子程序,让四个而不是三个人能够使用它?我是否应该使这个程序更快 10%?我是否真的应该深入思考这里的常见案例,以确定如何排序这个检查?如果你是一个优秀的程序员,你会让所有的程序模块相互依赖,因此小小的错误也可能导致严重后果。这就是为什么你必须拥有精准的判断力,并愿意回头修改你的代码。
采访者: 当多个人共同开发一个程序时,您如何确保所有不同部分能够有效地协同工作?
盖茨: 首先,优秀的编程团队成员之间必须互相尊重。这是因为编程工作非常细致且需要密切合作,就像大家一起参与一场戏剧。在编程项目中,需要巨大的判断力和创造力。有的顶尖程序员更喜欢独自工作,不适合团队合作。但我相信,学会与他人合作并指导他们是成就卓越的关键一环。看到团队中的其他成员成长为出色的程序员,给我带来了巨大的满足感,虽然这种感觉不如自己亲手编写程序来得强烈,但这是一件非常积极的事情。我通过花大量时间与他们交谈,分享我的代码来培养他们。在团队项目中,我们需要将代码变成团队共享的财富。
采访者: 这种团队合作方式是自然形成的,还是你们刻意培养的?
盖茨: 在我和保罗创立公司之前,我们曾参与过一些大型软件项目,这些项目都失败了。当时,项目团队不断扩大,却没有明确的方向和控制。我们当时就下定决心,要在团队建设和项目管理上做得更好。因此,我们一直非常重视团队的结构和组织。
有效的方法其实很直接:保持团队精干,确保每位成员都非常优秀,为他们提供优秀的工具,确保团队有共同的语言和术语,以便高效沟通。同时,在小团队之外,安排一些经验丰富的资深成员提供咨询和帮助。实际上,我们在项目中遇到的问题往往有很多相似之处。在设计审查时,我非常乐于基于我以往的经验提出建议。
采访者: 你认为未来编程的方式或计算机的运作方式会有根本性的变化吗?
盖茨: 软件工具正在变得越来越先进。未来,我们或许能够仅凭项目规格和机器性能的描述,让高级编译器自动完成许多现在由程序员手动完成的工作。
人们仍然对于机器,比如 C 编译器,无法像人一样编写代码这一点感到自豪。但未来几年,我们可能会在一些编程流程上实现较大程度的自动化。设计算法的工作仍将由人完成,但很多实现细节可能由机器来承担。我相信,在未来五年内,我们将会拥有能与人类程序员媲美的工具。
采访者: 你之前提到了数学在编程中的重要性。你认为计算机科学和数学之间有什么关系?
盖茨: 数学对计算机科学的影响深远。许多卓越的程序员都具有数学背景,因为数学训练中对定理严谨证明的追求,有助于程序员进行精确且有力的逻辑推理。在数学领域,我们需要全面理解问题,并且常常要用不同的方法组合定理来寻找解决方案。数学与编程有着密切的联系,尤其在我的经历中,这种联系更加明显。我认为计算机科学与数学之间有着天然的亲密关系。
采访者: 在你看来,计算机科学真的算是一门科学吗?
盖茨: 是的,这是一个全新的领域。想想看,过去人们为了完成现在程序员日常工作中的内容,可能需要攻读博士学位。计算机科学正在飞速发展。与数学不同,数学有 300 多年的天才在推动理论发展,而我们的计算机科学只有短短 20 多年的历史。现在,越来越多聪明的人加入这个领域,贡献自己的智慧;编程已经成为一种流行的活动。现在人们越来越早地接触计算机,这将有助于改变这个领域的思维模式。很多顶尖的程序员都是在青少年时期开始编程的,那时的思维方式可能更加开放灵活。
过去,仅仅成为一名优秀的程序员是不够的;你还需要管理他人或从事其他工作。幸运的是,这种情况正在改变。现在人们意识到,编程是一门值得深入研究和教授他人的科学。
采访者: 多年的经验积累是否会让编程变得更容易?
盖茨: 不一定。我认为,在成为程序员的最初几年里,你是否优秀已经基本确定。几年后,你可能更懂得如何管理大型项目和处理各种个性,但在那之后,你的水平已经清晰可见。在微软,没有人是开始时平庸几年,然后突然变得出类拔萃。我可以通过与某人讨论他们编写的程序立刻判断出他是否真正优秀。如果他真的很优秀,他对自己的程序了如指掌。 这就像热爱国际象棋的人。当你全身心投入棋局时,记住十局棋的每一步是很自然的事。其他人可能会对棋手或程序员的这种记忆能力感到惊讶,认为这是些稀奇古怪的表演。但这其实很正常。直到今天,我都能在黑板上写出我十年前编写的微软 BASIC 的大量源代码。
采访者: 在编程时,你有什么感觉?
盖茨: 当我编译程序,它开始输出正确的结果时,我感到非常开心。我说真的,所有伟大的成就背后都有情感的驱动,编程也不例外。开始敲代码很诱人,但如果只是为了看到结果而匆忙编写代码,然后发现还有大量困难的工作要做,那就太糟糕了。因为这意味着你可能需要修改已经完成的部分。我更喜欢先打好基础再享受编码的乐趣,看到程序运行就像是留下餐盘里最美味的部分最后享用。
采访者: 你认为年轻程序员和经验丰富的程序员在编程方式上有什么不同吗?
盖茨: 现在的初学者从未经历过资源限制的挑战,因此他们很难领会到正确的思维方式,总是习惯性地认为资源随时可用。相比之下,十年前的程序员常常面临资源限制,所以经验丰富的程序员总是会考虑这些问题。编程是一项需要巨大精力的活动,因此多数程序员都是年轻人。但这也带来了问题,因为编程需要极强的自律。年轻人往往目标不稳定,容易被其他事情分散注意力。我的建议是年轻程序员应该坚持不懈,随着时间的推移,他们会变得更加出色。以我为例,从 1975 年到 1980 年,我的编程技能有了显著的提升。在 1975 年,我自信满满地认为自己无所不能,因为我阅读了大量的代码,并且没有遇到过自己无法迅速理解的代码。我认为,测试一个程序员编程能力的一个很好的方法是给他们大约 30 页代码,看他们能多快理解这些代码。
采访者: 这算是一种天赋吗?
盖茨: 当然,这绝对是一种天赋。这有点像纯粹的智商测试。你需要全神贯注于代码,并且回想起自己曾经写过的程序。很多人可能需要几天时间来阅读这些代码,但真正优秀的程序员可能只需要一个小时就能通读完整个内容。这其中的能力差异是巨大的。
采访者: 那么,学习计算机科学是成为程序员的最佳途径吗?
盖茨: 不尽然。最好的方式是亲自编写程序,并且研究其他人编写的优秀程序。就像我自己的经历,我曾经到计算机科学中心的垃圾桶里翻找,把他们操作系统的代码清单捡回家学习。要成为优秀的程序员,你需要愿意阅读别人的代码,编写自己的代码,然后让其他人来审核你的代码。你需要渴望进入一个充满挑战的反馈环境中,在这里,顶尖的专家会指出你的错误。你不能因为一些小的个性化偏好而忽视这些宝贵的反馈。有些顶尖专家可能会对一些细节,比如你如何注释代码,有所坚持。你需要看穿这些表面现象,因为他们可能在试图按照自己的方式塑造你,而这些并不总是与编程的核心质量相关。如果你有机会与伟大的程序员交流,你会发现他们对自己使用的工具了如指掌,就像艺术家熟知他的画笔一样。了解伟大的程序员们如何共同发展——他们如何获取反馈,如何培养对代码严谨和松散的敏锐感——是非常令人惊叹的。当这些人审视特定的代码时,他们通常会有非常一致的反应。
采访者: 你在编程方式上有没有受到哪些人的特别影响?
盖茨: 影响我最深的是那些开发 PDP 操作系统的程序员。还有 TRW 的 John Norton,他写的关于代码评审的备忘录给了我很大的启发。我也开始尝试对别人的代码做类似的分析。
我与 Paul Allen 的想法交融,因为我们共同完成了许多编程工作。在调试代码或考虑某些技术抉择时,有一个进度相当的伙伴可以讨论,这很重要。这种交流其实是一种轻松的休息方式,它降低了工作强度,同时让我们保持专注。我和 Paul 学会了如何高效合作,这样的伙伴关系非常难得。他对我影响极大。在微软时期,Charles Simonyi 和其他一些同事也给我带来了很多启发。
采访者: 你认为软件未来的发展趋势是什么?我们会继续开发更好的文字处理软件和电子表格吗?还是电脑将会开辟我们今天无法想象的新领域?
盖茨: 我们正在走向电脑承担更多思考任务的时代。我提出了“软化软件”这个概念,指的是软件能够随着时间适应用户的需求和兴趣。未来当然还会有更多优秀的文字处理和电子表格软件,我们还会利用网络、图形技术和新架构。以及,通过紧凑光盘(CD)实现大量数据存储,比如整个百科全书的存储。
真正的变革在于基于规则的编程。这种编程方式与传统的“如果发生这个,就做这个;如果发生那个,就做那个”有所不同。在基于规则的编程中,你需要制定规则,然后由一个推理引擎来分析当前的事实和规则,推导出新的结论并作出相应的行动。比如,程序可能会根据重力的规则判断,如果桌子上的东西掉落,而它是玻璃制的,那么可能会破碎。这样的程序以一种非传统的方式产生结果。这就是构建专家系统所用的技术。基于规则的编程指的是通过证明机制进行推理,而不是在程序中直接明确指定。这些技术可能在未来四五年内开始显现其影响力。对于那些希望在编程界留名的年轻程序员来说,专注于这种新型编程可能是个明智的选择。
采访者: 基于规则的编程是否能比传统编程更有效地处理多样化的信息?
盖茨: 这个问题不太容易解释。比如,你有一个计算桥梁建造方法的程序,它涵盖了关于压力、弯曲和金属特性的所有知识。这个程序中融入了工程学和材料学等方面的专业知识。如果你突然说要用塑料来建桥,对于这个程序来说,这种改变就像是要在火星上建桥一样翻天覆地。
在极端的规则驱动编程中,金属能承受的压力和重力的工作原理等物理原理都会被明确地定义为规则。所有的逻辑推理都是基于这些规则的检验和应用。但现在,我们还没有足够高效的规则验证工具,以这种方式去处理问题是极其低效的。然而,这正是我们正在取得进展的领域之一,它可能会在不久的将来改变编程的方式。另一个前景是,我们可能会有数百台计算机同时并行运作。事实上,这可能有助于我们高效地运行基于规则的系统。这样的重大架构变化可能会影响人们编程的方式,或者他们对编程的看法。
程序员最担心的是,编译器变得越来越强大,计算机运行速度越来越快,以至于程序员的作用变得不再重要。我曾经也担心,当我决定专注于某个领域时,随着时间的推移,它的重要性可能会逐渐降低。
采访者: 作为一家业务范围广泛的公司,微软如何跟上整个行业的快速变化?
盖茨: 实际上,我并没有跟踪所有的事情。我与 IBM、苹果、DEC 以及日本的顶尖人士合作。我必须了解即将发生的事情,而不是浪费时间去猜测。当我与微软的同事一起出差时,我们会讨论目前发生的事情。微软的电子邮件系统是一个高效的工具,帮我保持消息的更新。
保持信息更新的一个方法是使用个人电脑,确保我阅读了说明书并使用了前十款顶级软件产品。这些产品并不经常变更,所以我能够对它们有很深的了解。如果你真的对个人计算感兴趣,你会尝试每一款软件,了解它们的特点,并思考如何做得更好。
从某种意义上讲,个人电脑已变得更加简单。现在我们只有两种主流架构:PC 和 Mac。回想起以前,我们有三十到四十种完全不兼容的机器,还有许多不同的编程语言。但现在,为了让数百万用户能够理解并使用,我们不得不使这些系统更加统一和标准化。事实上,行业中的很多活动并没有真正推动技术的发展。我更愿意关注网络和图形领域,因为我们在这些领域的工作可能会影响技术的前沿,而不是去关注哪家零售连锁破产了,谁贿赂了谁,或者某公司给了某人多少股票。真正聪明的人会专注于他们的专业领域,并将任何他们认为重要的信息或可能产生重大影响的项目带给我。
采访者: 十年后,你认为微软会处于什么位置?
盖茨: 我们的目标很明确:开发能让每个办公桌和每个家庭都配备一台计算机的软件。我不确定这会花多少时间——预测具体时间不是我的强项。微软也想参与确保这些计算机的质量,我们将构建它们的系统软件,并开发它们需要的重要应用。
虽然将来会有更多计算机,但我们认为无需扩大开发团队,因为我们将制作更多销量的软件。这样,我们能够获得丰富的软件收益,同时保持公司规模相对稳定。这意味着我们可以更好地了解每位员工,促进沟通和工具共享,确保高质量标准的维持。
微软正在专注的一个新领域是光盘(CD-ROM)应用。我们将利用 CD-ROM 技术把个人计算机带进千家万户。
采访者: 您为什么认为 CD-ROM 会在家庭中成功,而其他技术没有?
盖茨: 现在,如果你买了台计算机再买教育软件,你会发现这个过程并不怎么有教育意义。软件的互动性和模拟现实生活的能力非常有限。而 CD-ROM 的大容量存储让我们能创造出更加丰富、互动性强的情境。
在教育软件领域,我们的竞争对手包括报纸、书籍和电视。目前的软件无法与它们竞争。如果不是为了避免孩子落后,那真的没有买这些设备的必要,它们不能真正吸引人,特别是对非计算机用户。
采访者: 您认为 CD-ROM 应用能与电视竞争吗?
盖茨: 电视是被动的娱乐方式。我们相信,人们更愿意与内容互动,选择不同的路径,并从机器中获得学习反馈。他们可以搜索自己感兴趣的特定内容。CD-ROM 的互动性是其与仅仅打开电视观看节目不同的地方。
采访者: 您在设计应用程序时所遵循的原则,会应用到 CD-ROM 软件产品中吗?
盖茨: CD-ROM 完全是新领域。我们希望通过 CD-ROM,你能查看美国地图,点击某个地点,放大查看,并询问:“这附近有什么酒店?”程序会给出答案。如果你在百科全书里点击贝多芬的一首交响曲,计算机就会播放。这是全新的界面,与文字处理器或电子表格等生产工具截然不同。CD-ROM 程序将解决全新的问题。在这个新媒体领域,竞争将非常激烈。我们要如何运用编程技能开发出优于他人的 CD-ROM 应用?这需要深思熟虑。它不仅仅是我们现有程序的另一个市场,而是一个完全新的领域,我们希望凭借智慧开发出创新和适宜的产品。
采访者: 所以,仅仅是把一堆报纸放进 CD-ROM 并编写一个检索程序就这么简单吗?
盖茨: 当然,有人会那样做,但我们不会。那没什么吸引力。我们坚信未来每辆车和每个家庭都会配备 CD ROM(光盘驱动器)。当你到达一个新地区时,你只需插入一张小光盘,就可以在上面查看路线、了解兴趣点。
举个例子,体育领域。你会有一张专门的体育光盘,插入后可以查看运动员的记录和照片。你可以回顾过往的比赛,查找比赛规则。每张光盘都包含教程,帮你学习感兴趣的领域。比如,如果你对棒球很了解,光盘上的测验会问,“这个人是谁?他做了什么?”
每张光盘都会提供互动游戏。在体育光盘上,这一点很明显。音乐光盘上的游戏可能是“猜曲名”,你可以查看乐谱,了解作曲家,听听不同乐器的声音。你甚至可以自己编写简单的乐谱。如果你是飞行员,那么机场和飞机的图片等内容也会在光盘上找到。
采访者: 这些 CD ROM 应用会在书店出售吗?
盖茨: 最终会的。目前我们正在探索合适的销售渠道。比如,专业计算机零售店是否会参与其中?我个人对此持保留态度。
有些 CD 应用听起来像幻想。但新媒体的出现毕竟很罕见。录像带并不算新媒体,它只是电视的延时播放形式,并无二致。交互式视频光盘曾有机会成为新媒体,但未能成气候。它缺乏足够的内容、低成本播放器和便利性,未能融入主流文化。光盘是交互式视频的进化版,但我们还需做得更好。
CD 带来的变化将是革命性的。我认为,零件目录不大可能再以印刷形式出现。对于那些需要查询、操作、以不同方式呈现信息的参考类资料,电子形式远远优于其他形式。对我们来说,最大的竞争对手是书籍。虽然 CD 不会对书市场构成重大冲击,但它将替代目录和某些类型的参考资料。
采访者: 您认为这会催生出像电视文化那样的新文化吗?
盖茨: 我不确定什么是新文化,但 CD 比电视更具互动性。CD 的用途不仅限于个人计算机编程那样的特定领域。它同样具有令人上瘾、深度参与的特质。用户不仅仅是被动接受,还会参与互动,比如在测验中挑战自己:“我是个高手,让我来试试。”我们会设计测验,让多人参与,为对方选择问题。如果孩子沉迷于个人电脑,我认为这总比看电视好,至少他们在做出选择,锻炼着思维。我并不讨厌电视,但电视不太能锻炼人的思维。顺便说一句,我自己就没有电视。
采访者: 你认为如果采用不同的标准,CD ROM 的发展可能会受到影响吗?
盖茨: 微软和其他规模比我们大数百倍的公司,正在这一领域进行激烈的政治角力,试图确立标准。可能会出现两个甚至三个互不兼容的浏览器,考虑到开发这些软件的高成本,这种情况是不幸的。因此,我们把大量精力投入到这里。我们正努力确保我们的标准被普遍接受,这是一个艰巨的挑战。我们必须迅速行动,集中所有的活动来推广一个标准,并确保这是一个合理的标准。 如果没有半导体行业的支持,我们无法实现这样的浏览器。正是存储器的低成本和高速处理器、视频芯片和音频芯片的进步,使计算机成为了一个多媒体工具。半导体行业正在创造奇迹。直到最近两年,由于其他用途的大量购买,所有的组件价格才变得非常吸引人。
采访者: 你觉得 CD ROM 会和专家系统结合吗?
盖茨: 不,它们相互之间并不依赖。虽然将来可能会通过 CD 来分发专家系统的数据,因为它能存储大量的数据库,但这两者并不是相互必需的。每个领域都有自己独特的挑战。
要制作一张世界级的 CD,所需的技能组合非常复杂,包括视频、音频、编程和交互性。这和所有新媒体一样,是个艰巨的任务。就像电视初期,电视演员们自认为比广播电台的人优秀,但他们只是静静地站在那里。人们花了很长时间才创造出丰富多彩的画面、生动的动作、立体的布景和电视上的特效。CD 也会随着我们对这种媒介的熟练掌握而不断进步。我现在可以告诉你我们不会犯哪些错误,但五年后,我可能又会告诉你我们确实犯了哪些错误。尽管我们很有创造力,但我们不可能立即完全掌握这种媒介。
采访者: 你有没有想过回到独自编程的日子?
盖茨: 当然,绝对有。那时你可以掌控一切,没有妥协。每一行代码都是你的作品,你为此感到自豪。这可能有点自私,但这就像被允许纯粹地从事数学研究一样,同时你还能获得让事物真正运作的实际反馈。我有时确实会羡慕那些能够只专注于他们正在编写的程序的同事们。