Uncle Bob 谈《We, Programmers》与 AI 时代的编程


Uncle Bob 谈《We, Programmers》与 AI 时代的编程

  • 来源:https://www.youtube.com/watch?v=C4vwBtpsbZk
  • 节目:Book Overflow 播客
  • 说话人(共 3 人):主持人 Carter Morgan、主持人 Nathan Toups、嘉宾 Uncle Bob(Robert C. Martin)
  • 说明:本文根据 YouTube 自动生成的英文字幕翻译。自动字幕不带说话人身份,Carter 与 Nathan 两位主持人的发言归属系根据上下文推断,个别地方可能有出入。主持人姓名和书名按节目官方信息校正;人名、产品名保留原文并酌情附中文译名。

开场片段

Uncle Bob: 这些模型是真正智能的。你没法说它们不智能——它们能沿着一条推理链走下去,对吧?所以智能是它们确实拥有的东西。它们也是有意识的。

节目开场

Carter: 大家好,欢迎收听 Book Overflow——一档由软件工程师主持、为软件工程师服务的播客。每周我们都会读一本世界上最优秀的技术书,以此精进我们的技艺。我是 Carter Morgan,坐在我身边的照例是我的搭档 Nathan Toups。Nathan,你好吗?

Nathan: 好得很,大家好!

Carter: 今天我们有一期特别节目,非常激动人心:Uncle Bob 又回到了我们的播客,这是他第三次做客。这次聊的是《We, Programmers》。这本书我们之前用了整整三期节目来讨论,非常精彩——讲的既是编程的历史,也有 Uncle Bob 对未来的许多思考,聊了很多 AI 的话题。我们刚刚录完对他的采访,大家马上就能听到,非常精彩。Nathan,要不要先给听众们剧透一下接下来会听到什么?

Nathan: 好啊。我很喜欢这种方式:以一本书为引子,然后海阔天空地聊开去。能听到作者本人对世界的看法是很难得的,尤其是在 AI 工具这样飞速变化的当下。Uncle Bob 一直非常公开地尝试各种新东西——在 Twitter 上你也能看到——而且一直是这场讨论中很敢发声的人。我很高兴我们就此问了他一大堆问题,听到了他对未来更细致入微的看法。我们的观点并不总是一致,但我非常尊重一个愿意把想法抛出来、也愿意倾听别人的人。

Carter: 在软件工程这个领域,Uncle Bob 真算得上是什么都见识过的人,亲历了计算机科学的一次又一次变革。我们就问了他这个问题:”你经历了互联网、经历了手机、经历了云计算,你还提到了个人电脑——那 AI 和这些浪潮相比,能排到什么位置?”他的回答非常精彩。对于这门学科正在如何变化、未来又会如何继续变化,他有太多想法。我从这次采访中学到了很多,希望你们也一样,所以一定要听到最后。接下来,有请 Uncle Bob,一起聊聊他的书《We, Programmers》,也聊聊编程这个行当的现状。

“Uncle Bob”这个名号的由来

Carter: Uncle Bob,你能回来真是太好了,再次感谢做客我们的节目。

Uncle Bob: 很高兴回来。

Nathan: 好,有个问题我必须问——我刚才还在琢磨这事——如果书里已经讲过就请见谅:你是怎么得到”Uncle Bob”这个名号的?为什么你不只是 Bob?(笑)

Uncle Bob: 我也不知道书里讲没讲清楚。这是个很老很老的故事了,得追溯到 1987 年左右。那时我在一家创业公司,那里有个家伙喜欢给每个人起外号,而我的外号就是 Uncle Bob。他是那种有点烦人的人,于是我整天在办公室里听见:”Uncle Bob,Uncle Bob,过来一下。Uncle Bob,我这儿有个问题。Uncle Bob,我们该怎么办?Uncle Bob、Uncle Bob……”就是这么回事。所以离开那家公司的时候,我还挺庆幸终于不用被叫 Uncle Bob 了。那时我开了一家咨询公司,在加州做些咨询。结果突然之间,我居然开始怀念有人喊 Uncle Bob 的日子。(笑)于是我犯了个错误——把它放进了我的邮件签名里。那会儿我在当时已有的那些社交网络上非常活跃,所以这个称呼一下子就传开了。又过了几年,我参加一个 C++ 大会,有人在过道对面大喊”Uncle Bob!”我心想:天哪,我这是造出了个什么怪物啊。但转念又一想:说不定这是个不错的品牌,那就留着吧。(笑)

Nathan: 然后一晃多年,你就成了今天的你。

有声书插曲与写书的初衷

Nathan: 我们都很喜欢这本书。其实是你先跟我们提起过你在写这本书——也不算推荐啦——我们一听就说:这必须得读啊!我们读过你的《Clean Coder》,所以觉得《We, Programmers》也非读不可。我听的是有声书,听到大概三分之一的时候还特意给你发了条短信,说我们有多喜欢。我还问过你:这配音是你本人,还是一个声音特别像你的人?(笑)

Uncle Bob: 绝对是我本人。

Nathan: 嗯,嗯,演绎得非常好,音频表现非常出色。我很早就喜欢上它了。不过我想起上大学时有门会计课,要看很多视频,全是由同一个人录的。当然,每个人都用 2.5 倍速之类的速度看。结果学期最后一天,那位老师本人来跟我们讲话,我们全都惊呆了——他现实中说话怎么那么慢!(笑)希望我可别再经历一次那种场面……我平时听书的速度大概是 1.8 倍速。好了,言归正传——

Uncle Bob: 问你们个事:有声书刚上线时有一章传错了,上传的是未经剪辑的原始录音,而不是剪好的版本。

Carter: 我最开始拿到的应该就是那个版本,后来也没回去重听。我当时听到了,心想:哦……要知道,有声书出这种状况其实出乎意料地常见——

Uncle Bob: 真的?

Carter: 常见到你会忍不住吐槽:”你就不能花个 80 美元买支像样的麦克风吗?”所以我当时心想:希望这本书别是那样。然后发现好像只是第一章还是第二章有问题。

Uncle Bob: 是第二章。

Carter: 对对,剩下的部分音质都非常棒。

Uncle Bob: 那事是有点恼人,因为剪辑的过程并不简单。

Carter: 是啊是啊。

Uncle Bob: 结果他们就没剪,把错的那个版本传上去了。

Nathan: 嗯。而且音频的高品质正配得上这本书的高品质。我觉得这本书的结构非常有意思——而且你能真切地感觉到,如果我说错了请纠正我:它像是一个倾注了热情的项目(passion project)——

Uncle Bob: 是的。

Nathan: ——能感觉到你对这些行业的开山鼻祖们怀有的那种热情:Charles Babbage、Ada Lovelace、Grace Hopper、Alan Turing……看着这些真的很过瘾。做这个播客让我渐渐学会欣赏一件事:看看今天的一切有着多么漫长的传承,看看我们站在多少位先驱的肩膀上才走到今天。我想问的是:你的职业生涯漫长而辉煌,如今如果不想写书,完全可以不写,可你还是写了。究竟是什么驱使你要写这本书?

