第一个完整故事

本文翻译自The first complete story
原文作者: Paul Wicking
校审:Eric Qian, Liang Qi

有些Qt用户可能已从2019年12月Martin Smith直白的邮件了解到,他已卸任QDoc维护者的职务。尽管Martin说自己是退休,但大家都认为他还年轻。70岁生日那天,他在我们等待甜甜圈的时候做了一个亲切、简短的演讲。他称自己为“The first complete story”—— 也就是这篇文章的标题 —— 以此来总结自己作为Qt专业开发者和之后贡献的职业生涯。

在这里插入图片描述
卸任QDoc维护者职务
Martin Smith Martin.Smith at qt.io
2019年12月11日星期三欧洲中部时间15:52:09正式卸任QDoc维护者职务。在使用Qt的25年 (从METIS的Qt第0号许可证开始)之后,其中最后13年负责维护QDoc,我即将成为第一位曾服务Trolltech、诺基亚、Digia和Qt公司并最终因年龄(2020年1月14日70岁生日)而退休的员工。
Topi Reiniö非常乐意接替维护者的职务,我认为他是指导QDoc完成下一阶段开发的最佳人选,这将非常重要。
我希望继续有所贡献,但我已为一本科幻小说写了25年的大纲,现在我没有理由不完成它。
感恩这份软件工程师和技术文档工程师的有趣工作。
Martin Smith

那天,我有幸与Martin坐下来聊了几个小时,回顾他早年的软件工程师经历、在Qt的时光,以及对未来的计划。我们聊得很开心,以下是我们的对话笔录。我希望捕捉到了Martin对软件开发艺术、技术、Qt及其个人兴趣爱好的愉悦、乐观心态和无尽的热情。用他自己的话说,Qt“是我用过的、最好的开发工程装备”。在过去的15年里,Martin一直是这一切原因之一,在今后的若干年里,他的传承将成为Qt的一部分。

Paul:你对成为公司名人有何感想?

Martin:我不知道自己算不算名人。但是我有段时间觉察到了自己的与众不同,因为我比其他人年长很多。渐渐地,人们都离开了。当Eirik和Haavard离开公司时,我开始有了这种感觉。那是很久以前的事了,当时Trolltech刚被卖给了诺基亚。但即使在那时,我想公司里还有几位五十多岁的同事……他们现在都离开了,所以只有我一个人。所以,我有点变得…我觉得就像是爷爷。虽然大家并没有那样对我!我确实感觉不一样,但从没觉得自己是个名人。现在我想在某种程度上是,因为我是第一个因为年纪太大离开公司的人。我走到了终点。我们已改用Clang运行QDoc,所以它现在有了一个真正的C++解析器,我们已经解决了大部分问题。现在它正在迁移到DocBook(格式),这将是一个全新的时代。所以,到了我离开的时候。我想这就是我的感受,我不觉得自己是名人。我很享受这段职业生涯。

Paul:请分享一些你的背景。你是如何进入编程和软件开发的,什么时候开始的,是什么促使你从事这个职业的?

Martin:我在美国读的高中,也就是10到12年级,上大学之前,十二年级的时候。那时有一位数学老师,教我的第三年,我已经学完微积分……但几乎一窍不通。他是第一批在美国高中阶段开设计算机编程课的老师。所以我就碰巧学了。我们学了Fortran。用的电脑是镇上一家银行的IBM 370。他们还慷慨答应只要我们提交程序,他们就会运行。因此,我们有了按键打孔机。首先我们会在那些旧Fortran编码表上编写程序,然后我们会坐在按键打孔机前打卡,完成一叠卡纸。之后我们用橡皮筋把卡绑起来、放在盒子里,老师会把盒子拿去银行、运行程序。所以,我们每天都会得到运行结果,并很快就学会了使用打孔机。你必须非常小心,因为任何错误操作都会毁了运行。你还必须非常擅长调试代码,因为你所拥有的只是生成的清单。通常没有真正的错误信息,在代码的末尾会有一个错误列表,列出它发现的错误。它没有内嵌的错误信息或类似的东西。当然如果你没有犯任何语法错误,程序就编译完成了,你会得到一个汇编语言列表,接着它会运行汇编程序并生成二进制代码,再运行程序。通常你会得到一张空白页,因为没成功!所以,为了发现真正的问题,你必须花费大量时间检查代码,因为你根本得不到系统的帮助。

Paul:你会和其他学生合作吗?学生之间有没有进行某种同级评审?

Martin:不会,没有的事。你知道,那是在Al Gore(说他)发明互联网之前。那时还没有软件工程(software engineering)这个说法。Knuth写了一系列书,至今仍是编程的经典。我们会仔细研究这些内容,了解如何创建链接列表之类的东西。当然,我们没用Fortran开发。老师会布置作业,以今天的标准来看,那是个微不足道的任务,但当时计算机编程还是件新鲜事,所以一切都很困难,没办法作弊。我记得有一个任务是画正弦函数。没有图形。你必须弄清楚如何设计X轴和Y轴,然后用什么来绘制实际曲线。当然,它是沿着页面纵向绘制,而不是跨页面绘制。所以,即使这样简单的事情也是一项相当大的挑战。我们的老师是数学杂志《Fibonacci Quarterly(斐波那契季刊)》的编辑。所以,另一项任务是生成斐波那契数列。当然,一旦你理解了算法,就简单多了。这就是我对计算机编程产生兴趣的故事。第二年,我去了家乡塔科马的University of Puget Sound。我父亲是大学副校长,他们刚买了一台新计算机UNIVAC,用于行政管理。当然,没有人知道怎么用它。

Paul:那是什么时候?

Martin:那是……1970年,刚完成登月。纽约Woodstock音乐节刚开始。越南战争仍在进行。计算机开始在这个世界上发挥重要作用。

