传奇程序员John Carmack 访谈实录(1)

译者:Frank FiringSquad :www.firingsquad.com/features/carmack/

藏在幕后的人

John Carmack是一个几乎不需要介绍的人——Id Software的创始人。该公司开创了第一人称射击类游戏,并且独立地改变了PC动作游戏的定义。从Commander Keen到Doom,再到Quake,Carmack/id的游戏吸引了数百万玩家通宵达旦地在计算机屏幕前击退他们的对手。

去年12月底,Firingsquad和Gamers.com获得了一个难得的机会,与John Carmack进行一次长时间的、面对面的访谈。我们利用这次机会进一步了解了John作为一个普通人——而不是一个程序员——的一面。我们还向John询问了他和Id未来的发展计划,以及他对于游戏行业的现状及其发展方向的看法。下面问题以粗体字显示,John的回答以普通文字显示。

Firingsquad: 你今年多大?

John: 29岁。

FS: 你是否认为结婚会影响你的编程工作?

John:不。如果这样想我就不会结婚了。

FS: 那么你和Anna[Kang]通常是怎样渡过一天的?

John: 最近我们一直在搭建一些火箭模型。我接受了一次访问,有人问我在十几岁时的情况,我提到了火箭、炸弹和一些类似的物品。我想这很有趣,我喜欢这样。当然,现在您可以到互联网上说“我想要这个、这个和这个。” 他们现在拥有比我以前所用的强大得多的火箭——这些动力强劲的火箭具有每秒2000牛顿的推动力!

FS: 你和Anna会进行一对一的网络对战吗?

John: 就在昨天我们还一块玩了Apple这个游戏,Anna与其中的一个玩家开玩笑——她踢了他一脚。我当时正在与其他一些人开会,所以他们玩了一会,而她一直在逗他玩。但是当我开完会时,他们把我逼进这个家伙的房间里,让我坐下。我进行了反击,取得了一次小规模的胜利。正如我所预料的,我听到了她从建筑物的另一侧发出的诅咒声。她仍然认为另外一个家伙在游戏最后魔术般地获得了技能!

FS: 我阅读了你在以前接受的一些访谈的内容,其中你提到了炸弹等物品。你是一个不听话的小孩,对吗?

John: 是的,现在回忆起来,十几岁时的我在很多方面就像是一个傲慢自大的小讨厌鬼。这些年来我已经逐渐成熟起来。现在回想当年,我认为当时的我表现并不好。我的意思是,尽管我很聪明——我当时已经开始编写计算机程序,但是我经常分不清是非。

FS: 如果你需要给在自己的学校中存在像你这样的孩子的人提点建议,你会说什么?

John: 我已经清楚地知道了我想要做什么。我想要编程——我在12岁时就深知这一点。我知道,这是我想要做的,而且我清楚地知道我想要实现的目标。你不能总是说世界亏欠你想要得到的。但是的确有些时候需要为一个孩子提供一些必要的帮助。我的父母从来没有真正地了解我,因而我没有得到我想要的计算机。我为此责怪了我母亲将近十年,但是我们现在都已经淡忘这件事情了。

当时我感到非常沮丧,因为我清楚地知道我想要做什么,但是我却无法做到。人们习惯于认为:如果你想要从事计算机工作,你需要进入MIT,再到一家公司工作,成为一名工程师,遵循“公认的发展道路”。但是我从大学辍学了,随后创建了我自己的公司。我的弟弟选择了一条更加符合惯例的道路。他获得了一个学位,成为了一名股票经纪人,而这正是我母亲希望他做到的。他干得不错,但是并不能像我一样拥有很多辆法拉利跑车来让父母感到自豪。

我现在可以说,我和我的母亲现在相处得很好。我们可以讨论这些事情和回忆过去,她意识到她在某些方面犯了错误。但是这有什么用?她不会再抚养别的孩子。

Carmack 对于钱的态度
FS: 你现在已经非常富有——这对你有什么影响?

John: 我现在拥有的财富足以让我无需再继续工作;我的确不需要再工作了。这种自由的感觉非常好。因为只要你拥有足够的钱来维持你的生活,你就不必听命于任何人,也不需要想法设法赚更多的钱。尽管有很多人已经非常富有,但是他们仍然屈从于拥有更多财富的诱惑。

我基本上拥有我所需要的一切。我已经拥有足够的财富来维持我自己和我的家人的正常生活,因此,没有任何人、任何公司可以对我产生严重的影响。

FS: 是否存在一些领域,你认为你可以利用你的财富施加影响?

