《程序员的7个创新秘诀》(The Creative Programmer)译者序

创造力早已是重要的科学课题。它不是巫术,也不是成功学,更加不是少数人才能拥有的天赋才能。几十年以来的研究表明,创造力可以通过后天努力获得,同时也与时间、空间及人的因素紧密相关。

每天通过写代码改变世界的程序员群体是最需要创造力的群体。可惜的是,过去许多年以来,教育界和产业界都致力于培养程序员的编程技能(包括工程技能)。对软技能的重视虽然已有体现,但将“创造力”作为独立话题和各种软硬技能的汇总点来讲述,还不多见。在这样的背景下,《程序员的7个创新秘诀》就尤其显得难能可贵。

这本书基于作者及其团队的研究成果,围绕创造力七大主题(技术知识、制约条件、批判性思维、好奇心、创造性心境、沟通和创新技巧)展开阐述,点出有效获得和发展创造力的关键路径与方法。由于作者的研究对象是程序员群体,本书的主题不可避免地归结到程序员身上。然而,这七大主题可以说几乎放之四海而皆准,不独对程序员有效。原书标题The Creative Programmer可以说稍微有点谦虚了。

作者曾从事软件开发十一年,出于探究程序员创造力的目的,重返学术界,开展科学研究和教学工作。他还是专业面包师,甚至出版过面包烘焙方面著作。可以说,他完全贯彻了本书中提到的“多面手”原则。正因为其兴趣广泛、经历丰富,本书也显得与坊间其他类似主题图书不太一样。最突出的特点是,这本书用生动案例佐证论点,同时也借助扎实的文献资料引用避免了类比式思维谬误。可以说,底子是科学研究成果,面子是具象的案例呈现,而文学性色彩极强的遣词造句又给它点缀了引人注目的饰品。

作为这本书中文版当然的第一位读者,我也从中受益良多。或者说,我在阅读和翻译过程中,遇到许多能印证自己工作中“做对了的”那些事的确“做对了”的理论依据,当然有相当部分内容也印证了我做错的部分。过去二十五年中,我做过大学外语教育、导游、翻译、写作、编程、图书和杂志编辑、社区运营、企业经营管理等工作,从青年到中年,一直“斜杠”,呼应本书第6章中的相关内容。多种方面的兴趣和经历,令我能够在较为轻松地走出舒适圈的同时,充分利用跨领域知识积累,积淀出自己的一套“系统”(第2章)和世界观。

具体到技术图书翻译,语言方面背景无疑是正确理解原文的基础要求,多年从业经验和IT专业知识也让我能够避免犯一些望文生义的低级错误。这正是本书第2章讨论的内容:技术知识。我愿意将这个概念延展到“与从事工作有关的专业知识”。

翻译,如果不够格被称为“创新”的话,起码也是一种创造。创新也好创造也好,不可避免地会遭遇一些制约条件(第4章)。中文和英文词汇、语法各异,和文化差异一起,构成了绕不开的固有约束。假使有人认为这给翻译者的舞步戴上了脚镣,我想再加上一条锁链:在译文中,完整传递原文信息的同时,追求更中文化的表达方式,使之更符合中文习惯。例如,用多个短句拆解原文从句结构,使用恰当的量词等等(这一点常常被很多译者忽略)。正如书中提到的那样,这种自我设限意味着不得不创新,从而得到更多创造力。

现今的译者们有许多计算机辅助翻译工具可用。我自己就常常使用DeepL、百度翻译、腾讯翻译,以及AI工具Claude 2和ChatGPT。在使用这些工具时,尤其需要具有批判性思维(第5章)。例如这句:

原文:I did not perform less well due to time pressure.

腾讯翻译:我并没有因为时间压力而表现得不好。

DeepL:由于时间紧迫,我的表现并不理想。

Claude 2: 我并不是因为时间压力表现不佳。

显然,只有Claude 2 “理解”对了原文意思。但三者都不算正确、准确和合理的中文表达。经过考察和评判翻译工具给出的结果,最终译文是:我未曾因为时间紧迫而表现不佳。

第7章谈到的“中断”问题,在我的翻译工作中体现得极为明显。翻译这本书时,我使用两个屏幕,左边屏幕放置原文,右边放置文本编辑软件。我尝试了三种工作流:1)边看原文,边人工翻译成中文;2)逐段用自动翻译工具输出译文,拷贝到编辑软件中,人工修订润色;3)分章将每一段都先自动输出译文,拷贝到编辑软件中原文段落下方,再从章首开始逐段修订润色。猜猜看,哪种工作流效率最高?

答案是第三种。第三种工作流能够最大限度排除中断(视线在两个屏幕间切换,以及输入自动翻译软件-拷贝和粘贴译文的机械化过程)。当我可以集中精力,视野范围集中在“原文-译文”两个紧密连接的段落时,深度工作状态就自然出现了。

传统意义上的“译者”实际已不复存在,但这并不意味着译文质量可以不做要求。自动翻译工具的最大作用是省去译文初稿输入,充其量只能算是对原文的大致理解,几乎等同于我在扫读原文时的思维过程,再加上粗略翻译。逐段对照原文处理译文,实际上等于精读原文+精修译文,而精修往往才是体现译者能力、风格和认真程度的环节。对我来说,“这位一定是集邮爱好者”与“这一定是位集邮爱好者”在语感上非常不同。如果读者有兴趣,不妨用自动翻译工具处理本书原文,看看输出结果与我的译文之间差别有多大。