我父亲带我去见了一位女士,她被雇来改造学校的管理系统,使之计算机化。她绝望地不知所措,而我对这事非常起劲,所以她很高兴见到我。我必须学习一种叫做“Report Program Generator (RPG)”的语言,基本上就是读取一叠卡片,然后根据数据生成一份报告,也许还会根据某种算法输出一叠新卡片。很快,我就上手了。我没有报酬,只是帮忙做这项工作并因此拿到了一些学分。但那是相当幸运的,尽管之后,我没用上RPG,这个经历培养了我的编程思维,是我第一项真正的软件开发工作。实际上,我编写的程序被大学的管理部门用了好几年来制作报告。

我参加了空军预备役军官训练团,主要是因为他们愿意支付我的学费。我上的是私立大学,尽管我父亲在那里任职,但学费还是相当高。我大四的时候,他们让所有的后备军官训练团学员参加了飞行员测试,看看你是否会成为一名飞行员。因为他们想让飞行员参战。而我加入后备军官训练队是为了逃避征兵。我在抗议战争和履行服役义务之间左右为难。我还蛮希望能进入空军。当时,他们每年根据出生日期从年满18岁的孩子中盲选。所有的出生日期都会被随机抽取。第一个被抽中的人肯定会被征召,以此类推直到365天。通常盲抽近100个结束。我的大概是第123个,所以我知道自己很安全。但是我已经加入了后备军官训练团。所以,我本不会被征召入伍,但我还是去了空军。

我参加了飞行员测试。我不想当飞行员;我没有那种脑子。你知道,要驾驶马赫数为2的喷气式战斗机,你必须非常专注。我的脑子不是那样运作的,肯定会心慌意乱。我很清楚!我上了飞机就会撞毁它。所以,我不想当飞行员,但我没告诉任何人。我参加了测试,都是多项选择题,对我来说很简单。我可能可以答对所有问题,但我故意把很多答案都填错了,因为我不想得高分。但我又想拿到足够高的分数,以便继续留在空军,我只是不想当飞行员。考试结束后他们打电话让我过去,“你考得很好,Smith先生!”和我说话的是一位空军上校。我说,“我不想当飞行员!”他对我笑了笑说,“你为什么不直说呢?如果你不想驾驶一架价值5000万美元的飞机,你认为我们会把你送上飞机吗?”我说,“好吧……既然你这么说了……”于是他说,“好吧,你想做什么?”我回答说,“我想当电脑程序员”。“那太好了,”他说,“那么你该做的是写信说你想做什么,然后我们把信送到伦道夫空军基地,在那里他们分配所有的任务。”我说,“你什么意思?他们会让我做我想做的事吗?”他说“是的。军方想让你做你最擅长的事,而你最擅长的事就是做你想做的事。当然,并不总是这样,有些人生来就是当步兵的料。我们需要计算机人员,而你也想做这个。”

我写了信,果然,我被分配到位于夏延山的科罗拉多斯普林斯的太空防御中心。电影《战争游戏(Wargames)》就是在夏延山拍摄的。这部电影比当时的实际情况更加电脑化。他们送我去那里,我们的任务是跟踪所有绕地球轨道运行的物体。当时包括大约1000个真实有效载荷和数千件垃圾。我们必须追踪一切。主要是因为我们必须区分可操控的卫星。那时候,苏联是唯一的另一个能发射有效载荷的国家——当然,他们不会告诉我们他们的发射计划,或者改变轨道。所以,我们必须追踪一切,在一个轨道上跟踪一颗新卫星。空军在土耳其、泰国和格陵兰岛都有雷达系统……它们都指向苏联,这样我们就能检测到它们的发射地。我们只要看到火箭穿过雷达光束,就触发警告,告诉人们已经发射了。然后我们必须能够跟踪它。那段时间里,他们主要使用所谓的贝克-纳恩相机,有一个很大的超广角镜头,看起来像一个内战时用的旧迫击炮。它瞄准夜空拍摄真实照片。延时摄影,这样你就可以看到东西在上面移动。然后知道纬度和经度,以及摄像机所在的地球物理位置,就可以计算出卫星的星历数据高度和位置。他们会汇报到D-ARPANET ——实际上是在Al Gore发明互联网之前!这是互联网第一次用于军事用途,就是发送这些数据。我们会发送数据告诉他们去哪里找,然后他们会发回数据告知他们看到了什么。当然,即使卫星无法操纵,它们也会衰减,其轨道会衰减或自然改变。所以我们总是必须发出所谓的视角信号,告诉他们应该把相机或雷达对准哪里才能看到东西。我们有一份所谓“遗失清单”,罗列了未出现在应该出现地方的卫星和垃圾。我们一直试图将其最小化。我们可以判断自己工作表现的好坏;如果丢失对象的数量上升,我们就有麻烦了,如果数量下降,我们就OK了。

Paul:有点像QDoc警告?

Martin:是的,和QDoc警告一样。那是我第一份真正的计算机专业工作。我们用来计算跟踪所有卫星的计算机是一台Philco-Ford 2000,它有……我想是60位字或者类似的东西,只有64K的内存。还有一个磁鼓,它是磁盘的前身,看起来有点像顶部切开的圆锥体,我不知道它每分钟转速多少,反正不是很快,只有256K存储空间。其余都保存在一英寸的磁带上,我们有一整排磁带驱动器,它们总是来回旋转。于是,我们变得非常擅长阅读overlay。因为我们只有64K的内存可用。我是说,你能用64K做什么?不多,所以任何程序都需要进出几个overlay。但是我们仍然使用按键打孔机。没有终端。有电传打字机终端,但没有显示器。我们没有任何视频显示器。因此,当我们编写程序的时候,每天仍然只能几次反馈。然后越南战争结束了。空军中的下级军官太多了,所以他们同意如果有人想离开就让他们走。从战争中回来的人得到了研究生院所有的名额;我在科罗拉多斯普林斯一直又胖、又笨、又快乐。所以,我想如果自己离开空军,会有更好的发展机会,于是我去了华盛顿大学的计算机科学研究生院,并获得了硕士学位。我在那里的计算机科学系学习;计算机科学系也就刚成立了几年,计算机科学就是这么新兴。在那里,我第一次读到一本写着“软件工程”的教科书,第一次开始学习软件工程技术。做作业的时候,我去了波音电脑服务公司工作。我们在那里研究了预警机系统,即空军的机载预警控制系统。该系统现在仍在使用。