John: 我尽量不像这样考虑问题。在推动其他事情方面,我尽量做到不要太主动。我希望直接解决事情的技术方面的问题。当然我可以用钱来解决一些事情,但是我更希望用直接的方式解决问题。

这就是为什么我不是一位很好的经理。我是一位工程师,所以我想要直接解决问题。我希望把环境建立一起,以便更好的解决问题,尽管在很多情况下我意识到还需要完成更大规模的项目。但是这并不是只有我才能做到的。

我非常擅长这个领域的工作,而且恰好我很喜欢它,因而我并不想转到其他的领域。我的财富足以让我提前退休,但是我喜欢我现在的状态。

在这方面我很反感某些公司的做法。一些创始人原先是非常出色的工程师,但是现在成了他们的部门的主管,因而主要从事管理工作,而不是工程项目。同时,他们所管理的大部分员工在处理实际工作方面远远不如他们当初的水平。

我希望这样的事情永远不要发生在我身上。我希望永远处于行业前沿,从事实际的开发工作。当然,回到幕后阅读资料、研究理论和获得更加广泛的视角也会带来一些好处,但是如果你不了解开发的具体细节,例如工程项目与真实世界的联系,你就会变成一个只会夸夸其谈的理论家。你可以从理论家的所作所为和一个从事真正的开发工作的工程师的工作之间看到这种巨大的差别。

在过去的两个项目中,我的时间被分成了几段。我有大约三个月的时间进行纯粹的理论研究。我目前正处于这个阶段,在这期间我需要与不同的人进行合作。随后我将用大约16个月的时间从事项目的开发工作。更多的关注研究性质的工作对我来说相当重要,但是我并不希望将我的大部分时间用于理论研究。我认为,研究的关键在于找出一种新的方法,但是当您想要真正地采取行动时,仅仅拥有这些理论知识是远远不够的。

专注和灵感
FS: 你对工作的专注让人惊叹。看来你是唯一适合现在这项工作的人。

John: 专注非常有用。在现在这个环境中,我认为软件是一种几乎最理想的介质。但是如果不做这一行,我可能会成为一名工程师或者某种意义上的科学家。我可以从事任何一种“硬科学”。

软件具有很多与众不同的优点。从事物理试验的研究人员需要用一年的时间进行准备和制作工具,然后还要花一年时间来分析试验结果。但是在开发软件时,你可以立即看到运行结果。你只需要坐在那里对程序进行反复的调试。你可以立即运行程序。对于所有智力探索活动来说,这是最容易适应的工作方式。我很庆幸自己生活在这个软件业非常繁荣的时代。

我再次想起当我还是一个年轻人时,我没有我想要的计算机。我感到非常沮丧。我觉得我“正在错过一个很好的机会”。我觉得自己应当编写这些游戏,例如早期的Apple II游戏。我之所以感到由衷的沮丧,是因为我觉得自己错过了最佳时机。当然当时我并不知道我可以抓住“下一个”最佳时机。

你读过Steven Levy写的《黑客》吗?

FS: 读过,这本书非常棒!

John: 我在十几岁的时候读了这本书。在看到第三章时,我感到“天啊,这才是我应该做的!”大约10年以后,我回想起来自己当时的想法:“如果那本书有第四章,也许我会加入那个行业。”这是一个非常有趣的想法。

现在看这段经历会觉得很有意思。当我是一个年轻人时我觉得错过了自己的最佳时机。因为当时是PC的早期发展阶段的黄金时期,我为自己没有抓住那次机会深感遗憾。

FS: 你是否认为编程工作和将想法转变为程序代码的过程激发了你对编程的兴趣?或者是你在Apple II和PC发展早期所玩的某些游戏?

John: 我可以说出我当时非常喜欢的游戏的名字,但是我真正喜欢的是进行抽象的编程。我喜欢这项工作的很多独特之处。

很多人加入游戏行业的原因就是他们喜欢游戏,而且乐于创新。

我对编程的热爱则来自于一种更加抽象的感觉。我可以从为Linux编写设备驱动程序中获得很大的乐趣。我还喜欢编写数据库管理程序或者其他程序,因为在开发过程中总是会遇到一些有趣的问题。有些事情可以给我带来更多的满足感。图像和游戏很可能是编程工作中最能给人带来成就感的领域。

FS: 为什么呢?