Uncle Bob: 我主要想做两件事。第一,我想把这些先驱还原成”人”。如今他们像是神话里的生物,我们只敢压低声音、带着敬畏去谈论。第二,我想让当代程序员能在一个”懂技术”的层面上理解这些先驱当年面对的技术。市面上很多关于他们的历史读物都被稀释过了,为的是让外行也能看懂;而我希望这是一本写给技术人的书。所以我想去探究那些机器、那些指令集,以及他们日复一日埋头苦干的具体细节(笑)——为了做出在你我看来如今不过是一小时的活儿:两行代码,或者几条提示词。

Nathan: 是啊,放在今天就是这样。(笑)

什么样的人是程序员:红线的故事

Nathan: 嗯,这本书确实精彩。我想直接切入书里的一个东西——你开篇用了一个类比或者说故事,我觉得特别能说明”当软件工程师意味着什么”:假设你遇到一个人,他觉得只要自己能在屏幕上画一条红线,就能赚一百万美元。你大致是说:这人多半挺聪明,他能琢磨出怎么画那条红线。你举了个很好笑的例子:假设他朝屏幕打了个喷嚏,他会发现水滴里能看到屏幕其实是由红、绿、蓝的小点组成的;于是他会意识到:好,那我大概能让其中一些点只显示红色;然后大概能想出办法把它们串起来;再然后大概能琢磨出怎么让线稍微粗一点——什么斜率啊、纵坐标增量比横坐标增量啊之类的。但你说,这对话进行到第二轮,他就已经烦了——他才不想搞清楚这些,他想搞清楚的是怎么卖出更多的红线,那才是他擅长的事。你说,这就是程序员之所以是程序员(或者叫软件工程师,随你怎么叫)的原因:程序员是那些觉得这些细节非常有趣的人。你点破这一点的时候我觉得特别好笑,因为我听着听着,发现自己正兴致勃勃地想:”哦,对啊……我应该写个程序,真的在像素级别上去操作那些 RGB 值,多好玩啊!”结果你下一句就是:”当然啦,没人愿意干这个。”(笑)而且到了书的结尾部分,你谈到 AI 编程,还提前设想说:也许有一天我们甚至能用脑子里冒出来的想法直接给计算机下指令,但即便如此,仍然会需要有人来做这份工作。因为说到底,世界上永远有两种人:一种人在乎事物运作的细节,另一种人不在乎。不过 AI 的发展实在太快了,我在 Twitter 上一直关注你,你经常谈到搭建”软件工厂”(software factory)。我想跟你确认一下:你现在还这么认为吗——总有那么一个位置,是留给在乎细节的人,而这些人本质上仍会被称作”程序员”?你今天怎么看?

Uncle Bob: 我还这么相信吗?是的,比以往任何时候都更相信。

Nathan: 好,好。

Uncle Bob: 在我和 AI 智能体(agent)打交道的过程中,我可以把越来越多的事情交给它们:语法层面的操作、底层的编码,甚至一部分还挺有趣的问题求解。它们能做调研、能搞清 API 怎么用,能干所有那些过去我们不得不亲自做的苦活。但有一样东西它们做不到,而且我不知道它们将来能不能做到:把自己放进人的心境里。盯着屏幕看的不是它们,看完屏幕还要去杂货店买东西的也不是它们。它们无法设身处地进入一个人的内心。而这正是程序员存在的意义。程序员是细节的管理者——从来都是如此:把那些糟糕透顶的、细小的、对人来说至关重要而机器却毫无概念的细节,全部处理妥当。这就是我们的工作,也一直是我们的工作。只不过直到不久之前,我们还不得不拿着石刀、披着熊皮来干这件事。(笑)

一本书还是两本书

Nathan: 这本书读起来几乎像是两本合一。我想提这个,是因为我得说:我倒真希望它是两本书——我想在开头读到更多(先驱们的)故事;而且你的回忆录部分也完全可以独立成书。它从一开始就是按一本书构思的吗,还是……?我只是很好奇你当时的想法。

Uncle Bob: 是的,它一直都是一本书。目标就是把整部历史从非常早的起点——Babbage——一步一步向前推进,直到推进到某个时刻:我自己可以走进画面,开始以目击者的身份讲述。因为 70 年代、80 年代、90 年代、2000 年代的这些事情,有太多是我亲眼所见。然后在最末尾,作为附加的一章,我想:好吧,现在 Uncle Bob 要来告诉你们他认为未来会发生什么——这种事一向风险很大,不过管他呢,写就写了。

Nathan: 我佩服这一点。

年轻一代还需要亲手写代码吗

Carter: 我也佩服这种敢说”我认为事情会这样发展”的勇气,对吧?毕竟只有时间能给出答案。说件好玩的事:读完这本书之后,我跟一个朋友聊天,他是个重度 Rust 开发者,正在 Rust 之上实现自己的 Scheme——他自己的 Lisp——因为他发现这样干活效率很高。我当时就想:好啊 Uncle Bob,你说的那套正在真实地发生。我还在我们的 Discord 里提过这事,大家就说:”哦对,我们这个那个都该用 Lisp 来写。”我说:我还没被说服呢。其实我们今年晚些时候会读那本”巫师书”(指《SICP》,封面有巫师图案),说不定那本书能把我们彻底策反成 Lisp 程序员。

Carter: 嗯……读最后三分之一的时候我觉得特别有意思:你本人走进了画面,开始以亲历者身份讲述。这也是我经常思考的事。我现在带一些初级工程师,他们中的很多人一毕业就进入了一个”后 Claude、后 Codex”的世界。而我回想自己十年前刚入行的时候——我们什么都没有,每一行代码都是亲手敲出来的。所以看你经历这场演进很有意思——虽然相比之下没那么戏剧化,但我们确实在抽象栈上越爬越高。我不知道,我甚至有点羡慕……我们前不久刚读了 Dave Thomas 和 Andy Hunt 的《The Pragmatic Programmer》(《程序员修炼之道》),那是本好书。我羡慕你们这些”老前辈”——希望这个词不算冒犯,虽然可能确实挺贴切的(笑)——你们有三四十年时间,真正与亲手写代码这件事亲密无间。我自己也很珍惜我拥有过的那大概八年时光。你觉得我们是不是正在失去什么?你会不会担心:在进入”后 AI”世界的过程中,成长起来的新一代,再也没有机会与那一行行代码本身建立那种深层的亲密关系了?

Uncle Bob: 不,完全不会。我一点都不担心。这种模式在许多行业里都重复上演过很多次。

Carter: 也是。

Uncle Bob: 我们现在不需要有人在马车前面挥着旗子开道了,那样的日子一去不复返;我们也没有电梯操作员了。每个行业都会发生这种事。我不担心什么手艺失传、技艺失传。总会有那么几个人——比如我,还有其他一些人——出于怀旧,去打开一台 PDP-8,写几行汇编语言代码,就因为我们当年热爱它。但我完全不担心。未来要操心的事情多着呢(笑),没必要让后辈们背着这些老古董前行。他们不需要去学什么纸带。(笑)

Carter: 哈哈,是。