我记得毕业前有一天,计算机科学办公室里张贴着招聘信息。你知道,我不想呆在波音公司,正在找一份非军事的软件工程工作。所以,我会每隔几天去那里看看招聘广告。有一天那儿有一张手写的便条,上面写着,“比尔·盖茨正把他的公司从阿尔伯克基搬到华盛顿州的雷德蒙。公司叫微软,他们正在招募懂C语言的程序员。”相较于C语言,当时我对Pascal语言更感兴趣。我想“嗯,那可能很好”——当然,那时没人知道比尔·盖茨是谁。后来,我看到了惠普公司的广告,在科罗拉多斯普林斯。我心想,“我要回那儿去”。所以我当初没进微软,而是去了惠普。

Paul:但是你至少在惠普有机会用Pascal吗?

Martin:是的,事实上,他们正在研究所谓的微处理器开发系统。那是一台装有模拟器的计算机,它模拟了当时不同的微处理器。有Motorola 6800和68000、Zylog 8000和Intel 8080等等。软件公司刚刚开始用各种处理器开发东西。他们需要一种方法来同时开发软、硬件。为此,我们开发了这个微处理器。我们提供的语言就是Pascal。在那里,我被雇来编写,我认为可能是,第一种为任何微处理器编译代码的高级语言。我们有一个Pascal解析器,尽管没有参与开发,我用这个解析器生成了一个中间语言。之后其他程序员加入我的工作,他们每个人都写了一个翻译器,把中间语言翻译成任一微处理器的机器代码。我认为这是第一个为多种机器生成代码的编译器之一。

Paul:你的跨平台经验要比Qt早几十年了?

Martin:在发表相关论文前几十年就开始了!但我们没有因此获得任何荣誉或认可,因为很快我们就被技术赶超了。微处理器开发系统之所以消亡,是因为他们以现在的方式做事。但是当时是70年代末,它不像现在这样完整和简单,它要复杂得多,也不像现在这样精密。于是,我决定当一名编剧。我离开了惠普,搬到了洛杉矶,开始上影视编剧写作课。但我仍开发软件维持生计。我在一家名为Interactive Systems的公司上班,这是AT&T的一个分支机构。当时,我们有了80286和80386;比尔·盖茨很了不起,DOS至关重要,他们在征服世界。但是AT&T想让Unix分一杯羹,打造首个Unix版的个人电脑,于是设立了这家Interactive Systems公司。我又开始开发C编译器……Pascal快要死了,那时是C语言的天下。C++还未出现,或者我们对它还一无所知。C语言越来越厉害。那是1982到1987年,我在洛杉矶。当然,我没当成编剧。

Paul:你有没有参与过剧本创作,还是只参加了培训课程和想成为编剧?

Martin:我为电视剧《Trapper John M.D.》和《夏威夷神探》写过几集剧本,但它们没被制作或买下,但制作公司读过。Tom Selleck(夏威夷神探的主演)没有读过,但是制作公司的人读了,但没有下文。当厌倦此事时,我是计算机程序员。要成为一名编剧,你必须善于交际、积极外向。大多数计算机程序员都是强迫症类型的思想家,他们喜欢做自己的事,不善于打理自己的人际关系。我就是这类人。我最终接受了这点,然后我想,如果洛杉矶的生活不适合我,澳大利亚肯定会好些!所以,我在阿德莱德的一家软件公司找了一份工作。我去了那里,开始做各种项目。我们做的一件事——我又从零开始——是一个系统……你知道奥斯陆或任何城市的地图册吗?在美国叫Thomas Bros.;我不知道这里叫什么。他们开始把地图数据化。那是大概在1987到1988年。阿德莱德市政府雇我们开发一个系统,就像在这里的互联网上,使用公共汽车系统或火车系统,你输入“我要从这里到这里”,它会计算你将使用的公共交通服务,告诉你从家到汽车站或火车站和下车后到达最终目的地的步行路线。当然,你需要公共交通信息和所有服务的数据。然后你还需要地图数据,所有的道路和名胜信息。我们从地图公司买了地图数据。我又一次从头开始摸索。我们利用地图数据计算出行径路线,并将其显示在屏幕上的地图上。我想我们可能是第一个这么做的公司。当然,几年后谷歌地图出现了,我们又一事无成。但是,能再次先人一步参与做这样的事情真是令人着迷了——至少我们在我们已知的范围内。

我们还为剪羊毛机器人做了软、硬件。当时,他们以为可以制造出一个比人类剪羊毛更快的机器人。

Paul:我猜他们现在还没造出来。

Martin:不,我们很接近了。这个系统的工作原理:羊会被引入一个小空间,它的四条腿下会伸出两个东西让使它离开地面。然后,一个人会很快将一个电极连接到它的尾巴和鼻子上,并对体内进行少量充电让它的肌肉变硬。这样,羊就不动了并被举离地面。接下来,两个机械手臂会出现,就像你在汽车工厂看到的那样。他们用羊毛剪代替手修剪羊头。但是毫无疑问,液压机械臂和羊皮肤之间的力量有很大差异……所以,其中一个人,而且他是第一个使用压力感应技术的人。羊毛剪头上方有一块小金属板,当羊毛剪推绵羊的时候,它会使刀片稍微偏斜,弯曲一块金属会改变通过它的电流特性。你可以根据这个板的电流特性变化来计算你需要施加多大力。