John: 因为你可以得到非常形象的反馈信息。当你编写一个图像算法时,它可以为你绘制一副图片。尽管数据编程会通过其他的方式给人以满足感,但是人类显然对可视的对象和必须通过符号理解的事物更感兴趣。这是图像编程极具吸引力的基本原因。但是我们必须进行很多方面的研究。我喜欢这项工作的所有领域,但是游戏开发总是会让你在克服一些极具挑战性的问题之后才能领会到它给你带来的满足感。

我在早期很喜欢RPG游戏,例如Ultimas,Wizardrys和所有类似的游戏。我为Apple II开发的一些非常早期的游戏基本上就是Ultima的翻版。我还喜欢所有的经典决斗游戏。

顿悟
FS: 从某种意义上说,你是否认为“龙与地下城”是你所希望看到的、带有一定的文字和对话的游戏模式?它是否像Quake引擎一样,是一种可以在其中添加各种内容的游戏结构?

John: 它就像是能够从头开始开发新的游戏,使用一种对你没有任何限制的方法。

事实上,我们最初打算将Quake开发为一个RPG游戏——并不是一个完全意义上的RPG游戏,而是一个奇幻游戏。但是因为Quake的复杂的开发流程,它后来的发展完全偏离了这个轨道。我一直非常愿意说明我们在刚开始时对我们所开发的游戏制定的目标。尽管它们成为了与我们的目标截然不同的游戏,但是我很满意最终的结果。我们不大可能在开发一款奇幻/角色扮演游戏。

FS: 我听说你减少了你对“龙与地下城”的管理工作。

John: 从Wolfenstein开始,整个公司都在每个周末玩我们所开发的游戏。玩游戏的时间在我们开发Doom阶段有所减少。我们去年纯粹为娱乐开发了几款游戏。但是它花了我们不少时间。要完成出色的工作,你必须用一天时间玩游戏,再用一天时间准备,但是我现在不可能再为其他的工作牺牲20%的时间。

FS: 你有一种特别的专注和灵感——你可以怎样改进一个算法或者技术。你多久会遇到一次这样的顿悟?

John: 我认为很多人都过于强调顿悟的重要性。顿悟的确很重要,但是只有在你清楚地了解一项工作的来龙去脉之后获得顿悟。事实上,很多出色的工作并不是顿悟的结果,而是辛勤工作的结果。很多人都误以为顿悟是最重要的。有时候它的确是,但是在95%的情况下它仅仅是你对你所掌握的知识的冷静分析的结果。

让工作成功的关键并不是一个天才的决策,而是500个明智的选择。更加重要的是始终做出明智的决策。制定一个天才的决策和很多平庸的决策还不如在整个过程中始终制定比较明智的决策。你必须要做出很多正确的决定。

即使在开发完Quake 3之后,我的任务清单上仍然有数千个有待进一步改进的细节。因此,关键在于了解所有必须完成的工作,进而找出“最有效的击球点”。例如“这些工作可以完成大量的任务,但是会带来一定的副作用。”或者“完成这项工作可能需要几天时间,但是它会让其他一些环节变得不太稳定,因此我不会去做这项工作。”

我当然希望遇到顿悟——当时我可能正在做某项工作,忽然间意识到可以采用一种更好的方法。这的确非常有用,但是我不能指望这种情况每天都会发生。实际上比较常见的情况是,当我回到家里时我可以告诉Anna:“今天我想出了一个新主意!”这种情况相当常见,而且非常有用。

开放源码
FS: 很多人都认为你是全世界最出色的游戏工程师之一。你认为在今后几年中,这个世界上是否还有足够的任务和深度来让你保持足够的兴趣?

John: 当然,还有很多难题需要解决。目前,我正在利用我的很多闲暇时间开发一些基于Linux平台的程序。我已经完成的一项工作是为Linux编写两个3D驱动程序,即在这个平台上进行大量的编程。作为一名开发人员,这对我非常有用,因为我做了大量高层次的、API级别的编程工作,但是我应当继续深入到系统底层。通过开发设备驱动程序,编写一些深入到硬件内部的部署级程序可以开阔我的眼界,让我可以从整个流程的角度看待各项工作。有很多程序员只知道顶层的开发方法,而不知道程序工作的基本原理,这主要是因为他们无法“看到”系统的内部结构。

我正在考虑着手的另外一项工作是(因为我喜欢清楚地从最高层到最底层的所有技术细节)花一些时间开发我自己的网络堆栈,以便进行研究和学习。我还做了一些我想要尝试的试验,以便在串行驱动程序和分组驱动程序的层次上了解操作系统实际上为路由时间和排序所支出的开销。我希望从我们通常用于通信的协议层下面获得一些信息。