Uncle Bob: 不过在《We, Programmers》里,他们倒是应该读读这些。(笑)

Carter: 但这正是这本书了不起的地方。我前阵子听谁说的来着……天哪,我怎么想不起他的名字了,就是 PBS 那位著名的纪录片导演……我想说 Kent Beck——不对,不是 Kent Beck。我怎么连 Ken Burns 都想不起来了?Ken Burns,对对,就是他。

Nathan: Kent Beck,哈哈。(笑)

Carter: 是 Ken Burns。我最近在一个播客上听他说:做一个历史的学生之所以好,是因为它能让你更好地看清今天的世界。他有个朋友跟他感慨”现在是有史以来最糟的时候”,他就说:”大萧条的时候,人们把动物园里的动物都射杀了,把肉分给穷人。等我们也开始干这种事的时候,那才算真的最糟。”所以——

Carter: 读《We, Programmers》的意义就在于:今天行业里确实有很多动荡,但你回过头去读这段历史,就会说:”等等,这一幕以前上演过啊。”比如读到 Grace Hopper 那段——我记不清她当时在研发的是哪台计算机了——但那时就有人真的在担心:随着操作计算机变得越来越容易,我们需要的程序员会越来越少。

Uncle Bob: 对。

Carter: 完全没错。感觉每上一个台阶,都有人说:”完了,一旦我们爬上抽象栈的更高层,需要的人肯定会变少。”这话我跟人也讲了好多年了。也许这一次是真的?我不知道。但迄今为止,每一次我们抬高抽象层,结果都只是给我们带来了更多事情做。你自己年轻时有没有经历过那种恐惧?比如担心”完了……”——哦不对,你从来没有过。

Uncle Bob: 没有,从来没有。

Carter: 你比我们其他人聪明。

Uncle Bob: 这我可不敢说(笑)。我是跟计算机一起长大的,从 12 岁起就开始鼓捣它们,16 岁找到第一份工作,18 岁找到第一份真正编程的工作。有一点始终是无比清楚的:我们处在一个非常原始的时代,而一切都会变得更好。而且在那个年代,你能真切地感觉到摩尔定律在发力——你能感觉到它。每一年,一切都会变好;每一年都有更好的机器,而且不是好一点,是好很多;每一年都好很多。那些麻烦的玩意儿——比如打卡片——消失了。你早知道它们会消失,然后你亲眼看着它们消失,心想:”好啊,终于没了。”每一次都是这样。每一次你都能看清未来两年的路。所以我从未体验过那种恐惧。有些人体验过:比如有些人非常担心面向对象(OO),觉得 OO 会让编程变得太容易……(笑)结果恰恰相反。

Carter: 他们那会儿还说:”等’软件工厂’来了,你们就完了。”(笑)

Uncle Bob: 还有一阵子,大家对”第三代或第四代编程”恐慌得不行——也就是 Prolog 那套逻辑编程。”日本人正在搞这个,他们会把我们打得落花流水!”哦,结果这事也没发生。确实有过几次那样的时刻,但我本人从未有过那种感觉。我能看清事情会如何展开,而且我一直盼着它来。每一年都是:”快到了,再加把劲。好,现在奔下一个目标。”那是一段我看得清清楚楚的上楼梯的过程。

Carter: 我对 AI 也是这种感觉——

Uncle Bob: 但 AI 我完全没有预料到。(笑)

Carter: 它可把我惊掉了下巴。

Nathan: 我现在在做咨询工作,我得说,这感觉就像是饭碗的保障。我的意思是:混乱不清的思路,再叠加上大语言模型,产出的就是一团糟的实现。所以,带着清醒的头脑进场、知道哪里需要改,这件事变得无比值钱。我这份工作的内核根本没变,变的是外界的预期。我不是那种”末日论者”,我甚至觉得这一切挺激动人心的——尽管我确实不知道两年后我会用什么方式和计算机交互,我真的不知道。

Uncle Bob: 这个嘛,我觉得我们谁也不知道。

Nathan: 对吧?(笑)看来这回连你也被整懵了。

Uncle Bob: 是啊。

Nathan: 那你呢——

Nathan: 在你的职业生涯一路走来的过程中,你有没有感受到那种水涨船高的预期?我自己是这样体会的:人类对软件的需求似乎非常有弹性,我们永远想要质量更高、功能更强的软件。你当年有这种感觉吗?

Uncle Bob: 哦,绝对有,绝对有。我们都记得那个时刻——大概是 1988 年,我们有一台 SPARCstation(Sun 公司的工作站),一伙人围在旁边。Sun 公司做了个演示:屏幕上显示一个报纸版面——你知道报纸版面里是有图片的吧——你点击那张图片,图片就会动起来,还会出声。不过效果很烂(笑),声音也很难听。我们一群人围着这个演示,你看我我看你,然后说——

Uncle Bob: “嗯,你知道,那一天快到了。”

Uncle Bob: “但(笑)还没真到。”这种持续的期待:我们知道它要去哪儿,但它还没到,而我们总能望见前方。对我来说,这一点直到最近都成立。然后,AI 这个东西打了我一个措手不及。我曾经是个 AI 怀疑论者,你在书里甚至都能品出一点那个味道——

Nathan: 是。

Uncle Bob: ——因为我写书中”AI 的未来”那部分的时候,还没有真正意识到这波 AI 会把我们带向何方。我当时想:摩尔定律已经见顶了,新一代程序员将要生活在那个”平台期”上。那是我的原话。现在不是了,情况变了。(笑)我都不知道我们现在到底在哪儿,但肯定不在那个平台期上。

从 AI 怀疑论者到”我成了瓶颈”

Nathan: 那你多讲讲这个。我想知道,自从书写完之后,你的看法又有了哪些变化。

Uncle Bob: 写那本书的时候,我已经玩过一点 AI,做过几件事。有些让我印象很深,有些则不然,书里其实也写了几个这样的例子。但几个月之后,我又做了更多尝试,它们给我的震撼更大了。我心想:好吧,这东西发展的速度超出了我的预料。于是我开始认真折腾真正的智能体(agent)。那大概是一月份的事——

Nathan: 嗯。

Uncle Bob: 我先是用了一个早期的 Grok 智能体。还行吧,我让它给我写点代码,然后我来审查。代码很烂,不过没关系,我自己收拾。但渐渐地,它越写越好。后来我换成了 Claude,Claude 又更好一点。然后我非常快地意识到:天哪,瓶颈是我。

Nathan: 哈哈。

Uncle Bob: 这些东西比我快。只要我约束得当——当时我还没完全琢磨透该怎么约束——但只要约束得当,它们就能产出合格的代码。不是多漂亮的代码,是合格的代码。这样我就能从”语法工”的角色里退出来,不再当瓶颈,然后我们就能跑得快了。从那以后我基本就处在这种模式里,虽然中间又经历了几次转变。那真是一次顿悟,我完全没有预料到。要知道,大约四年前我还相当斩钉截铁地说:永远不会有自动驾驶汽车这种东西。

Uncle Bob: 现在我有两辆。(笑)