Paul:是力反馈?

Martin:没错。嗯……我们花了点时间才成功,为此还害死了几头羊,因为机械臂会直接刺穿羊的身体。这是一个很难解决的问题,但是我们很快就解决了。这些机器人实际上是在放羊,保持与羊群的接触,知道它们去过哪里和没去过哪里。问题是他们不能剪敏感区域,他们只能剪背面和身体两侧。其余部分还是需要人工完成。它最终并没有变得更快,比一个工人要慢。所以,它一直没流行起来。但无论如何,这是一个工程奇迹。

我们做的另一个项目是机载激光测深仪。那是一架螺旋桨飞机,里面有很多电脑,还有两个激光器:红色激光和绿色激光。当飞机沿着空中走廊飞行时,激光来回摆动,向海面发射激光脉冲。其中一个激光器,我忘了是红色的还是绿色的会穿透水,到达底部并反弹回来。另一个撞到水面就反弹回来。两种情况下,一些光子会回到它们的起点,并撞击那里的传感器,传感器会检测到它们。知道脉冲是什么时候发射的,以及光子需要多长时间才能回来,你就可以真正地测量它。你可以计算出那一点的海洋深度。这在当时是一种非常快速的海图制作方法。他们通常的做法是用船进行探测。探测船要比这架飞机花费更长的时间,后者可以飞过去扫描,然后处理数据,生成海岸线的深度图。它的工作深度不是很深,我想它只能在不超过50米左右的范围内起作用。但它很好用,并被广泛使用。1995年,它甚至在挪威被用来制作一些峡湾地图。

我一直在用一个叫做ObjectStore的软件包。现在已经支持C++。有人认为以二进制格式存储C++对象是个好主意。他们发明了一种叫ObjectStore的东西,这是一种用于管理二进制对象的数据库管理系统。我在这方面并不是真正的权威,但我在公交地图系统中使用过。我在挪威霍腾(奥斯陆向南一百公里的一个小镇)一家名为Metis的公司找了份工作,这家公司参与了名为主动知识建模(active knowledge modelling)的开发。这是一种为任何复杂的组织、项目建立可视化模型的方法。你可以通过这个视觉模型找出不同的东西。从某种意义上来说,它是活跃的,即在屏幕上实际上被视为线条的对象之间存在关系,并且这些对象有不同的框和形状;在某种意义上说,一个对象或一种关系中可以由其自带软件进行计算。你可以生成模型的报告、组织的报告,你可以对事物进行操作并创建新的对象,删除过时的对象,诸如此类。因此,这是一种非常直观和活跃的方式来存储和使用关于任何复杂主题或组织的知识。

我们用ObjectStore开发系统。但当时,我们也在用Qt。事实上,他们已向其他使用Qt的机构出售了商用许可证。我们是第一个使用商业版的,但是他们没有给我们许可证。所以,他们开始数一、二、三、四、五,然后他们意识到他们没有给我们许可证——所以我们得到了第零许可证。我们的客户包括波音、梅赛德斯-奔驰,任何一家需要用模型来描述自己的大型组织,以确定其自身运作方式。于是,Eirik和Haavard来找我们开会,他们说,“你可能不需要使用ObjectStore,那是在浪费时间,不该那样做。”无疑他们是对的。我们问他们,“那我们该怎么办?”他们说,“我们为你设计一种语言。”他们设计了一种用于存储知识的文本语言,并称之为MML,全名为Metis Modeling Language。这几乎就是QML!当然,它还不是JavaScript,或者类似的东西,但它很像QML。这就是我们知识建模系统的基础。我们将模型保存为文本文件,而不是ObjectStore。当然,它花了很长时间读取和构建模型,但是一旦开始运行,那万事大吉了。

最终,我们被位于挪威奥斯陆的一家公司从AT&T手中收购,这家公司叫做Computas,是一家软件工程公司。我也从霍腾搬到了奥斯陆。几年后,它被德克萨斯州一家名为Troux Technologies的公司收购。他们是我们的主要竞争对手。他们买下公司是为了消除竞争。一年后,我们被裁员,他们拿走了我们的技术。

就这样,我失业了。当然,我一直在使用Qt,所以我申请了Trolltech的工作。我想那是2005年。当时,Trolltech在澳大利亚布里斯班有一个大办公室。我想,“我会一举两得,加入Trolltech,然后回到澳大利亚”。我做到了,我得到了Trolltech软件工程师的工作,他们把我送到了布里斯班。

我讨厌布里斯班。

太潮湿了!没去过布里斯班的人认为布里斯班就在黄金海岸,就在海边。不是的。它离黄金海岸有一小时的路程。它在一条河边,到处都是红树林。当然,有350万、400万人住在那里,所以是个很棒的地方,但是我讨厌它。因为天气太热了。我为GreenPhone和其他一些项目开发软件。我心说,“我真该回到奥斯陆”。所以,我上了Trolltech网站,看到文档团队有一个职位空缺。我曾想成为一名编剧,那为什么不撰写技术文档呢?于是我提交了申请,他们把我带回这里。我一到这里,他们就说“我们需要有人来做QDoc,因为没人想做这个”,而不是撰写技术文档。我说,“好的,我来做,”这听起来不错。我想,这应该是2006年,我在澳大利亚呆了不到一年,大约六个月。那时,我们刚刚开发Qt 4。QDoc只是一次性的工作,读入所有Qt文档源文件,并输出文档。那时没有模块。我实际上把QDoc警告降到了零,这是我首批任务之一。然后Qt 5出现了,他们没让我模块化QDoc,而是把它给了团队中的另一个人……这么说吧,他不太精通软件架构。于是,他想出了使用索引文件的主意。索引文件的目的是允许外部用户将他们的文档链接到Qt。这就是它的全部意义。尽管它不是中间语言,但现在它被用作一种类似中间语言而不是中间语言。它仍然用于链接;而且链接起了Qt模块。它能起作用,但很长一段时间都不稳定。当时,关于我们是否应该坚持做QDoc,有很多质疑、批评。我试图置身事外,只说,“我很乐意做你决定的一切。”幸运的是,每年Lars都会做出决定——这个问题每年都会出现,并持续四五年 —— 每次他都决定我们坚持做QDoc。最终我们解决了大部分问题。但是逐渐地,缺少真正的 C++解析器成了一个大问题。我一直说我们需要替换解析器。我忘了是谁最后决定这么做的, Olivier完成了整合。这真太好了,如果是我的话,恐怕永远做不完。因此,我们有了Clang。现在我们还有DocBook