FS: 仅仅是在Linux平台上,还是也包括Windows和Mac平台?

John: 关键是在Linux平台上开展这些工作更加方便,因为你能够获得你所需要的所有信息。尽管Linux还不能取代Windows成为主流的桌面操作系统,但是它的确具有一些独到之处。

吸引我这样做的原因是有人为Matrox显卡编写了一个Linux驱动程序。我对它进行了测试。显然它不能兼容Quake 3。因此我决定将它下载下来仔细研究。我对它的出色的工作机制留下来深刻的印象。尽管它的速度不快,但是它几乎可以说是一个功能齐全的、高质量的程序。但是它在纹理的交换方式方面存在明显的缺陷。他们交换的是最近使用的纹理,而不是最少使用的纹理,因而你可以在屏幕上看到明显的失真。

我很清楚它的工作方式,因而我想“太好了,它提供了源代码。”因此我决定下载源程序、进入CVS库和所有文件,按照我的想法改进代码,发现程序缺陷,并将其消除!整个过程非常明确。

由此得出的结论是,Apple的驱动程序曾经也存在相同的缺陷。因此我们可以在两个驱动程序中发现相同的缺陷,但是对于Linux程序来说,我可以直接进入源程序,消除这个缺陷。尽管在很多层次上仍然存在不少障碍,但是具备这种能力非常重要。从根本上说,如果你在使用一个源码完全开放的系统时遇到了一些问题,你可以花时间自行解决这个问题。你不需要等待别人的帮助。你不需要低声下气地寻求帮助,也不需要等待补丁发布,而通常这样做会降低时间的利用效率,但是如果某个问题真的让你头疼不已,你可以直接查看源代码,解决这个问题。这会让人感到非常振奋。

关于Linux的其他问题
FS: 这就是你对待问题的态度——亲手解决问题。你并不想等待别人来发布一个升级程序,而是愿意自己动手。

John: 是的,这就正是为什么在我对网络或者其他问题进行研究时,我更愿意使用Linux平台。如果需要,你可以取出操作系统的某些部分,告诉自己:“好的,现在我想要把这一部分完全删除,因为我想要做一个试验。”你可以获得自由发挥的空间。

我认为,在未来几年中,软件的可用性将日益得到重视。有很多经济趋势与此有关。你将看到价格低于500美元的PC和90美元的Windows使用许可。如果人们只想执行一些非常基本的任务,他们很可能希望获得一个免费的操作系统。

Linux界有很多疯狂的支持者,他们的观点有时缺乏足够的理性。但是,在关于Linux的实际优势的宣传中的确存在着一些真实情况。

FS: 你很关注技术,而且你鞭策自己不断进步。但是你是否考虑过找一个上司来帮助你学习新的技能?

John: 我知道在某些工作上聘请管理人员可以带来很多好处。我们在第三季度末聘请了Graeme来帮助我们管理部分业务。但是它并没有对我的工作方式产生实际的影响,因为Graeme还没有蛮横到干涉每项具体的工作。事实上,我自己对工作的安排往往好过大部分管理人员给我制定的工作计划。

我也意识到了我的个人组织能力的局限性。我会将几千件事情放在我的任务清单上,而且常常是从头开始对所有事情进行排序。我的确认为如果有个人的主要工作就是确保我知道和了解所有这些任务的重要性就好了,因为每个人的组织能力都存在一定的不足。你自己可能不会这样做,但是有些事情就是因为你一直不愿意去处理而最终泡汤。我已经意识到了让某个人帮我安排工作的好处。

最近我在找一个人来对一些程序——尤其是Linux驱动程序——的OpenGL性能进行兼容性测试。我为此编写了大量的程序,我也尽量设法将这件事负责到底,但是我知道我需要采取多种方法来实现我的目标。我希望编写一个完美的程序,但是我也深深意识到,在我的有限的时间里,我不可能做到面面俱到。

有时候有一个专门负责帮助你的助手会带来很大的方便。但是这对我来说仍然只是一个理论上的问题。我相信这样做会有所帮助,但是还没有看到实际的效果。

Carmack作为学生
FS: 出了组织能力以外,能否将一位管理人员视为老师?你觉得可以从谁身上学到对自己有用的知识?

John: 实际上,我几乎向每个人学习。这是十几岁时的我和现在的我的主要区别之一。当我十几岁时,我的想法是:“我比我周围的人都聪明,因此我完全不用理会别人说什么。”我在大学的几个学期中都是如此。现在回想起来,我觉得我采用了错误的处世方法。是的,也许我的确比教授聪明,但这并不意味着我不能从他身上学到对我有用的知识。