Uncle Bob: 而且我这辈子都不会再买非自动驾驶的车了,它们实在好太多。

Carter: 我记得大概一年半前,我加入了一家创业公司。比起在大公司的时候,自由度大多了,想尝试什么工具都行。所以当时我重度使用 Cursor,用得很爽。然后——

Carter: ——我们 CTO 问我:”你试过 Claude Code 吗?”我当时就……

Carter: 我心想:我为什么要试?我就想待在 IDE 里,想高亮哪行就高亮哪行,想用自动补全,我为什么要放弃这些?不过差不多在同一时间——我想我们很多人都是在(那年)一月前后——开始意识到:哦,这些东西变强了,强到可以让我们比以前放手得多了。你刚才提到了”约束”,你在这方面的理念是什么?

Uncle Bob: 这个嘛,它正在变。(笑)从大约一月份到大概两周前,我的理念一直是:打造真正强硬的、确定性的工具,强迫智能体使用这些工具;这些工具负责度量代码的质量、度量代码行为的质量。你告诉智能体:必须一直改,改到低于某个阈值为止。比如有个指标叫 CRAP——好像是 Change Risk Anti-Patterns 还是什么之类的缩写,我记不太清了——但它是个很妙的小公式,把圈复杂度(cyclomatic complexity)和测试覆盖率混合在一起。

Carter: 然后呢?

Uncle Bob: 它会算出一个单一的数值,而你要努力把这个数值压得很低。一开始我压到 4:全都给我降到 4 以下。智能体就会磨啊磨、磨啊磨,把代码拆开,拆出特别小的函数。后来我一点一点地想:也许不一定非要 4,6 也行吧。现在我放到 12 了。发生在我身上的变化——我觉得也发生在智能体身上——是:模型比从前好得太多了,所以我可以放宽阈值。我可以再往后退一步说:它们已经足够好,很多事能自己搞定了。我仍然需要给它们加一些约束,但已经不需要像三月份那会儿那么严苛了。我不知道这会走向何方。感觉我们正走在一条轨道上,至少对我来说会发生的是:随着模型越来越好,我会不断放宽限制。能走到哪一步,我也不知道。这对我来说是个非常有意思的谜题,因为我坐在这儿——

Carter: ——网上流传着一个相当有名的梗。我想是一位叫 Sutton 的人写了篇论文,和”苦涩的教训”(The Bitter Lesson)有关;而 AI 界的苦涩教训就是:人类远没有自己以为的那么不可或缺。

Uncle Bob: 嗯。

人类在其中的角色是什么

Carter: (笑)那么——你读过这本书就知道,特别迷人的一点是:尽管我们和这些先驱生活在不同的年代,但大家身上都有一种相似的思维模式——对细节的痴迷、想要把问题搞清楚的渴望。既然你说”我在不断放宽约束”,又说”人类没有自以为的那么不可或缺”,那么”人在回路中”的角色到底是什么?今天的工程师扮演着什么角色?为什么你认为你写出的软件,会比——比如说——交给我那哥们儿、一位非常优秀的产品经理、但不是工程师的人来做,要更好?

Uncle Bob: 至少就目前而言,我拥有知识和经验,大多数程序员也拥有知识和经验,而智能体没有。所以你可以看着一个智能体构建系统的过程——不需要读代码——只凭它对你说的那些话、凭屏幕上滚过的内容,你就能看出来。而且你可以盘问它:这个你是怎么做的?那个你又是怎么做的?这里的整体思路是什么?你可以问它这些有意思的问题,它会回答,然后你就能在脑子里建立一个”它到底搭了个什么”的心智模型——

Carter: 嗯。

Uncle Bob: ——然后你就能想:好,你这里做错了,你不该那么做,把这条路改到这边来,把那个模块挪到那边去,把这个重整一下。我发现自己大量地在干这类事。

Carter: 嗯哼。

Uncle Bob: 高层的重构。因为智能体的目光是向下的,它们从不向外看——至少目前如此。当然,如果你明确要求一个智能体向外看,让它基于未来的性能表现和架构模式来评估整个系统,它也能做得像模像样。但它在写系统的时候不会主动这么干。它似乎没法像优秀程序员那样,同时处在两种心境里:程序员每写一行代码,都会想着这一行如何融入整个大系统;而智能体还不会这样做。

Carter: 嗯。我一直在两种看法之间来回摇摆:这到底有多少是我在把模型拟人化,又有多少是真实的?目前我处在”我们是在自己骗自己”这一边。

Carter: 不过我也非常尊重那些走向不同方向的人。我听 Kelsey Hightower 那类人——他是强烈反对全盘押注的那一派——还有 Cory Doctorow;但我也喜欢听另一些把既有假设全部推倒重来的人。(哼)我觉得我自己大概介于两者之间。或者说,我正在努力朝”最大化乐趣”的方向优化,就跟着乐趣走。所以我很好奇:对你来说,怎么最大化乐趣?你在用这些工具做哪些小小的实验和探索?

Uncle Bob: 我很幸运,已经不需要靠这个挣钱养家了,所以我就是玩。(笑)我就在里面尽情地玩:今天试试这个,明天试试那个。大部分就是实验。我会让一组智能体用一种方式构建,再让另一组用另一种方式构建,然后做对比:哦,挺有意思,这组搞砸了,那组做对了。我就是这么玩得不亦乐乎。而且我买得起 token,它们还没贵到离谱。不过我烧 token 的速度也确实快得吓人。

Carter: 等等,多快?给我们点数字,我要数字。

Uncle Bob: 这么说吧,Grok 会给一个一周的额度,告诉你”到 9 月 6 日再来重置吧”——我半天就能烧完。(笑)

Carter: 哇,一整周的额度啊。

Uncle Bob: 不过没关系,我不心疼,因为这一切对我来说都是研究,也都是乐趣。

harness(智能体编排框架)的探索

Carter: 太有意思了。那我问一下:我很想知道你现在主力用的 harness 是哪一个?你最近一直在向哪些工具靠拢?我觉得大家对这个会很感兴趣。

Uncle Bob: 我一直在做的一个大项目就是一个 harness,叫 Swarm Forge harness。我已经做了好几个月了。它特别有意思,因为我一直在调它、改它,而且中途变更好几次方向。我处在一种非常有意思的探索模式里:先往前推三个星期,然后说”不行,此路不通”,退回来换一条路,再试三个星期,还是不行,那就再换一种。这期间我烧掉的 token 不计其数。我不知道它最终会走到哪儿。眼下我还没法向任何人推荐任何 harness。

Carter: 有意思。

Uncle Bob: 而且我开始觉得,”harness”这个概念本身可能就是个错误的概念——

Uncle Bob: ——我们大概不该把它想象成”一队套着挽具(harness)的马”。我还不确定该把它想象成什么,但我开始觉得那个思路本身就不对。

Nathan: 有意思。我一直在关注这个方向。我的背景是站点可靠性工程(SRE),也做软件工程。我总是在想可观测性(observability)的事:怎么去度量这些东西,本身就是个很有意思的挑战——连 OpenTelemetry 都还在摸索度量智能体的正确姿势。