这就是我的故事。

Paul:你当时说这很无聊。

Martin:要知道,我又经历了一次,发现还是有些有意思的地方。

Paul:你希望更多人了解软件工程或编程的哪些方面?

Martin:我们讨论过软件工程师基本上是强迫症型思考者、“完美主义者”……我不喜欢这个词,因为它意味着一种不存在的良性行为。这是一种自我折磨。但我认为软件工程师往往是强迫症型的思想家、完美主义者。我认为他们之所以被这个职业所吸引是因为,如果你从正式的角度来看它,你会从一系列要求开始。如果你曾经在军队服役,那是非常正式的,每一个要求都是简单的陈述;“软件应该做X,软件应该做Y。”你有完整的需求列表。你已经写好了软件,你运行测试并回答,“这个软件执行X吗?是。这个软件执行Y吗?是。”当你对所有的问题回答“是”时,那就是完美。那是对完美的衡量。我想这就是为什么像我这样的人会被这个职业所吸引。因为你可以确定什么是完美,然后你可以实现它。即使你在脑子里这样做,像许多优秀的软件工程师做的那样,他们仍然有一个需求列表。他们知道自己的目标是什么。如果他们是诚实的,他们知道他们什么时候能真正做到。他们仍然可以达到完美。我的第一个希望是工程师们明白他们在做什么。如果他们从这个角度理解对方,他们可能会更好地合作。与此相关的是,我见过两种软件工程师。像我这样的深度优先搜索。其特点是……我使用emacs编辑器。我只知道几个emacs命令。但是它是一个丰富、跨越的集合,所以我可以通过生成我知道的命令序列来做任何我想做的事情。当然,emacs是一个非常广泛的系统。实际上有一个命令可以做你想做的任何事情。或者你可以自己写命令来做。另一种工程师是广度优先工程师。他知道所有的命令。如果你不使用实际执行你想执行的命令的话,他会很生气。"你为什么要分三步而不是一步来做这件事?"现实有这两种不同类型的工程师,一种像我这样懒得学习如何做正确的系统管理。还有一些人知道如何做其他事情,知道所有命令的广度优先搜索工程师。这并不是说一种类型比另一种更好。在某些情况下,一种类型比另一种更好,但我想我要说的是他们是互补的。对像我这样的人来说,花时间去学习所有你认为我真的应该知道的东西会适得其反,因为那时我并没有做我真正擅长的事情。这是我希望人们能理解的另一件事;你不需要知道所有有效的工具。

Paul:您在Qt期间最难忘的事件是什么?

Martin:我认为最难忘的是我们在诺基亚时期的负面事件。当时我们在做一款便宜的智能手机。我不知道那款智能手机是否会成功,我个人觉得不错。我们在进步,就快完成了。我去了意大利度假。我很开心,因为我终于要去度假了,而且觉得一切都很顺利,还在考虑买套公寓。然后我接到主管的电话,他说,“别买!不要买公寓,什么都不要做,我们的项目已经被取消了。”那差不多是诺基亚的终结,也是Trolltech的终结。我们认为。那真是一段可怕的时光。当然,我们熬过来了,现在我们做得很好。我们绕了一圈。我希望公司再叫回Trolltech,而不是Qt公司,但我理解他们为什么没有。这是我最重要的记忆。

Paul:你解决得最令人满意的问题是哪一个,为什么?

Martin:我想告诉你一件令人惊讶的事情。这是我做的最后一件事,还没有集成到系统中,这是QDoc的注释文件。因为添加注释文件处理几乎使QDoc的速度提高了一倍。对此我有两种强烈的感受。首先,它运行得很好,但另一方面,我想“为什么我以前没有想到这一点?”如果早点想到,它本可以改善更多的东西。这是因为DocBook文件可以完成同样的事情,而且我认为应该这样做。如果DocBook生成器可以将整个模块输出为一个DocBook文件,那么实际上就是将索引文件和注释文件合并为一个文件。也许没有理由既要有DocBook文件,又要有索引文件。只需生成DocBook文件,然后将它们用作索引文件或依赖模块,以及为其生成输出的注释文件。缺少的是读取DocBook文件的东西。我们现在有了读取索引文件的东西,但是它将会是读取DocBook文本,而不是我们自己的XML。

Paul:你最自豪的成就是什么?不一定与工作或任何事情相关。

Martin:就是发布文档,知道全世界成千上万的人都在使用它,感觉非常好。实际上,我从未从开发软件项目中获得过这种感觉。要知道,我研究的东西很有趣,但是它们没有像Qt那样成为全球现象。人们使用Qt的方式是通过文档,他们必须使用我的东西。

Paul:你认为你退休后最想念的会是什么?