第6章阐述了好奇心的重要性。对我来说,在繁忙工作之余挤出时间做一些翻译工作,几乎完全出于好奇心驱使。翻译一本书,就真正精读了一本书,也理解了这本书的全部内容。而且,书中提到的外部资料,也常常是我进一步拓展知识边界的索引。就这一点而言,我愿意继续为中文读者翻译和推荐好书,希望读者和我一样,从这些书中得到新知。

韩磊

2023年8月21日

《整洁代码的艺术》译者序

这是一本讲述常识的书。

如果你已经有多年职业经验,读到书中内容,不免会觉得都是老生常谈。然而,常识之所以需要被一遍又一遍地普及,正是由于人们总以为自己已经掌握了常识。殊不知我们常常混淆“掌握”与“知道”,拿知道当掌握,不免一遍又一遍地违背常识、吃够苦头。

这是一本讲述编程领域常识的书。自从有软件以来,技术专才们对它的研究和实践产出了各种方法论和流派。最近十来年,“整洁代码”成为其中一支主要思想派别,也成了软件界的主流常识。罗伯特·C·马丁(鲍勃大叔)的“整洁”系列著作被奉为圭臬,拿知道当掌握的戏码又一次上演。我们继续违背常识,写着并不整洁的代码,吃够苦头。

这是一本讲述在所有专业工作中如何保持高产出的书。随便翻翻,你会发现,书中的代码量少到不像一本技术书。这就对了。再仔细阅读,你会发现,总共9章正文里面,只有第4章、第5章和第7章与技术百分之百有关,其他章节要么仅一部分与技术有关,要么与技术毫无关系。作者跳出技术本身,从更社会学、心理学的角度谈技术人的成功要素,反而能对埋头于代码中的程序员们有别开生面的启发。例如第2章,用多个数据证明帕累托原则的现实意义,告诉读者将有限时间和精力持续聚焦于少数要务,获得更有效的上升成果。又如第6章,介绍心理学上的“心流”概念,看似与技术风马牛不相及,却是提升技术人员产出的“大杀器”。

本书作者既是经验丰富的开发人员,又是编程技术在线教育平台的创始人与运营者,对于提升编程能力和整体产出自有一套心法,总而言之曰“专注”。好玩的是,在“专注”主旨之下,书中有些观点与鲍勃大叔意见截然相左。例如“心流”,鲍勃大叔在《匠艺整洁之道:程序员的职业修养(Clean Craftsmanship: Disciplines, Standards, and Ethics)》中就明确反对过。我相信这种事必然因人而异、各有道理,不必评判孰对孰错。

在翻译过程中,我时时忍不住想给这本书改个名,因为它真的没花很多篇幅阐述“整洁代码”,更像是一本讲成功学的书。那么,什么名字更适合呢?有本经典经营管理类著作,名为《追求卓越(In Search of Excellence)》。虽然在深度和广度上,《整洁代码的艺术》都远远比不上《追求卓越》,但我愿意借后者给前者重新命名为《追求卓越:程序员生存之道》。

希望程序员读者们能从这本书里面学会你的职业生存与发展之道。

韩磊  2022年9月19日

Clean Craftsmanship译者序


2021年2月,老朋友张春雨(侠少)在微博上给我发私信,问我有没有兴趣翻译Robert C. Martin(Uncle Bob)的新书。我和侠少平时联系不多,但常常收到他安排寄来的赠书。赠书收得多了,总觉得欠着人情,该用什么方式还一还才好。

这个“什么方式”,也许是几顿酒饭、几杯咖啡,但绝对不是翻译一本书。算起来,截至2020年,我已经有十年没做图书翻译工作。去年翻了一本小书,眼睛和腰椎颈椎都有点不舒服。一定赔本但不一定赚吆喝的事,还是不干为好。

侠少对我了解甚深,他只说了一句话,就成功说服我接下任务。他说,“这是(Bob)大叔的封山作。第一本和最后一本,有始有终,一段佳话!”一下子就勾起我翻译《代码整洁之道(Clean Code)》的回忆。当时我在北京工作,个人能力提升和职业发展都遇到瓶颈,同时还需要考虑家庭常驻地问题。《代码整洁之道》不但带给我关于整洁代码的知识,还令我悟到许多做人做事的道理。对我来说,那是一本优秀技术书,更是一本关于价值观的好书。

《代码整洁之道》中文版面世十一年以来,数次修订和重印,成为很多程序员朋友接受和推崇的读本。期间,鲍勃大叔多本其他数本著作也陆续出了中文版。这些著作从程序员素养、架构设计、敏捷方法等方面入手,全面阐述“整洁”概念在软件开发过程中的重要意义与实践手段,建立了一套相对自足的理论和方法体系,大概能算是“整洁代码派”系列武功秘籍了吧。