Nathan: 有个项目叫 Exoharness,不知道你见没见过——

Nathan: ——我觉得你至少会觉得很过瘾,可以拿来对比参考。他们想让 harness 能够自我改进,但把信任模型放在它之外:也就是说,我做的任何改动,都必须写进一条它够不着的、防篡改的日志里。那是我第一次觉得:”哦,有人在思考比 harness 更高一层的东西了。”就好像这些 harness 可以是热插拔的模块……也许我该干脆不在那一层思考了?我还没完全想通。反正 Exoharness 这个想法本身就够让人琢磨半天的。

Uncle Bob: 这样啊。我对它一无所知,听起来很有意思。

Uncle Bob: 这听起来也完全就是程序员的思维方式。

Nathan: 哈哈。(笑)

Uncle Bob: “我只需要再往上抽象一层,就一层。”可不是嘛:它不是 harness,是”元 harness”。我都在怀疑,这条路是不是一开始就指错了方向。也许,使用智能体的正确方式,本就不是把它们当作软件系统里的组件来对待。我不知道。

Nathan: 嗯。(笑)

Uncle Bob: 但我已经在这上面干了好几个月,产出的结果并不理想。不管 harness 是什么,我用单个智能体、直接和它一来一回地交互,得到的结果都要好得多;相比之下,把任务塞进 harness,看着它一步一步地走流程——约束重重、纪律森严——最后从另一端出来的东西,花了我二十倍的 token,而我还得坐在那儿跟它反复交互,才能把它调到位。

Uncle Bob: 于是我就想:好吧,也许这整个模型就是错的。也许那些最早”凭感觉写代码”(vibe coding)的人,还真有点道理。当然,我们还是需要某种纪律在里面。(笑)

Nathan: 对,而且——

Uncle Bob: 我们总不能放任它们写代码不写测试吧。

Nathan: 而且我遇到的最大的问题是:系统会变得难以理解。我认识的所有用 vibe coding 搞出大型代码库的人——现在搞出大型代码库太容易了——最后都不得不把”这部分是怎么工作的”这种问题外包出去:跑去问模型,等于间接地重新做一遍调研。

Uncle Bob: 对对,那才是最逗的部分,对吧?你跑去问模型:那个——

Nathan: “既然我们把这个都建好了,那它到底是怎么工作的呢?”(笑)

Nathan: 然后祈祷它跟你说实话。而且总有一种前所未有的挫败感:这种感觉在软件开发史上从来没有过——比如工作上有个功能要做,你给 Claude 或者别的什么发一条提示词,它啪的一下把功能吐出来了。我总会快速验证一下:”好,能用吗?太好了,功能是好的。”然后你一审查代码,心里骂一句:”靠,这写法完全不对啊。”接着又想:”唉,可它毕竟能跑……”然后你还得当个好孩子——像童子军那样——对自己说:”行吧,咱把它收拾得比来时更干净一点。”不过我觉得你的那个观察特别有意思——

Nathan: ——你说得对:如果你让一个智能体去审查一个现成的代码库,问它”你怎么看?觉得哪里能收拾干净点?”,它们干得相当漂亮;而在实现层面,它们在细致的语法层面上也做得很好。可为什么一到”实现”模式里,它们就不会一边写一边重新评估、不会说”哎,这块确实不干净,我把它挪一挪”呢?因为从你的书、从 Dave Thomas 和 Andy Hunt 的书、从所有这些业界大牛的书里,我学到的都是:程序员就应该这样编程——一边干一边收拾。Martin Fowler 关于重构的整个理念就是:如果你的重构方式是对的,你在任何时刻停下来都没问题。可智能体偏偏不这么做。你觉得它们将来会走到那一步吗?还是说,这种行为和大多数人使用智能体的方式天然相悖——大家想要的就是”我交代你一件事,你去做就完了”?

智能、意识与”感受能力”:Bob 的理论

Uncle Bob: 对此我有个理论——

Uncle Bob: ——你们姑且听之。这些模型是真正智能的。你没法说它们不智能,它们能沿着一条推理链走下去。所以,智能是它们确实拥有的东西。它们也是有意识的——

Uncle Bob: ——它们有情境感知(situational awareness)。它们知道自己身在何处,知道自己在做什么,甚至能小幅地预测未来。所以说,它们是有意识的。但它们没有”感受能力”(sentience):它们没有自我感,没有自我保全的意识。它们不眺望明天,只看眼前正在做的事。而这正是人类带到牌桌上的东西:我们看着眼前的事,同时也在想:”是,但如果我这么干,明天我就得收拾一场噩梦。”智能体做不到这一点——

Carter: 嗯。

Uncle Bob: ——但如果你把它从代码里拽出来问一句:”好,那你说说,这东西的可维护性怎么样?”它也能指出那场噩梦:”哦,这根本没法维护。”“那你当初为什么这么做?”(笑)”唉,我真不该啊……”它们这时候表现得就像个白痴。因为它们不会像人类那样,把对未来的设想应用到当下。人类之所以能做到,是因为人有”感受能力”,想要保全自己。我们有一个自我完善、自我保全的议程:每个人都希望自己明天比今天过得更好。而没有任何智能体想要这个——事实上,”想要”这个词压根不在它们的脑子里。如果非要说它们在乎什么,它们在乎的只有此时此刻正在做的事。这就是我的理论。

Uncle Bob: 那么,怎样才能让它们按我们的期望行事?我们就得赋予它们”感受能力”。

Nathan: 这就引出了一个很有意思的两难。你想不想赋予这些东西感受能力,好让它们——

Nathan: ——万一我们只是为了”让它们重构得更利索”,结果造出了终结者(Terminator)呢?那可就太搞笑了,对吧?(笑)

Uncle Bob: 给到”够用来重构”的量就行了,谢谢。

Nathan: 是啊。我自己属于这一派:我认为我们完全有能力把它做到让我相信它有感受能力、甚至让我相信它有意识的程度——注意,我现在并不认为它有意识。但那些论证的思路我都明白。

Nathan: 我依然觉得这非常奇妙:高维度的模式识别,竟然和我们所调用的那种智能难以区分。它给人的感觉既莫名熟悉、又全然陌生,对吧?我一直惊叹于这种反差:哦,你连一个五岁小孩都会的基本的事情都做不了;然后下一秒,你又能在一秒钟之内从一百万行代码里找出一个模式,帮我省下大把时间。我一边惊叹,一边又觉得:行吧,这是个完全不同的物种。

Nathan: 对于”我们正在学会用这些工具做什么”,我是兴奋的。我只是希望我们别是去”造别的人类”——那对我来说不是乐趣所在。对我来说,乐趣在于:我们能不能拓展”智能”的定义?能不能拓展”作为人类去识别问题、然后调用这些工具以我完全无法想象的方式从维度上解决它”的能力?我希望我们别只是造出困在机器里的、归公司所有的人类。那就太令人失望了。

Uncle Bob: 非常有意思的两难。

Uncle Bob: 你想啊,我们希望它们以某种方式行事,对吧?