Martin:每天和大家一起,每天和团队一起工作。我最近得知我是阿斯伯格综合征患者,高功能、没有涉及人际关系间的感情。我不会感到孤独。如果我是荒岛上的汤姆·汉克斯,除了能和一个有一张脸的排球说话什么都没有,那是孤独。或者如果我是被留在火星上的马特·达蒙,那是孤独。那不是缺乏人际关系的孤独,那是缺少人群的孤独。我会有这种孤独感。但是我从来没有感觉到我心中有一片空白,必须由一个生活伴侣来填补。我没有那种感觉,我不会为了这个感到孤独。我最近明白的一件事是,我不会嫉妒。如果我和一个女人谈恋爱,她说,“嗯,我还在和另一个男人约会……”太好了!这减轻了我的压力。我是说真的,我不会嫉妒。同样,我对感受不到浪漫的爱情。我能感受到爱,但这是对人类、对孩子、对狗的爱,你知道,宽泛的爱,不是浪漫的爱情。我忘了为什么我开始谈论阿斯伯格综合征。你刚才问我什么问题来着?

Paul:刚才的问题是你会最想念什么。

Martin:哦,是的。与此有关。就像我说的,我一生都是一个人生活,因为我不会感到孤独,而且我没有任何动力去找一个人和我在一起。但是我确实需要人群。我需要和人们呆在一起。所以,日常的办公室谈话、一起工作和与人相处将被取代。我是否和他们交谈并不重要,重要的是和其他人有联系。我不认为这很难,因为很明显,我住在一栋公寓楼里,所以那里有人。你知道,这和一起工作不一样。因为我的膝盖,我也不得不放弃有氧运动。那是另一个我和人们在一起的地方,和其他人一起做事。所以这些就是我会想念的。我仍可以骑自行车,我仍然可以上单车课,但是我不能再进行高强度运动了。这很令人沮丧,因为我仍然有能力去做,只是我的膝盖说,“请停下来!”所以,我也在做调整。我想我会没事的,但那是我会想念这些。

Paul:你最期待的是什么?

Martin:我期待着完成这部小说,不管成功与否,这不是测试。因为,作为一个强迫症型的思考者,这是圣杯。是创造我喜欢的东西,这对我来说是件有趣的事。几十年来,我试图像一个标准的小说家那样写作。也就是说,一点点从提纲开始,然后开始写文稿。我做不到。每当我写下一个句子,我的身体就会刚到一种痛苦。让我毫无招架之力。它说,“这绝对是狗屎。你写的绝对是狗屎。”我看着那句话并客观地觉得它没那么糟糕,这并不重要。这么多年来,我不明白这是什么意思。我试图忽略这种感觉,继续写下一句。但是我又会有同样的感觉。第三句,我有同样的感觉,它们不断累加。最终变得无法忍受,我不得不放弃。但是我发现,这整个过程花了这么长时间是因为我在尝试这样做的时候,对自己了解了很多。因为我真的在努力做事,显然,一个强迫症型的思考者是做不到的。因为这不像开发软件,你有一个需求列表,这是一个融合的解决方案。也就是说,你开发软件,它要么匹配需求,要么不匹配。这要么是解决方案,要么不是解决方案。但是一部小说没有需求清单……你也许可以编造一个,但它是艺术创作。写小说有无数种方法,不是一种方法。所以,我在尝试做一件对完美主义者来说有点不可能的事情。就是这种可悲的感觉在告诉我有些不对劲。我开始回顾自己一生的经历。我小时候的一件事和后来我住在澳大利亚时的一件事都很能说明问题。第一个是我12岁的时候,大概是约翰·肯尼迪被暗杀的那一年。在那之前的几个月,那时还是夏天。我独自走到海滩边,那里有一个高高的码头。我坐在码头上吃着冰淇淋,穿着一双人字拖。99美分那种的人字拖。我踢着自己的脚,然后一只人字拖掉进了水里。“哦,不,我有麻烦了”。我跑到岸边,赤着一只脚、穿着一只人字拖。海滩边到处都是岩石和海水,我很快把脚拉破了。与此同时,潮水正在退去,我沿着海滩走了一英里路。最后,我的脚流血了,我放弃了,走回了家。我一进门,妈妈就看到了我的脚,问我:“发生了什么事?!”我说,“我的鞋掉了”。她说她很讨厌我。这是一种情感层次的,最高的痛苦,这是她对我的感觉。当然,我不知道她的反应不正常。我当时不懂这个,直到很多年后,我才明白这一点。几个月后,约翰·肯尼迪被暗杀了。她的情绪反应也是一样的强烈。但当然,那是一个真实的悲剧事件。但你不会为了你的儿子丢了一个50美分的拖鞋有强烈的情绪反应。我当时不知道,也没比较这两件事。

之后,我住在澳大利亚一间廉价公寓里,靠近英式酒吧。永远不要住在酒吧附近。尽管这是阿德莱德北部一家不错的酒吧,你可以在那里吃到袋鼠肉。每天早上我都会起床洗澡。公寓里有一个单把手淋浴装置,向右掰是热手,向左掰是冷水,转动把手可以调节温度。但是它是塑料的,很便宜的那种,阀门不起作用。水要么滚烫,要么冰冷。我每天早上要花五分钟在淋浴间调整温度,试图找到找到合适的温度,但根本没用。不是滚烫就是冰冷。最终我放弃了,每天早上,我会先调到冷水,走到花洒下,然后调热水,在几秒钟后它烫得让人无法忍受时走出来,把它再次变冷……最终,我会洗个澡,中间没有温水。要么冷水,要么热水。
几年后,当我看到我写东西的时候,我明白了一点,事情就是这样的。我就像那个把手。要么完全是垃圾,要么完美无缺。没有足够好的,也没有一般般,没有细小差别。这就是我思考创造性事物的方式。要么很棒,要么是垃圾。我看到的就像那个淋浴阀门。情绪的强烈程度就像我母亲的反应一样。这里有些遗传的东西。我有和她一样的情感反应基因。就像淋浴阀一样,没有中间过渡,也没法调整。我没法对我的作品做出客观的判断,因为我的大脑让我感觉到这种痛苦,就会抹除一切。当你感觉非常糟糕的时候,你无法思考。于是我想,“这一定有什么意义。我不傻,我是一个受过良好教育的人,而且我的英语写作很好,到底发生了什么事?”于是,我开始写东西,在它们让我感觉不好的时候看着它们,“为什么我对此感觉不好?”我发现这总是因为我写的东西有问题。