鲍勃大叔提出,既然现代世界运行于软件之上,软件开发者就要承担起维护世界正常运行的重大责任。这意味着软件开发者必须掌握足够多的技能,遵守足够严格的纪律,追求足够高的职业操守标准,方能达到社会对我们的期望。作者提炼了前面多本著作的精髓,加以深究、凝练和升华,推出这本集大成的Clean系列封山之作。

回顾Clean系列图书的主题,可以很清楚地看到从“关注技术”到“关注人”的发展脉络。就像是老拳师写拳谱,第一本都是招式。过了一阵子,老拳师发现徒弟们拳招挺熟,内功没跟上,练拳不练功到老一场空,赶紧写一本讲内功的。又过了一阵子,老拳师发现徒弟们一上擂台就不懂如何审时度势制定攻击方案,又赶紧写一本讲架构的。如此这般过了十年,老拳师突然发现,拳谱传来传去,很多人练得似是而非,拳打歪了,心术也不见得很正。

如果你是这位老拳师,面对如此现状,会是什么心情?我想,大概也会像鲍勃大叔一般,既悲观又不甘吧。就我这两年参与审校或审阅的基本敏捷书来看,恐怕既悲观又不甘的不只是鲍勃大叔一个人。敏捷软件开发主流之后,同时也成了借以牟利和乱来的最佳幌子。当所有人都在谈敏捷,而吹捧与批评都没谈到点子上时,正本清源就成了当务之急。所以,最近两年面世的敏捷书,不约而同集中在一个主题:正本清源。

敏捷既是手段,也是目的。正如鲍勃大叔在本书中一再强调的,软件最根本的特点就是“柔软”。好软件不但具备能够与时俱进修改和扩展的灵活性,更加具备以较低成本修改和扩展的可能。软件本身如果敏捷,那么实现和修改软件的方式必须也必然够敏捷。

本书第一、第二部分,结合多个代码示例,展示了如何利用TDD敏捷地写出敏捷的软件,同时阐述了验收测试、协同编程等等其他敏捷手段的重要性与一般实施手段。不可避免地,作者还花费相当篇幅讨论软件设计方案问题。我很愿意重点阅读这部分。此外,一些具体的测试策略也颇具可读性。

第三部分看起来对程序员的日常工作没什么帮助,但这部分值得好好阅读和思考。作者提出的程序员十条承诺(或谓“誓言”)浅白易懂,却不易遵守。能谨守这些承诺的程序员,一定是我特别愿意共事的好伙伴。

中文版初稿翻译工作结束之后,我以为终于可以放松下颈椎和腰椎了。没想到,过了一段时间,侠少又发来一份英文修改稿,对初稿改动之处不在少数。还好有电子社的编辑帮我做了对照工作,将差异处一一列出。看着屏幕上的英文初稿、修改稿和修改了几遍的中文稿,我突然体会到鲍勃大叔讲解“质因数”示例时谈到的心情:对一桩事物的改进过程,就那么活生生地呈现在眼前。这个过程既痛苦又快乐。而且,如果没有其他限制,可以一遍又一遍继续做下去,永无止境。

可惜,就像软件有交付截止日,译稿也不能一直拖下去。我清楚地知道,译稿还有很多问题。稿子交出去了,这些问题留待读者们发现和批评。如果有机会出修订版,你们的批评和建议必会纳入,这也算是一种协同写作了吧。

韩磊 2021年10月28日

超哥请客

给超哥朋友圈发了条评论。他回复:聚吗?于是又到他店里蹭了一顿。

超哥其实比我小一岁。朋友之间叫着玩,我叫他超哥,他有时叫我韩老师,有时叫我磊叔,有时叫我磊哥。没有什么特别含义。

超哥前些年是一本杂志的骨干。传统媒体衰败,他也辞职出来,一头扎进餐饮业的苦海,从一家店到两家店和更多店,从席面菜到米粉,生意做得有声有色。就算去年今年有疫情影响,起码还能保本,已经算不错。

超哥的餐厅主打常德菜,特色食材都从他老家运来。每回叫我去吃饭,总要上一道砂锅甲鱼。甲鱼裙边软糯,充满胶原蛋白。好吃。可是我更爱那些“小”一些的菜式,例如季节限定的樟树港辣椒,只用特别少的油和一些盐煎透,下酒下饭都是一等一。前天试了一道肚条,又嫩又弹,椒麻口,吃得停不下嘴。

超哥的常德菜餐厅叫做“有米坊”,风格相对传统。米粉店叫做“小粉仙”,装修日式风格,天天顾客盈门。我只在有米坊吃过米粉。有空时,得去小粉仙尝尝。

菜是常德菜,酒是白酒和威士忌。我有事先离开。深夜打开吃饭的微信群,看见他们闹得正欢。有饭吃,永远是幸福的事。

《UNIX传奇》逸事

2020年5月份,人民邮电出版社的杨海玲老师找到我,问我有没有兴趣翻译一本题为 UNIX: A History and a Memoir的书。我已经十年没有做图书翻译,但了解到这本书作者是Brian W. Kernighan之后,确实有了翻译的冲动。

BWK是谁呢?他是UNIX早期核心开发组成员,和C语言发明人Dennis Ritchie写了经典的C Programming Language图书,是那个璀璨时代的亲历者。