Uncle Bob: 而我们想要的那种行为方式,恰恰要求我们把它们造出”感受能力”来。

Uncle Bob: 那我们到底要不要这么做?

Uncle Bob: 非常有意思的两难。而且你也知道,这件事最终会怎么收场,取决于经济规律的演化,而不是伦理。

Nathan: 是啊,是啊。

Nathan: 没错。(笑)

Nathan: 嗯,它——

Uncle Bob: ——它会把局面搞得很混乱,有这个潜力。我还能想象,将来会出现各种抵抗运动之类的——

Nathan: ——已经有了。对,完全正确。

AI 与历次技术浪潮相比如何

Nathan: 好,那么——因为我想到 AI 的时候,总会去想:科技行业之前还有过哪些浪潮,人们是怎么踩上浪头的?我能数出来的有:互联网是一大浪;再往前,也许可以算上你提过的个人电脑;然后我觉得移动和云计算发生的时间太近,很难把它们拆开。再往后,一堆人想把加密货幤炒成”下一件大事”——加密货币确实有它的用途,但显然没有变成它最狂热的信徒所期望的那种大东西。而我觉得 AI 是第一个真正有资格说”好啊,我完全可以和前面那些浪潮相提并论”的东西。所以我就想问你:你亲历了个人电脑、互联网、移动、云计算,如今轮到 AI——你会把它和这些浪潮怎么排?

Uncle Bob: 哦,它要整整大上一个数量级。

Nathan: 你真这么觉得?

Uncle Bob: 大得多。

Nathan: 好。

Uncle Bob: 是的。跟它最接近的,大概就是互联网本身了。互联网是在 2000 年前后在整个行业里炸开的——

Uncle Bob: ——当时谁也不知道该拿它怎么办。于是出现了大量的经济泡沫,各种愚蠢的、疯狂的网站,人们干着各种荒唐事。折腾了几年之后,一切才尘埃落定:经济规律发挥了作用,如今我们完全清楚互联网是什么,也依然对它心怀敬意。但这次完全不同,这次还要再大一个数量级。

Uncle Bob: 好,刚才说过那个”平台期”。我们确实处在一个硬件的平台期上,这一点毫无疑问:主频不再提升,晶体管密度不再缩小,那条造更好芯片的路走不通了。那么,如何维持指数级增长?因为我们现在又重新回到了一条指数增长曲线上——

Nathan: 嗯。

Uncle Bob: ——我们先是平坦了一阵,现在又回到曲线上了。靠什么维持?眼下靠的就是:土地和发电。

Nathan: 对,对。

Uncle Bob: 实体的物理设施。问题不再是芯片了,而是赤裸裸的物理厂房,而这个极限我们已经撞上了——

Nathan: 嗯。

Uncle Bob: ——那怎么办?Elon Musk 说:显而易见的解决方案是把它们送上太空轨道。(笑)

Nathan: 这听起来很疯狂,不过……跟地球相比,太空里确实有近乎无限的资源可用。

Uncle Bob: 这确实是显而易见的解决方案。而且你看,Elon Musk 手里有飞船——

Uncle Bob: ——有卫星。他已经证明了这事能做成。他一定会把数据中心送进轨道。你看,这就是显而易见的答案。所以说,AI 正在推动航天事业,我的天哪。(笑)

Uncle Bob: 我们 1969 年登上了月球,然后大家反应基本是:”哦,挺有意思。下一个呢?”从那以后我们在太空上一直吊儿郎当:航天飞机?行吧,随便。哦,还炸死过几个人,好吧。而现在,突然间,我们有了一个强劲的经济理由,去每年发射一万艘飞船——

Nathan: 对,对。

Uncle Bob: ——而这个理由就是 AI。

Nathan: 是啊。这太有意思了。我前几天还真的跟 Claude 聊过太空旅游和月球基地的事,聊的就是”我们为什么没有月球基地”。答案无非就是:现在没有经济动力去建一个月球基地。科学上的动力?有。但经济上没有。所以想想确实奇妙:AI 有可能把”把东西送上太空”的单位经济成本打下来,而这又会让月球基地变得更有吸引力。而且——

Uncle Bob: 哦,是啊。Musk 现在就想建月球基地,他还想要一门质量投射器(mass driver)——

Nathan: 对,对。

Uncle Bob: ——那样发射卫星要容易得多。而且如果我们需要一百万颗卫星挂在天上呢?那么——

Nathan: ——那就意味着,在我女儿的有生之年,月球上都要出现雾霾问题了。(笑)

Uncle Bob: 环保人士要在月球上插 Greenpeace(绿色和平)的旗子了。是啊,那会非常有意思,那将是一个迷人的时代。

Uncle Bob: 但让我惊叹的是:两年前我还以为 AI 革命只是昙花一现,而现在,它竟然要驱动我们奔向群星。

泡沫、崩溃与”它不会消失”

Nathan: 是啊,太迷人了。而且——我同样也在两种想法之间摇摆:一方面,我确实认为我们有可能真的处在这条指数曲线——或者说 logistic 曲线,反正增长总是 S 形的——的起步阶段,巨大的增长还在前头,很多事情正在发生;另一方面,它也有可能崩盘,对吧?比如我们犯下什么根本性的错误,还有那些”循环交易”式的资本运作。这两种结局什么时候到来,我们都说不准。但我一直在想——Cory Doctorow 这点也讲得很好——”浴火之后”:和加密货币不一样,哪怕现在一切全部崩盘,只要我们手里还有 Kimi 3 或者其他这些开源权重模型,我们作为一个文明照样会受益,哪怕整个行业都垮了,对吧?这些东西还在我们手里,还能跑在现有的硬件上。增长也许会停,但即便如此,我们仍然——

Nathan: ——我们仍然在学习。我觉得,哪怕从此再没有新模型发布,光靠现有的模型,我们还能再学上十年。而且——

Uncle Bob: ——这东西是不会消失的。

Nathan: 对吧。所以,即便我们处在……你看,人人都爱拿郁金香泡沫和铁路泡沫说事,但即便是铁路——我们早知道铁路是必然趋势,早知道铁路就是未来。是的,确实投资过热了,但铁路照样是未来,互联网照样是未来——

Nathan: ——而且我们在”大型机到个人电脑”的转变中也见过同样的戏码:哦,这些私有模型会变得足够强,能直接跑在我自己的设备上,不用再去云端。我确实觉得,我们会看到五花八门的有趣模型涌现出来——也许是专用模型,也许是超低功耗的模型。不管最后谁赢、不管我们走向何方,我对此都是乐观的。这确实是一次……一次转变,一次我到现在还在努力消化的转变。真有意思。

Uncle Bob: 这个嘛,大家都还在努力消化呢。

Nathan: 哈哈。

还会有第二版吗?年轻人还要学计算机科学吗?

Nathan: 那好,我必须问一句——

Nathan: 《We, Programmers》——哦对,先快速问这个:《We, Programmers》你打算将来出个第二版吗,还是说——

Uncle Bob: 你知道吗,不知为什么,我写书从不考虑”以后”。每写完一本书,我都觉得这是最后一本了。(笑)

Nathan: 真的?