Paul:怎么有问题?

Martin:任何事都可能有问题。可能是少了一个逗号,可能是拼错一个单词,也可能是一个问题严重的故事结构情节。无论是我丢失了50美分的拖鞋,还是约翰·肯尼迪被暗杀都不是关键;无论这是个可以立即纠正的小问题,还是一个意味着我必须修改故事情节或是重写故事的严重问题,我的感受都一样。这是关键。现在我可以用这种痛苦的感受来判断自己的方向是否正确。所以,我开始在大纲上取得进展。我会写一些东西,如果我觉得很糟糕(我几乎一直这么觉得),我可以看着它,找到问题,一旦我解决了问题,那种不好的感觉就会消失、取得进步。我开始意识到如果我写了一些东西,我感觉很糟糕, “如果你这么写,那么你之前写的就不对了。它们说不通,必须有所改变。或者,如果你写这么写,那么你打算在后面写的东西就行不通了。”我开始积极地面对它。当然,这仍然需要很长时间,因为我必须找出问题所在,然后决定如何解决。普通小说家不会有这种感觉。他只会写作,他可能会创作一部蹩脚的小说,但他会创作一部小说。然后他会开始写下一部小说,并在下一次提高写作水平。所以,对他们来说这是一个迭代的过程。但这不是我写小说的方式,我没办法这么写。我不能写一本糟糕的小说。我不是说我有什么了不起,或是我写的小说一定很棒。但这将是一部我喜欢的小说。事实证明,这是我唯一能做的事。写下来,让我的大脑说,“太好了!”希望其他人会喜欢,而且我觉得他们会的。

Paul:你能分享一些剧情介绍吗?关于这个故事,或者一些角色……目前,我们只知道你已经花了25年来写这本书的大纲。它是本科幻小说。

Martin:我说科幻小说是因为它不属于任何其他类别。它基于…
[·Martin在接下来的10分钟左右时间里描述他精心设计的故事情节。我被迷住了。]

Paul:我觉得你是对的,其他人会喜欢读它。至少我很感兴趣。

Martin:希望如此。顺便说一句,不要把这部分放在文章里,把现在公开还为时过早。我有一种感觉,如果别人知道我在做什么,我就会失去做这件事的动力。

Paul:还有别的吗?你一直参与表演,当过几次临时演员。你打算从事表演吗?

Martin:我想啊。只要有,我就会去申请。脸书上有我参演的几个广告。任何看起来有趣的东西,我都会申请。但是大部分都是给年轻人的,所以我没有太多机会。我去了电影《信条(TENET)》,这可能会是一部大片。你可以看电影预告,它看起来相当不错。由诺兰导演,里面有James Patterson和John David Washington,拍摄一直在秘密进行。我以为这是部007式的电影,结果不是。它看起来会比007电影更好。Kenneth Branagh和Michael Cain也出演了;我没有看到他们,但我看到了Patterson和Washington。他们在奥斯陆拍摄了一个场景,也许不止一个,我在奥斯陆Tjuvholmen的一场戏里跑了龙套。我坐在咖啡馆外面的一张桌子旁,假装在和某人说话,没什么大不了的。他们付钱让我坐在餐桌旁。问题是你不能真的说话,你必须假装你在说话。如果你说了什么,有人说,“你能小声点吗?不要发出任何声音,麦克风会收进去”。参与其中很有趣,因为这是一个秘密进行的大制作。后来发现有一个狗仔在拍照,第二天就出现在报纸上。保密变得毫无意义。尽管这是部大制作,但并不有趣。因为除了坐在桌子旁,我什么也没做。还有部挪威维京系列的喜剧片,英文名叫“The Norsemen(北欧人)”,挪威名是“Vikingane(维京人)”,用挪威语和英语拍摄。我在里面演个修道士。维京人入侵了英格兰的一个修道院,因为没有足够的修道士临时演员,他们杀了我两次。因此我必须有点表演!我在逃跑中,一个家伙向我胸口捅了一剑,把脚放在我身上,然后拔出他的剑,我就死了。导演过来指导我该怎么演。很有趣。我没有一句台词,但我得有表演。这是一个挑战。我想二月份,这部片子会在网飞上推出。那时我脚还骨折了,我应该穿上靴子,当然,我不应该跑。但是我脱了靴子,他们在我日常的鞋子外套上了一只皮鞋。所以,我一整天都在跌跌撞撞地走路。实际上,我们必须在鹅卵石路上奔跑,逃离维京人。我那时脚骨折了,而且得在不平坦的路面上跑,真的……但是我根本没有注意到疼痛!直到一天结束,该回家的时候,他们说,"谢谢你的演出,你做得真好!"然后我和其他修道士群演一起走回办公室,我说,“我不敢相信我的脚断了”。那时我几乎走不动了。他们都说,“是的,我们也有点惊讶!”我本来还要去另一个场景,那场是往山上跑。在阿克斯胡斯城堡下,我们要跑上坡,再次逃离维京人。我很兴奋能参与其中,一个选角导演走过来对我说,“也许你不该这样做……”我说,“不!我能做到!我准备好了!”她一直和我说话,最后我说,“是的,你是对的……我不可能跑上这座山。”这是一座非常陡峭的小山,又是鹅卵石路。我不可能完成演出。我认为那是最好的一次表演经历。