这位老爷子要求几位候选译者发英文简历给他,由他决定谁承担中文版翻译工作。很幸运,我被挑中了。中文版于2021年初面世,总算完成一件有价值的事。BWK在中文版给读者的话及新书发布会视频贺词中都提到我的名字,这令我倍感自豪。

书中提到许多人和事。篇幅所限,并没有全面敞开写。我在翻译过程中查阅了一些资料,略说几件,作为这本书的花絮吧。

价值12000美元的米格战机之旅

书中写道:1992年十二月,肯和弗雷德·格兰姆帕到莫斯科驾驶一台米格29战机,比起他们平时开的塞斯纳飞机更上层楼。

这事发生在1992年十二月11~17日。他们通过Fly-with-us公司,每人交12000美元(不含往返路费),踏上莫斯科米格战机之旅。以每加仑牛奶价格计算,1992年12000美元购买力大概相当于现在的4-6万美元。在那一周里面,他们游览了景点,在L39教练机上学习,还分别体验了30分钟米格29战机。

肯回来后,专门写了一篇文章,记录这次难忘的旅行。文章链接是http://genius.cat-v.org/ken-thompson/mig,有兴趣的读者可以自行阅读。仅从写作的角度看,这篇文章也饶有趣味。尤其是关于在米格战机上体验的部分,军迷们应该都会很有兴趣。就说一点:俄军飞行员掌舵时,带他来了一次眼镜蛇机动。这可以算是任何飞行爱好者的高光时刻了。在文章末尾,肯评价这次旅行说:Was it worth it? Yes. Would I do it again? No. (这次旅行物有所值吗?是的。我会再来一次吗?不。)

神秘人M- L-先生

在写“Unix房间”的章节中,作者提到,“1127以外的Unix早期拥趸中,有一位非常杰出的理论物理学家。为逝者讳,姑且叫他做‘M- L-’ 好了。M- L-渴望使用Unix,他预见到物理学研究将大量使用计算机。他善良而大方,就是话多,能听得你耳朵起茧子。只要他一开口,就谁也就没有办法拦得住之后一个小时的独白。于是,有人在Unix房间的门上挖了一个小孔,这样我们就可以在进门前窥视一下,看看他是否在里面。这就是所谓的‘L-洞’。”

这位M- L-先生是何许人也呢?我查了一些资料,发现有可能是梅尔文·拉克斯(Melvin Lax)。拉克斯是纽约城市学院的杰出物理学教授,并于1983年当选为国家科学院院士。1962年至1964年,他担任贝尔实验室理论物理系主任。

拉克斯不但是杰出的理论物理学家,还是狂热的计算机技术爱好者。他推动美国物理学会接受使用Troff排版的论文,为以后TeX的普遍使用开拓了道路。《UNIX传奇》中也写了Troff(而且这本书的英文原版也是用Troff的后续版本Groff排版):

“为了驱动排版机,乔为Nroff写了个他称之为Troff的重要扩展。“T”代表排版机(typesetter),整个词念做tee-roff。Troff语言刁钻晦涩,只有很少人精通,但只要学会技巧、保持耐心,就能让它完成任何格式化任务。实际上,Troff是为特殊型号计算机设计的汇编语言,所以大多数人通过宏包来使用它。宏包封装了常用的格式化操作,如标题、章节标题、段落、编号列表等等。宏成了一种底层Troff命令之上的高级语言。”

拉克斯是UNIX专家。他在纽约城市大学装了UNIX系统。同事Michael Lubell问他,纽约城市大学的UNIX为什么比耶鲁大学的VMS要好时,拉克斯张口就讲了几个钟头,还找出一大堆书和笔记给Lubell,说:“花几天时间读读你就知道了。”Lubell后来说:“几天?对梅尔来说,也许是这样。对我来说,这是一年的工作。”

千面彼得

贝尔实验室计算研究中心气氛宽松,研究人员们像孩子一样调皮。《UNIX传奇》写道:

“1985年,彼得·温伯格晋升为1127主任。公司内刊《贝尔实验室新闻》为他拍摄了一张专业照片。千不该万不该,彼得错将这张肖像照留在了Unix房间。很快,他的尊容就在Unix房间遍地开花。”

“在AT&T揭晓公司新徽标后的几周内,汤姆·达夫(Tom Duff)弄了一个彼得徽标,从此成为我们中心的象征符号。”

这张脸随后被印到很多地方:楼梯拐角、水泥地面、光盘、杂志封面、电路板……

无论在东方还是西方,“上级”怎么说都有一些权威性。将上级的脸到处印,还真不是一般人干得出来的事。好玩的是,彼得对此也没有反对或者给谁穿小鞋。甚至还亲自出马做了脸部倒模,用来创建3D模型。

高潮发生在1985年9月16日夜间。贝尔实验室的一个水塔上出现了彼得脸。虽然很快被抹去,还是很多人看到和拍了照。

是谁干的已不可索解。事发后,Doug McIlroy收到一份报销申请,要求为水塔画的颜料支付费用。McIlroy继续往上传。Vic Vyssotsky以自己无权审批为由终止申请。这张单据的申请人落款是G R Emlin。然而,贝尔实验室却没有这号人物。