现在我的处世方法是,我愿意向与我一同进行编程的任何同事身上学习知识。我很珍惜我与Brian Hook一同工作的时光。我从他身上学到了一些更好的C语言编程标准和如何更加严格地使用struct和const——而我过去并不这样做。这对我非常重要,因为我通过他提高了自己的技术水平。另外还有Graeme——我看到他从Java库中迅速地找到自己所需要的信息——而我往往是从头做起,到处查找这些信息,因而花的时间比他长得多。

某人并非要成为一个“更好的”开发人员或者程序员才有值得你学习的知识,这是我在过去10年中获得的一个非常重要的经验。到处都有值得你学习的知识。如果你拥有正确的学习态度,那么把自己放在一个信息丰富的环境中会对你很有帮助。如果你想从任何地方获得你想要学习的知识,而不是寻找一个将所有信息都集中到一起的有用信息 “宝库”,你必须能够从你所能接触到的任何地方搜集对你有用的信息。

在开发Quake的过程中,我们聘请了Michael Abrash。我为此激动不已,因为我曾经通过他以Dobbs博士为笔名发表的很多文章中学习了大量基本的PC编程技能——包括汇编语言和图像编程。因此我对能够于他合作感到非常高兴。我从他那里又学到了很多知识,但是有趣的是,我有一阵子感到非常不舒服,因为他在编程方面对我非常顺从。Michael的知识非常渊博,但是我的长处是学习新知识的能力很强。

因此,我几乎从我合作过的所有程序员身上都学到了很多知识。

FS: OK,你刚才提到从周围搜集有用的信息。你怎样看待非技术性的信息来源——例如书籍和电影?

John: 我这几年来最喜爱的书是由Vernor Vinge撰写的《A Deepness in the Sky》。在电影方面,我不知道我所说的是否有参考意义。我欣赏了大部分好看的电影。《玩具总动员2》非常出色——我很喜欢这部电影。

FS: 《黑客帝国》呢?

John: 《黑客帝国》非常精彩。我喜欢所有精彩的科幻、动作和类似的电影。我不是很喜欢意义深刻的电影。我看电影的目的纯粹是为了娱乐。有些电影实际上改编自我们开发的游戏。我们的游戏相当于计算机游戏界的施瓦辛格电影。

Quake 和简洁
FS: 你认为人们为什么喜欢Quake 3?

John: 我们希望通过Quake 3达到的目的就是让你可以在玩游戏时全身心地投入其中。对于华丽设计或者其他特点的吹嘘,以及试图在游戏上强加一个传奇或者故事的做法毫无意义。一个游戏的真正价值在于让你在玩游戏时感到有趣。关键并不是击败游戏对手或者完成某项任务,而是要让战斗真正有趣。

必须有些让你想要采取行动的任务。人们不会因为玩垒球游戏而真的去玩垒球;必须有一个本身很有意思的战斗。我认为我们在这方面做得不错。我们期望,并且的确从我们的拥护者那里得到了大量的反馈信息。

肯定有些玩家希望玩更加复杂、更加具有挑战性的游戏。对于游戏来说,这是一个可行的发展方向,但是它可能会导致游戏内核的发展停滞不前。你可以在玩飞行模拟游戏时体会到这一点,因为这些游戏要求你在开始游戏之前阅读漫长的使用手册。而在过去的飞行模拟游戏中,你要做的就是跳进飞机、起飞和射击。这些游戏可以给玩家带来真正的快乐。而在有些严肃的模拟游戏中,你必须让自己相信你真的达到了娱乐的目的。

也可以像这样来开发第一人称射击游戏,即要求玩家了解现在发生的情况,各种工具的使用方法,以及各种战略等——而玩家并不想要知道这些,他们希望的只是坐下来玩游戏。也许有很多人喜欢这样的游戏,但是我并非如此。我没有时间学习游戏的各种知识。我从来不玩那种需要学习大量复杂的知识的游戏。我只喜欢玩一些简单的、迅速上手的游戏,它们让我可以立即进入游戏,享受一段美好时光。我认为与我一样的游戏玩家是上面那种喜欢复杂游戏的玩家的五倍以上。

FS: 你最近一次玩超过2小时的、非id出品的游戏是什么?

John: 很可能是Nintendo 64平台上的F-Zero X ——一款赛车游戏。

你可能感兴趣的:(随笔,游戏,工作,编程,linux,apple,任务)