我还参演了Ylvis兄弟的《Stories from Norway(挪威的故事)》。那次经历也很不错,因为我又扮演了一个苏格兰场侦探……我们有几个人,有点像合唱团。所以,大概有十几条镜头。Ylvis扮演《the Man of a Thousand Faces(千面人)》中的侦探查理。他要查找被盗的蒙克画作。在每一个场景中,他都穿着不同的伪装服。这是件有趣的事。有一次,我坐在桌旁工作,他穿着一身绿色套装,露着脸。在镜头里,你只能看到他的脸在我身后偷偷摸摸。然后他说“嘘!”我被吓了一跳。那很有趣,因为我们必须唱歌。即使他们使用预先录制的合唱,我们实际上还是要大声唱出来,这样我们才能完美地对上口型。他们播放音乐,我们也跟着唱歌。我本以为唱歌会让我很尴尬,但其实很容易。当然,你必须记熟台词,不能犯任何错误。好像最后编辑的时候用了十几条镜头。非常有意思。

之后,我参演了电视剧《占领区(Occupied)》,但我只是一个小人物……我和一个女人经过一条走道,总理从另一面走来,我们擦肩而过。这次也没什么大不了但很有趣,我学到了东西。我应该在第二个镜头里,当总理经过的时候我走到走道上。我们拍了一遍,紧接着另一个群演员告诉我,他无意中听到导演说“停”后发生的事情。那个男主角总理是个著名的演员,他向导演抱怨我。他说,“那家伙让我讨厌,把他赶走”。一开始我很受伤,因为你知道,我做了什么?我完全按照他们告诉我的做了。但这就是问题所在!他们所做的只是告诉我“只要走过走道,跟和你一起走的人说话,而总理从另一边过来”。但现实生活中,你不会这么做。如果你走路时遇到总理,你会注意到他,并向他致意。但是我没有那样做!事情就是这样,我没有正常的反应。我应该帮助他发挥他的角色。所以,我明白了,这是一件重要的事情。这不是他的傲慢或其他什么,这才是正确的表演。我应该说“哦,您好吗?”或者什么都不说,但我会向他致意。所以,你可以学到一些东西。如果你没有真正尝试去做,你不会注意到这些事情。这就是我想做的,这就是演戏。但我不会去表演学校或类似的地方。我只是想找那样的工作,那会教会我一些东西。这个剧的工作人员,没有一个是挪威人;他们是西班牙人、波兰人……你可以和很多人交谈。他们非常包容,喜欢和你交流。

另一个大制作是《好运之地(Lykkeland)》。他们一直说要拍第二季,但一直没拍。我在男主角50岁生日聚会上扮演了一个客人,男主角是这个家庭的父亲。我又得做些表演,因为两个年轻人打架了,我必须做出反应。在午餐时,我也不知道自己为什么这样做,我站起来说,“我想演这个场景”。我用了《铁窗喋血 (Cool Hand Luke)》的一个场景,老板说,“我们这样无法沟通”。我演完了整段后,大家都在鼓掌,我觉得效果真的不错。下午休息的时间,扮演主角妻子的女演员问我,"你刚才演的是什么?"我说,“铁窗喋血啊?”她说,“不,我不……”“六十年代最著名的美国电影之一?”“不知道,我从未看过。”我看看其他人,他们问,“那是什么?”我很尴尬,我以为大家都知道我在演什么,但没人知道我在演什么,他们没看过那部片子。于是我向他们解释,后来我们开始模仿不同电影中的不同场景,每个人都参与其中,很有趣。你根本无法预测这些事会发生。现在,我没申请任何角色。我想他们今年这个时候不会拍很多片子。

Paul:听得出你对电影有些兴趣。你知道《Inside the Actors Studio》这个访谈节目吗?看过James Lipton的采访片段吗?

Martin:哦,我没找到播放频道,应该能找到,但是我看了几个采访。我通常会看我感兴趣的人物,比如朱迪·福斯特,或类似的人。

Paul:他通常会以十个快问快答来结束采访。

Martin:所以你要做这个?

Paul:是的。

Martin:好吧。

Paul:你最喜欢的单词是什么?

Martin:最喜欢的词……嗯……我想到了“饼干”。

Paul:你最不喜欢的单词是什么?

Martin:没有。

Paul:什么能让你兴奋?创造性,精神上,或是情感上。

Martin:女人。

Paul:什么让你不开心?

Martin:特朗普。

Paul:你最喜欢的诅咒词是什么?

Martin:Shit

Paul:你喜欢哪种声音或噪音?

Martin:鲍勃·迪伦的歌。Like a Rolling Stone,或Desolation Row。这两首歌我都会唱,我经常在一个人的时候唱。但我发誓,尤其是Desolation Row,我唱得和鲍勃·迪伦非常像。但我必须听到音乐旋律,必须用耳机。如果听得到自己的声音,我就唱不了。

Paul:你讨厌哪种声音或噪音?

Martin:有几个。在本该安静的时候,打电话的声音,走路时高跟鞋敲击地面的声音,行李箱在地上拖拽的声音。您在美国游客身上最常看到,身材健壮,又长又大的手柄拖着一个小行李箱!他们本可把它拎在手上,但是他们就是要在水泥路上拖行,发出令人讨厌的声音。还有一个,但我不记得是什么了。我最讨厌那三个。

Paul:除了目前这个,你还想尝试什么职业?

Martin:写作。

Paul:你不喜欢哪个职业?

Martin:管理者。

Paul:最后一个问题。如果天堂存在,当你走到天国之门时,你希望听到上帝说什么?

Martin:“你下辈子想做什么?”

相关推荐