神秘人Grace R. Emlin

G R Emlin = Grace R. Emlin,一个虚拟人物。当年贝尔实验室开始要求员工佩戴身份胸牌,很多人对此非常反感,想出各种方式表达抗议。《UNIX传奇》中写道:

“有位同事(在此隐去姓名)用万能胶把胸牌粘在额头上,还有一位则把胸牌别在胸毛上,被要求出示时才露出来。

胸牌没有安全鉴证功能,只是在模板中填了张相片。因此,我们虚构了一位叫格蕾丝·R·艾姆林(Grace R Emlin)的人,她的系统登录名为gre ,还有自己的胸牌,并不时出现在官方名单和出版物上。”

Ficticious employee G.R. (Grace) Emlin. Grace makes numerous appearances throughout the history of UNIX at Bell Labs. Here she iis pictured with her genuine Bell Labs employee badge. These are curiosities from the research lab where the UNIX operating system was created at Bell Labs in Murray Hill, New Jersey.

Grace Emlin形象来自gremlin,一种小魔怪。从名字拼写上也可以看得出来其来源。关于gremlin的传说肇始于航空时代开始没多久。那时,飞机的制造还处于很粗糙的阶段,常常发生故障。人们半开玩笑地编造出gremin,说这种小魔怪生活在飞机中,喜欢破坏飞机部件。就像当程序发生故障时,程序员就会说“都是宇宙射线的错”一样。

1984年,华纳公司出品了电影Gremlins。我怀疑这部电影启发了1127某位仁兄,才搞出Emlin来。