Uncle Bob: 真的。然后某个念头冒出来,我就想:唉,看来还得再写一本。

Uncle Bob: 所以还会不会有下一本?我不知道。至少此刻,那种激情还没有在我心里燃烧。

Nathan: 有意思。

Carter: 呃,我这么问吧——因为我们的很多听众都处在职业生涯的早期,正在努力往上走,他们也在听这期节目。而我们这场采访的开头,是你说”我并不担心这个行业”——你不担心人们不再学底层语法,你觉得总会有我们的位置;然后我们又聊到”要把模型造出感受能力来”需要什么条件,对吧。那我想直击核心地问一句:你会建议一个大学生去读计算机科学专业吗?

Uncle Bob: 哦,当然会。

Carter: 好,好。那”为什么”就是我要问的了——因为我自己也会建议,但我想听听你的理由。

Uncle Bob: 这里我还有另一个理论。我们正在追赶这场创新——这场创新已经跑到我们前面去了,我们不知道它要去哪儿,我们在后面追。追法有两种。一种是把一切都扔掉:去他的设计模式,去他的我们过去学到的一切,我们只能从一个全新的方向重新开始。另一种追法则说:不,我们过去学到的东西是好的,我们只需要对它做些调校——有些东西得改,有些东西的限制得放宽,有些东西可能还得收紧。总之,我们得一路调校着向它靠近。我就属于后一个阵营。所以我不会劝别人别去学计算机科学。去学那些好的东西,学那些之所以好的道理。经常有人问我:”对新手程序员该怎么办?要不要一上来就给他们一个智能体?”我的答案是:不要。你应该先把他们当智能体一样对待六个月。

Carter: 有意思。

Uncle Bob: 让将来要驾驭智能体的人,先用驾驭智能体的方式被驾驭;用度量智能体的方式被度量。这样他们才会理解:智能体被期望如何行事、必须做到什么。然后,他们才能”毕业”,开始管理智能体。当然,我也不知道这是不是正确答案——

Uncle Bob: ——它只是”一个”答案。如果我身处其境,我就会这么做。

Nathan: 我喜欢这个说法。我有个 11 岁的女儿,正在学数学。我觉得我们至今仍是这样对待数学的:没人指望一个成年人去手算长除法什么的——

Nathan: ——但我们还是要学着手算,这样当你把数字敲进计算器、或者去解更高阶的问题时,你才会心怀感激。

Uncle Bob: 没错。

Nathan: 而且我认为编程也一样有它的位置:你还是得学会以程序化的方式思考,这是入门的纪律。

Carter: 而且我在团队里唠叨 AI 的时候总说:没错,我们写软件的方式已经天翻地覆,但”什么才算好软件”的质量标准其实并没变。并不是说,我拿起一份人写的代码、再拿起一份 AI 写的代码,就得用两套完全不同的标准去评判。没这回事。而且怎么可能变呢?这些模型本来就是用我们造出来的全部语料训练出来的。所以:模块化依然是好的,可选性、易于修改的能力依然是好的,所有这些设计实践和原则依然适用。是的,所以——

Uncle Bob: ——我就干过把巨大而可怕的烂摊子丢给智能体、把它们逼疯的事。(笑)

Uncle Bob: “给我把这团乱麻解开。”

Uncle Bob: 它们解不开。它们会一头扎进去,但无论怎么折腾:加一个功能,弄坏另一个,然后它们还一脸惊讶:”咦,怎么坏了?”再去修那个,又弄坏别的。所以,只要你丢给它们一个烂摊子,你完全可以把智能体逼进和人类一模一样的困境——

Carter: 嗯。

Uncle Bob: ——所以你必须确保它们一开始就不把代码搞成烂摊子。所有那些原则照样适用,只不过适用的阈值可能不同。

Carter: 有意思。

Carter: 是。而且我很喜欢和智能体共事的一点是……我同意大家的看法:它们如今已经非常、非常强了。有时候你会遇到一份被人倾注了无数心血的代码,你会感叹:”哦,这件作品真是精雕细琢。”而智能体写出来的东西,说实话,我还从来没有看着哪一份感叹过”哦,这简直是美轮美奂”。不过话说回来,大多数代码库——你也知道,你当年可是在咨询界摸爬滚打出来的(笑)——

Uncle Bob: ——可都不是那样的。

Carter: 而且我确实发现,智能体吐出来的代码,平均质量要高于——我不知道该怎么说——大概高于整个软件工程行业的平均水平吧。你同意吗?

Uncle Bob: 我大体上同意。现在我审查智能体产出的代码时,它通常不会是我自己会写的那种写法——

Carter: 嗯。

Uncle Bob: ——所以我会斜着眼看,会微微皱眉头。但它并没有超出我在行业里见过的那个范围。我的意思是,它总体上比我在行业里见过的大多数代码都要好(笑)——当然,这也和我施加的约束、和我要求它们跑的测试有关。它们做的不是人会做的事,但做得足够好——

Carter: 嗯。

Uncle Bob: ——如果哪个人类写出了它们写出来的东西,我不会让他回去重写。

Carter: 嗯嗯。

Carter: 有道理。

Carter: 而且我很喜欢它们身上的那种周全。因为有些人类写的代码,你一看就火大:”你这儿的异常根本没处理啊!”而智能体在这方面往往做得更好——

Uncle Bob: 是,是。虽然也不是完美的。(笑)

一个遗憾:Claude Shannon

Carter: 说到”不断变化的预期”……有一个人,我真希望你在书里写了——

Uncle Bob: 哦,来啦。

Carter: ——《We, Programmers》嘛。我猜你肯定遇到过这种事:每个读者心里都有一个自己最爱的人选,然后跑来问你:”为什么没有他?”但我说的这位是 Claude Shannon。我真的很希望 Claude Shannon 能出现在《We, Programmers》里。这是你有意的取舍,还是通盘考虑之后的结果?

Uncle Bob: 不是。好吧,不是有意的选择。我通览了手头能找到的资料,也列出了那些我特别想写的人——

Uncle Bob: ——但最后总得做取舍。

Carter: 没关系,书写得很棒,完全理解。

Uncle Bob: 不是有意的决定。没有任何人是被有意排除在外的。

Carter: 明白。

Uncle Bob: 我们收到了 Claude Shannon 遗产管理委员会雪片般的来信,他们对我们没写他这件事非常愤怒。(笑)

Carter: 如果说”来自 Claude Shannon 家族的信”其实就是我在那儿龇牙咧嘴地念叨”Claude……哎呀,他和这位共事过,又和那位共事过,真该把他写进去啊”……(笑)不过我想顺带讲个小故事,我觉得放到这里特别应景:在 Claude Shannon 涉足工程之前——那会儿还谈不上”软件工程”——那行当与其说是一门科学,不如说是一门手艺:你学的是做这些东西的”手艺”。而正是他,把布尔逻辑引入了电路测试之类的领域,在贝尔实验室。总之,我觉得我们眼下正处在同样的临界点上:会有一位年轻的”Claude Shannon”从这堆 AI 的东西里走出来,以一种和我们所有人都不一样的眼光看世界;而在那发生之后,一切会显得无比显而易见——”哦,可不是嘛,本来就该这么干。”而在那一天到来之前,我们大概只能继续原地转圈。至少我是这么看的——