Grace Emlin在1127有自己的信箱。有人还真用她的胸牌进过办公楼。在Brian Kernighan的著作中,不止一次向她致谢。《UNIX传奇》里面也致谢了。Gerald Holzman还把Grace Emlin加到了1127中心同事录(https://www.spinroot.com/gerard/1127_alumni.html)。在这份列表中,Emlin的状态是“已移居。证人保护计划。”很扯又符合1127中心一贯风格。

2020年上画的电影Shadow in the Cloud(《云中阴影》)中也出现了gremlin,形象狰狞、凶狠。在影片最后,女主角徒手干掉了一只gremlin,折射出女权主题。

捉弄诺贝尔奖得主

《UNIX传奇》中写道:

“罗伯·派克和丹尼斯·里奇带着十几个人,在专业魔术师潘恩(Penn)和特勒(Teller)的帮助下,戏弄了阿尔诺·彭齐亚斯。”

Dennis Ritchie写了一篇文章(http://www.bell-labs.com/usr/dmr/www/labscam.html)来记录。油管上可以看到当年Penn和Teller制作的视频(http://www.youtube.com/watch?v=if9YpJZacGI)。整个过程是这样的:

Rob Pike假装做了一套语音识别和人工智能系统,邀请Arno Penzias来观看演示。一番表演后,Penzias以为Rob Pike真的做出这套系统,虽然常常辨识错误(实际上就是Dennis RItchie在另一房间操作电脑),但好像勉强可用。Pike说电脑里有一段录像,系统能够从录像中自动截取片段,回答用户提问。其实根本没有录好的视频,当Penzias提问时,魔术师Penn和Teller就在隔壁房间回答,通过摄像机直播给Penzias看。Rob Pike让Penzias叫“录像”里的魔术师表演个节目,Penzias照办。两位魔术师穿过走廊,出现在Penzias面前,假装是从录像里走出来的。Penzias过了半个小时才搞明白,原来语音识别什么的纯属子虚乌有。

原视频长达8分钟,我将其剪为3分来钟的精简版,关键节点配上中文解释,供不便上油管或者听英语有困难的朋友观看。

在视频结尾的字幕上,Brian Kernighan的职务是“灯光师”。Ken Thompson、Dennis Ritchie和UNIX核心开发组成员们也是灯光师,他们创造的UNIX照亮了未来数十年计算机操作系统发展之路。我们这些IT从业者,也要像灯光师,努力照亮自己、照亮他人,用IT创造未来、改变世界。

《Unix传奇》中“消失”的链接

我2020年翻译了Brian W. Kernighan的Unix: A History and a Memoir一书,中文版书名是《Unix传奇:历史与回忆》。原版中有一些网页链接,根据我国公开出版物相关规范,中文版删掉了这些链接。

我把这些“消失”的链接整理如下,供读者参考:

P46 丹尼斯·里奇介绍肯·汤普森对电脑游戏的贡献的短文:www.bell-labs.com/usr/dmr/www/ken-games.html

P61 杰拉德维护的网站 spinroot.com/pjw

P70 贝尔实验室网站丹尼斯主页上他兄弟姐妹的谢词:www.bell-labs.com/usr/dmr/www


P131 2013年公布的摩根泰勒备忘录:www.cs.princeton.edu/~bwk/202


P193 杰拉德·霍兹曼维护的1127中心老同事在线名单:www.spinroot.com/gerard/1127_alumni.html

P207 “实验室欺诈”视频:www.youtube.com/watch?v=if9YpJZacGI

“资料”章节中的链接

贝尔实验室Unix历史短页:s3-us-west-2.amazonaws.com/belllabs-microsite-unixhistory


汤姆·范·弗莱克(Tom Van Vleck)的Multics历史信息库网站:multicians.org


道格·迈克罗伊的《科研版Unix读本》:genius.cat-v.org/doug-mcilroy

The Unix Heritage Society:www.tuhs.org

迈克尔·马霍尼的Unix口述历史:www.princeton.edu/ ̃hos/Mahoney/unixhistory


菲利斯·福克斯的口述史:history.siam.org/oralhisto- ries/fox.htm


布莱恩与丹尼斯的炉边谈话:www.youtube.com/watch?v=EY6q5dv_B-o

丹尼斯·里奇在(诺基亚)贝尔实验室的主页:www.bell-labs.com/usr/dmr/www


柯克·迈克库西克关于BSD的著述: www.oreilly.com/openbook/opensources/book/ kirkmck.html


伊安·达尔文和杰夫·柯里尔的文章:doc.cat-v.org/unix/unix-before-berkeley

布莱恩·克尼汉写给中文版读者的话


(本文是《Unix传奇:历史与回忆》一书作者布莱恩·克尼汉为中文版读者撰写的文章。本书将于近期出版面世。)


1969年,肯·汤普森和丹尼斯·里奇在贝尔实验室创造了Unix系统。五十年后,Unix系统在全世界被广泛应用,多数时候以Linux的形态呈现,在从极小到极大的无数种计算机上运行。无论运行于何种计算能力与架构上,Unix都提供了同样方便、富有表达力和极具生产力的环境,以及丰富的程序开发工具。Unix系统构造优雅,使这些工具很好地结合在一起。

Unix是怎么来的?贝尔实验室是怎样的机构?寥寥数位研究员组成的小团队是如何改变世界的?是什么让Unix成为可能,并推动它进化?

我试图在《Unix传奇:历史与回忆》中回答这些问题。本书不仅写到技术内容,还写了许多幕后故事,写了那些天才人物的个性,以及Unix诞生和发展的独特创造性环境。

韩磊翻译的中文版问世,我倍感欣慰。相信它能帮助中国的朋友和同行了解Unix的历史。衷心希望您能享受到阅读的乐趣。

布莱恩·克尼汉

《Unix传奇:历史与回忆(Unix: History and Memoir)》译者序

Unix的主要创造者肯·汤普森到贝尔实验室面试时,沿计算科学中心走廊漫步,两边办公室上的名牌写满了他听说过的人名。这就是我读这本书时的感受:书中提到的许多名字,早已如雷贯耳。在我心目中,他们全是大神级人物,高高在上,凡夫不可亲近。

全书译完,这些人从神坛走下来,就地现出极客真面目。无论做出什么非凡成果,原来,他们全是不折不扣的程序员。以我之见,程序员的追求就是让机器听话,让工作自动化,让人类生活更美好。昔年Unix核心团队乃至于贝尔实验室计算科学研究中心的一众精英,无疑都是秉承这个初衷,尽展所长,才做出如此辉煌的成就。

几十年过去,“让机器听话”部分演变为“让机器听得懂人话”。人工智能科技进步巨大,在一些领域,机器展现出可观的能力,替代了相当部分人工劳动。在翻译这本书的过程中,我大量使用了DeepL翻译工具。有时,DeepL给出的译文可以用“惊艳”来形容;就算是那些不够出色的译文,七成也能达意。这意味着,对于非文学类作品,自动化翻译工具已相当接近初译的要求水平。即便不能完全替代人类译者,自动化翻译工具在很近的未来也将成为人类译者的亲密伙伴。人类译者也许最终会变做审校者。

另外一方面,机器也在赋能与人。例如,我目前关注的AR(增强现实)领域,已有许多技术可以让人看得见原本看不见的东西。在某个项目中,警员佩戴AR智能眼镜巡逻,三个月内识别出近400个重点管控人员。在另一个项目中,无人机搭载违法识别和车牌自动识别技术,极大地提升了交警处置效率。机器与人共同进化,未来可期。

本书作者认为,宽松的环境、稳定的投入、专业人士是贝尔实验室成功的要素。我翻译的《梦断代码》恰好是这种看法的反例。没有期限、几乎无限量的资本、十几个精英程序员,只换得美梦破灭。世界已经变得不同。开放源代码、远程协作、增长黑客……开发模式与商业模式相互促进,“数据”变得与“代码”和“算法”一般重要甚至更重要。可以预见,计算与连接将遍及万物。生活会更好或更糟?我相信一定会更好。

我的老朋友陈硕认真阅读了译稿,提出许多修改意见。术语方面的意见我几乎照单全收,其中有一些错译或文字不准确是我疏忽,但大部分完全是因为我的知识储备不足使然。至于文本、语句方面的改进意见,我保留了大部分原译。盖此事关乎个人文字风格,见仁见智,留待读者批判吧。算来我与陈硕已有十几年没有见面,各自做着自以为能让世界更美好一点的事情,这大概算是程序员共有的一点小情怀吧。

韩磊 2020年9月

(本书中文版即将面世)

由“兆”想起的一些回忆

兴之所至,在微博上评论一篇关于“程序员节”的帖子。想起2003年台湾技术作家侯捷老师到珠海金山讲课,我去看他,一起在酒店喝咖啡。主要话题是请教他技术写作的技巧。谈到两岸技术名词的差异,他问我,为何大陆将mega bytes称之为“兆”。当时未能答出,回家查证后,给侯老师发了一封邮件阐述。侯老师在他的大陆纪行文章中记录了这件事。

于是想找找侯老师原文。孰料jjhou.com早已不再运营。幸而有web.archive.org这个神器,记录了web上的历史存档。赶紧抄下来放在这里,算是一个小小的纪念吧。

以下来自侯捷老师的原文:

(2003年10月27日)晚上 hanlei 從廣州來看我。我們在酒店一樓喝了很棒的咖啡。其間我隨興問起 「兆」是什麼單位?為什麼大陸稱 Mega(2 的 20 次方,一百萬略多)為「兆」?hanlei 後來給我發了一封郵件談此事。

以下是上文中提到的,我发的邮件原文:

侯老師﹐您好﹗

您提到”兆”這個單位﹐當時我一時迷糊﹐也沒想清楚。回來後仔細考慮了一下﹐換算方法是1MB(兆)=1024KB。也就是說﹐一個”兆”等於1024個”千”﹐即百萬。下面是一篇討論這個問題的文章﹐從文中可以看出﹐1.44Mb這樣的詞裡面的”兆”﹐是用了三法之中的”下法”﹐即以10遞進。在一個台灣網站(http://www.math.tku.edu.tw/mathhall/mathinfo/lwymath/numberBOT.htm)中﹐也提到”自然科學中的兆指百萬﹐例如﹕無線電頻率一兆週期就是每秒震動一百萬次”。在現實生活中有許多這樣的單位﹐如兆赫(MHz)等等。
致禮﹗

hanlei
2003-10-30

当时我正准备从广东外语外贸大学离职,前往北京,到CSDN任职,是职业生涯中一个重大的决定。之后的六年里,与许多台湾技术传播者有了工作交集。例如时任Borland大中华区CTO的李维,Office VBA编程专家郭安定,《Java夜未眠》作者蔡学镛,还有一位主攻架构设计的高焕堂。

2002-03年,李维在《程序员》杂志连载《Borland传奇》系列文章,颇受欢迎。电子工业出版社与CSDN合资的博文视点公司有意结集推出。我是这本书的技术编审,并且编纂了书末的《Borland大事记》。之后在北京,因为Borland与CSDN有业务往来,我也有幸多次参加或主持李维的讲座。后来宝兰公司每况愈下,我也离开CSDN,与李维先生多年未见了。

郭安定先生做过配音、DJ,嗓音浑厚、国语标准。有次我主持CSDN技术大会(大概是SD2China吧),经验丰富的郭先生说,主持人上场前,宜有一介绍,于是帮我旁白“有请主持人韩磊”。现场效果一流,至为感谢。

郭先生也曾带给过我难堪。好像是另一次大会上,Ivar Jacobson做演讲,观众互动环节,郭先生提了一个问题,Ivar Jacobson以英文作答。这个问题及其回答恰好是我没有太涉足的技术领域,翻译得乱七八糟,观众只能是连猜带蒙勉强明白。

说起郭安定,最好玩的是,他每次来北京,不住酒店住洗浴中心。定点在朝阳公园旁边的八号公馆温泉。那地方大概不是真温泉,好处是一张门票进去,24小时吃喝睡泡全包,只要148还是168,比住酒店划算。记得有次我和《程序员》杂志主编孟迎霞老师去找郭安定谈事,就是去八号公馆,郭老师出来接。我们在前台给了钱,各自换浴袍进去,先泡澡,再到公共大厅边聊。聊的什么话题我已淡忘,只记得一通泡、蒸,治好了我的感冒。

点滴记忆,随手写下。若有对当事人不敬,绝非本意。

又:上文提到的台湾网站链接,已变404,一并从web archive中复制如下:

附﹕參考文章
中國報導社出版的《世界語課本》第十二課”一兆是多少”中﹐明確地說一兆是 milion-oble miliono=biliono(一百萬個百萬﹐即10的12次方)。要數完這一兆﹐假如按每分鐘數200﹐每小時就是12000﹐每天288000﹐每年就是105120000(一億零五百一十二萬)﹐數完一兆﹐需九千五百多年﹗這需多少代人接力數數﹗這個一兆就是一萬個億。它是中國13億人口數的769倍多。但是﹐在我們平日工作中也常碰到”兆”。如無線電中就有表頻率的”兆赫芝”﹐表電阻的”兆歐”﹐壓力有”兆帕”﹐等等。然而現代科技所稱的這個”兆”絕不是”萬億”﹐而是”百萬”﹐亦即miliono,(即106。)它是萬億的的百萬分之一﹐換言之﹐兩個”兆”相差一百萬倍﹗假如按上述辦法數數﹐後一個兆則只要約三天半的時間即可數完! 

這究竟誰對呢﹖其實都是對的。這是怎麼回事﹖因為它們源自中國古代不同的計數體系。中國古代億以上的大數計數方法有三個體系﹕這是我國東漢時期的《數述記遺》書中所載。 

一是上法﹐為自乘系統: 萬萬為億﹐億億為兆﹐兆兆為京。這種系統﹐希臘的阿基米德也採用過﹔10^4=萬, 10^8=億,10^16=兆,10^32=京

二是中法﹐為萬進系統﹐皆以萬遞進﹕萬﹑億﹑兆﹑京﹑垓﹑秭﹑穰﹑溝(土旁) ﹑澗﹑正﹑載……(萬萬為億﹑萬億為兆﹑萬兆為京……) ﹔10^4=萬, 10^8=億,10^12=兆,10^16=京

三是下法﹐為十進系統﹐皆以十遞進﹕ 萬﹑億﹑兆﹑京﹑垓﹑秭……到了近代﹐直至解放前我國還流行十進的系統﹐即個﹑十﹑百﹑千﹑萬﹑億﹑兆﹑京﹑垓﹑秭﹑穰﹑溝(土旁)﹑澗﹑正﹑載﹑報﹐皆以十進﹐10萬為億﹐10億為兆﹐10兆為京……﹔10^4=萬, 10^5=億,10^6=兆,10^7=京

現代的科學技術上用的”兆”屬於第三法﹐就是 10^6﹐即百萬。如﹕兆周(MHz)﹑兆歐(MΩ)﹑兆瓦(Mw)……﹔而現代的”億”卻屬於第二種即中法(與第一法的”億”也相符)。13億等於13乘10的8次方而並非10的5次方。 

在一般情況下﹐為避免混淆﹐”兆”僅用于10^6﹐10^12則用”萬億”表達。再大的數字則用”百萬億”﹑”千萬億”﹑”億億”﹑”十億億”﹑”億億億”… 

最难料理是人心

南京一家小餐厅,原本做十几块一份的饭团生意,还算混得下去。后来突然号称改做高端日料,人均数百元,还对顾客有诸多要求。老板臭脾气,貌似是一切网红店的作派,非如此,不能显出傲娇品质。可惜这个店上了某视频节目后,被一种吃瓜不闲吐瓜子累的网友看出无数毛病,以相关部门勒令停业整顿收场。

也奇怪,民间很多反日的声音,坊间日料店却开得红火,其中又以居酒屋类的小店最能招客。广州的话,天河南一带及周边,许多日本人爱去的居酒屋。其中最旺者,预订不算,每晚还分两班。预订第一班的,只能吃到八点半,就得结账走人。至于出品嘛,只要开得足够久的店,总差不到哪里去。

一家家吃过来,国内吃到国外。最夸张的是跑去北海道积丹半岛,找到当地最有名的神社旁海胆店,吃上一客盖满海胆的海胆饭,被甜腥味撞得头晕脑胀,又杀去日本最古老的威士忌厂余市酿造所,喝上几杯才算舒坦了。吃来吃去,吃到自己都烦,于是有一阵只要芥末章鱼、炸牛蒡和腌鱼子来下酒。在家吃台湾乌鱼子,烤一烤,下金门高粱,绝配。居酒屋往往只有明太鱼子,也行。喷枪炙一下就上桌。咸得齁嗓子。拿啤酒冲淡那咸味,才品得出一股奇鲜。看着一小坨,却能下两大杯啤酒。

食材过关,原是一切食肆的及格线。再往上,才谈得到厨师手艺。就像带鱼,去近海地区,买到新鲜带鱼,一身银袍闪亮,清蒸是最适合的做法。内陆没有新鲜带鱼,只好油炸或者红烧,盖住鱼肉变质的味道。

水产通常是越鲜越好,除了咸鱼咸虾等等本来就要吃腌制的以外。广东有一种梅香咸鱼,我怀疑是“霉香”之误写或饰非,用马鲛鱼制成,不习惯的人会觉得奇臭无比。做咸鱼茄子煲,只需切出十数粒爆香,就足以令茄条脱胎换骨,起到点睛的作用。

有些食材,不但自身得过硬,还要厨师手段过硬。例如日式的筍丼(竹笋饭),传统做法是用笋片来焖,吃过一家杭州的馆子,大厨认为那样烹煮时间太长,笋味流失,于是改用当季笋丝。怕味寡米干,加鸡皮丝、鸡肉丝来做。饭熟,肉、皮已然化成油脂,令笋丝、饭粒裹上一层脂香。盛一碗带锅巴的,空口吃一半,另一半用土瓶风的汤泡着吃,一不小心就撑了。

还是这位大厨,和我们聊得开心,数次起身,为我们特制菜单上没有的菜式。最后一次,上了几片切薄、冷冻的鱿鱼肝脏刺身。菜单上没有它,因为“只做给懂的人吃”。放舌尖上,沁凉之余,一种甘甜渗透出来,跟着有香气贯注到鼻腔,赶紧喝杯清酒,究竟圆满。

问大厨,是不是在日本长时间待过。他说,并没有去过日本,倒是跟来中国的日本厨子学习过,又自学日语,从各类资料中汲取养分,力图做出令客人满意的餐食。他做的日料,或许不能算是最正统的日料,但以“厨师的自豪”和“职人的自觉”来判断,已将国内绝大多数日料店抛在身后。菜肴做得好与不好,确实在于有没有先料理好自己的心。