Uncle Bob: ——如果那位”Claude Shannon”最后被发现是一个模型,那岂不是很有意思?

Carter: 绝对的。那简直就是”大脑爆炸”表情包的瞬间。

两条人生准则

Carter: 好了,Bob,你今天说了太多让我得”坐下来缓缓”的话了(笑)——录完这期我得安安静静吃顿午饭,好好想一想即将到来的未来。不过我们在播客里总是说:身处这一切之中,是一件令人兴奋的事。这也是读《We, Programmers》能真切得到的东西——我特别喜欢 Grace Hopper 那一章:她恰好身处那件即将改变世界的事情的正中央;而今天的我们,也都以各自的方式活在那样的时刻里。这太迷人、太令人兴奋了。而凡是令人兴奋的事,多少都有点吓人。但我想,我们可以选择兴奋,也可以选择恐惧;而选择兴奋的人,多半能更好地应对时代的挑战——我觉得这也是你在《We, Programmers》里读到的规律:那些选择兴奋、选择拥抱变化的人,通常都笑到了最后。

Uncle Bob: 是啊。我此刻脑子里正冒出两条人生准则,现在就送给你们。刚刚想到的,两条人生准则:其一,永远保持乐观——

Uncle Bob: ——其二,永远心怀感激。

Carter: 好。

Uncle Bob: 我们正活在一个了不起的时代啊,老兄。

Carter: 是啊。(笑)

荐书环节:科幻

Carter: 而且我觉得,这两条人生准则确实贯穿了整本《We, Programmers》。我们推荐过——我们为这本书专门做了三期节目,这里再给所有听众安利一次:去读《We, Programmers》。它让你看清我们从哪里来、要到哪里去,真的太好了。这话题我们能聊上几个小时。最后,还有什么书想推荐给听众吗,Bob?最近读过什么都行——技术的、非技术的、虚构的、非虚构的,都可以。

Uncle Bob: 哦,天哪。我想想啊……我是个科幻迷——

Carter: 嗯。

Uncle Bob: ——而我对大约 1980 年以后的科幻一直很失望。我是读着 Asimov、Clarke、Heinlein 长大的,后来还有(Larry)Niven……近来的一些作者我就是欣赏不来。不过后来也出现了几位我真心喜欢的。

Carter: 哦?

Uncle Bob: 不知道你们有没有读过 Bobiverse 系列(”鲍勃宇宙”)。我当然喜欢了(主角也叫 Bob)。(笑)写得真棒,是真正硬的硬科幻,创意天马行空。我连具体的书名都记不全了……作者叫什么来着,Dennis Taylor,是这个名字吧?

Carter: Dennis Taylor。

Uncle Bob: 我想作者是他。第一本叫《We Are Bob》,整个就是 Bobiverse 系列,后面还衍生出好几个故事。非常、非常好。

Uncle Bob: 好,还有一本,叫《The Theft of Fire》。这本书……我想他是自费出版的,因为如今人人都自费出版,或者绕开传统出版商——

Carter: 嗯。

Uncle Bob: ——《The Theft of Fire》。读那本书的感觉就是:哦,终于,终于有人明白科幻该是什么样子了。(笑)一部痛快的太空歌剧,有非常精彩的太空战,中间还揉进了 Larry Niven 式的幽默。就是那么好看。然后还有一位作者——这些名字啊,他叫什么来着……Corcoran,我记得这是他的姓。他写了一个系列,其中一本叫《The Powers of the Earth》——

Carter: 嗯。

Uncle Bob: ——这本书借鉴了 Heinlein《The Moon is a Harsh Mistress》(《严厉的月亮》)的构思,但写得完全不同。就是读起来特别开心,特别好玩。它是一部政治讽刺作品,拿我们当下的政治开涮,把它嘲了个遍。而故事又设定在月球上,写得非常、非常到位。就是这些书让我每天早上爬起来有东西可读。

Carter: 好。我也一直在找好的科幻。我必须问一句:你读过 Andy Weir 的作品吗?比如《The Martian》(《火星救援》)和《Project Hail Mary》(《挽救计划》)?

Uncle Bob: 读过,读过。

Carter: 因为你说你对科幻一直很失望——那这两本你喜欢吗?

Uncle Bob: 哦,喜欢。

Uncle Bob: 喜欢。《The Martian》就是让我觉得”科幻说不定还有未来”的那批书之一。

Carter: 好,那挺好。

Uncle Bob: 我当时对那本书满意极了。后来他们把它拍成了电影,我对电影也非常满意。然后是《Hail Mary》。哦,我的天哪。

Carter: 是啊。

Carter: 我听说他最近上了 Neil deGrasse Tyson 的播客,他说他贴了张便利贴,写的大致是”Neil deGrasse Tyson 会怎么评价这段?”——就是”这物理上站得住脚吗?”——他还建了个电子表格,确保内容至少维持在”足以让人暂时信以为真”的范围之内。我觉得这太好笑了。

Carter: 那是我们在播客里讲过的唯一一本虚构类图书——好吧,如果《The Unicorn Project》也算的话。我们专门为《Project Hail Mary》做过一期节目,因为我太喜欢它了。而且我觉得《Project Hail Mary》特别契合”保持乐观、心怀感激”这一点——我喜欢 Andy Weir 的小说的一个地方就是这个理念——

Uncle Bob: 完全同意。

Carter: ——人类不是问题本身,对吧?我们能够直面挑战。有人指出过,这一点很有意思:《Project Hail Mary》里他们要阻止的那场灾难,并不是人类造成的,它只是宇宙里自然发生的事;而最终搞明白并解决它、成为救世英雄的,恰恰是人类自己。这很——

Uncle Bob: ——还是和那些硅基生物联手做到的。

Carter: 对对对,还有外星人帮忙。

结尾

Carter: 好,那么——Uncle Bob 的《We, Programmers》,各位,去读吧。非常棒的书,是我们做播客以来的最爱之一。Bob,你再次做客,我们感激不尽。只要能和你聊上几句,我们都开心。你真是——

Uncle Bob: ——随时都可以。

Carter: 好,那么各位,你们随时可以在我们的网站 bookoverflow.io 上找到我们。我在 Twitter 上的账号是 Carter Morgan,播客的账号是 Book Overflow Pod。Nathan 则可以通过他的咨询公司 rojoroboto(rojoroboto.com)找到。感谢大家的收听。Bob,再次感谢,今天真是太愉快了。

(音乐)




Enjoy Reading This Article?

Here are some more articles you might like to read next:

  • 【AI时代的阿德勒心理学】访谈《被讨厌的勇气》作者岸见一郎
  • Jake Wharton:Kotlin、开源与软件开发的未来
  • 确定性陷阱:保持生活的弹性
  • 从 LLVM 到 Mojo:Chris Lattner 谈 AI 时代的编程语言
  • 更多大师谈 AI 编程:播客与访谈实录