Alan Kay:香农给了我们对付噪声信道的办法

查看原文 HN 讨论

文章摘要

这是一段只有 2 分 39 秒的 YouTube 短片,2026 年 8 月 28 日由 Don Hopkins 上传。视频记录的是一个意外:在丹麦奥胡斯大学为纪念 Kristen Nygaard(Simula 语言的共同发明者、面向对象编程的奠基人之一)百年诞辰举办的研讨会上,计算机先驱 Alan Kay 通过 Zoom 远程参会,在调试设备时被自己的回声困住了。Don Hopkins 在视频简介里写了一段很有趣的说明,后来被 HN 管理员 dang 原样放到了帖子正文里,以下主要据此和视频字幕整理。

发生了什么。 Alan Kay 原定要讲他当年接触 Simula 如何激发了他对”对象”的最初思考。准备阶段,会场有人把直播流外放出来,旁边正好有一个开着的 Zoom 麦克风,于是他自己的声音每隔大约 21 秒就会传回他耳朵里,一遍又一遍,层层叠加。Don Hopkins 把这称为 Alan Kay 关于克劳德·香农的一场”即兴前卫多层音频反馈循环表演”。

他说的话并非随机。 回声里反复出现的,恰好是 Kay 那一刻正在说的话:”香农给了我们对付噪声信道的办法。”以及:”我几乎每天都在想这件事。我意识到他妈的到底发生了什么,这实在太神奇了。”Don Hopkins 指出其中的讽刺:香农的噪声信道编码定理,描述的正是此刻一边让他赞美、一边把他的声音搅得一塌糊涂的那种信道。字幕里还能听到 Kay 的其他反应:”有延迟。”“这像是被转发到火星再绕回来。”“我没法一边讲一边同时听两个声音。”但他笑着说”这会很有意思的”。最后的解决办法很朴素:”把你那边 Zoom 的音频关掉就行。”

火星与月球。 Don Hopkins 顺手算了一笔账:按光速计算,21 秒的往返延迟意味着单程约 300 万公里,相当于往返月球八次,但只有火星最近距离的大约十七分之一。

一次意外的《我坐在一个房间里》。 Don Hopkins 把这段录像比作美国作曲家 Alvin Lucier 1969 年的著名作品《I Am Sitting in a Room》:Lucier 在一个房间里反复录下自己的声音再播放、再录,直到语言消失,只剩下房间本身的共振。而在这次意外的 Zoom 表演里,最后剩下的是网络本身:延迟、压缩和丢包。

额外的噪声层。 还有一层”附赠的噪声”:YouTube 的自动字幕把 Kay 那句兴奋的粗口自动替换成了”[ __ ]”。所以完整的链条是:Alan 的声音、Zoom、直播流、会场、再经过 Zoom 三次、Don 的录屏、YouTube 的语音识别,最后是一份被审查过的字幕。视频简介还附了一串延伸阅读:香农与信息论、噪声信道编码定理、音频反馈和视频反馈、James Crutchfield 1984 年的影片《视频反馈中的时空动力学》、现场循环录音的历史,以及 Nygaard 百年研讨会的完整录像(Kay 的正式演讲从 3:27:49 开始)。

HN 评论精华

本帖 152 分、约 36 条评论。讨论分成三块:这段视频到底是什么、香农定理本身的严谨表述,以及由 Kay 引出的一长串面向对象编程史。

这是什么? RobRivera 问有没有人能解释一下这到底是怎么回事。dang 回复说已把录制者 DonHopkins 的说明加到帖子正文(视频是 Don 录的,但不是他投稿的),”希望 Don 不介意”。DonHopkins 说当然不介意,也希望 Alan 不介意,因为录像里他笑着说”这会很好玩的”。他最喜欢的部分是:YouTube 的语音转文字把 Alan 兴奋的那句粗口替换成”[__]”,又给整件事添了一层审查噪声;而会议自己的实时转写倒是如实保留了那个词,只是偶尔会突然切换成丹麦语,冒出”我们会吃掉你的手”之类的句子。dang 还找到了完整演讲录像,但吐槽界面令人困惑:文字聊天高速滚动,看不到 Alan 本人,只能长时间盯着一块白板。DonHopkins 解释说时间轴右侧有几个摄像机图标,可以切换到讲者或幻灯片画面,”好在 Alan 在演讲前把所有故障都调试完了,所以正式演讲时没有反复打断自己”。thatspartan 为不熟悉背景的人解释了香农的贡献:即使知道信号到达对方之前会被破坏,依然可以可靠地传输信息,这是现代通信的基础,比如 WiFi 在其他设备共享同一介质时依然能工作,直到所谓的香农极限为止。wood_spirit 说本周在另一个讨论”时间触发通信系统中避免’喋喋不休的白痴’故障”的帖子里也看到了这个视频。

香农真的给了”办法”吗? MarkusWandel 较真地说:据他所知,香农并没有具体给出对付噪声信道的方法,他给出的是一种量化方式,告诉你如果找到最优方法,在噪声信道上最多能传多少,就像”无论你怎么改进,都不能超过真空光速”。用香农定理算出极限很容易,在实践中逼近它很难。PunchyHamster 回应说,许多现代调制方式在给定带宽和信噪比下已经基本贴着香农极限运行,只是还要加纠错编码,解码后的比特率比线路速率低几个百分点。tverbeure 认为这低估了纠错编码的作用,调制方案几乎只是配角,真正让人能任意逼近香农极限的是 LDPC、Turbo 码这类现代纠错算法。kragen 则记得香农在原始论文里其实给出了最优方法:使用任意长的随机码;难点在于用最直接的方式解码随机码(把收到的码字和码本里每个码字比较、取汉明距离最小者)需要指数级的内存和计算,此后几十年的进展都是在用非真正随机的码字、以合理的计算量逼近香农极限。

Kay 与 Stroustrup 同台。 DonHopkins 补充了现场的另一件趣事:在 Kay 之后,C++ 之父 Bjarne Stroustrup 也做了演讲,两人之后还有一段”火药味十足”但彼此尊重的交锋。两人都自称 Nygaard 的传人:Kay 是读到 Simula 后把它变成了 Smalltalk,后来与 Nygaard 和 Dahl 成了同行;Stroustrup 则是在奥胡斯读书时直接受教于 Nygaard,博士期间用的就是 Simula。按 Don 的概括,Stroustrup 说他从 Smalltalk 那里没拿多少东西,他从 Simula 拿的是静态的那部分:编译期保证、直接映射到硬件的零开销抽象,而且 C++ 从来不只是一门面向对象语言,并非一切都是类层次或虚函数。Kay 则认为晚绑定是值得的,因为交互式系统中最慢的环节是人,静态类型是”一个被过早应用的好主意”。两人都同意,操作系统或互联网真正的任务是永不崩溃、永不丢失任何东西,只是从相反方向入手:Stroustrup 正在为 C++ 设计防止悬垂指针、越界访问和未初始化内存的保证,Kay 则指出 Smalltalk 在运行时动态地保护着每一个对象。Rochus 纠正了一个细节:Simula I 和 Simula 67 差别很大,Kay 1969 年的博士论文只引用了 1966 年关于 Simula I 的论文,文献证据更像是两条线:Kay、Simula I、Smalltalk-72;以及 Ingalls、Simula 67、Smalltalk-76/80。

面向对象的另几条路。 shevy-java 说他希望有一门具备 Alan 设计思想、但语法更好的面向对象语言,他不喜欢 Smalltalk 的语法,而且还得够快,否则人们只会用 C,Java 又太啰嗦。goatlover 推荐了 Crystal(Ruby 风格语法、编译型、带静态类型推导)。Rochus 推荐 Elixir 和 Erlang,说它们几乎完全就是 Kay 所宣扬的东西,并抛出一个有意思的观点:Wirth 和 Gutknecht 在 Oberon 系统中实现的对象模型,比 Smalltalk-80 更接近 Kay 基于消息的愿景;Wirth 并非为了模仿生物学,而是为了避免虚函数表,他用类型扩展声明专门的消息记录,由记录变量里的过程类型字段根据消息的动态类型做多态分派;而 Smalltalk-80 实际上实现的是和 Simula 67 一样的编译式虚方法和查表分派,只不过是动态类型的。kragen 补充说 Wirth 其实认识 Kay,他在 1976 至 1977 年到施乐 PARC 休学术假,正是 Lilith 和 Oberon 的灵感来源,当时 Kay 领导学习研究组;Rochus 反驳说 Wirth 主要关注的是 Lampson 的 Mesa 组,从 1993 年 HOPL 会议问答环节看,Wirth 显然并不认识 Kay 本人。两人来回争论了好几轮,最后 Rochus 说”这已经离我的观点很远了,到此为止”,kragen 总结说他们唯一真正的分歧,大概只是 Wirth 是否私下认识 Kay,而这一点两人都不太确定。

jecel 告诉 shevy-java”你运气不错”:Kay 最初的 Smalltalk-72 根本没有固定语法,每个类有一个方法自己解析收到的消息,问题是性能差、别人的代码难懂;Dan Ingalls 观察大家在 Smalltalk-72 里最常用的写法,为 Smalltalk-76 定下了风格相同的固定语法,从而能编译成字节码,跑得快得多,他把这比作新校园先到处种草,看哪里被踩秃了再铺人行道;Smalltalk-80 为了能在 PARC 以外的普通电脑上运行,改用 ASCII 字符集,在他看来反而变丑了。DonHopkins 则介绍了 Self 的路线:保留 Smalltalk 的关键字消息语法,去掉类,只剩对象直接从其他对象继承,后来又有了直接操作活对象的可视化编程环境;Self 编译器(定制化、内联缓存、自适应重编译)的技术后来进入了 HotSpot 和 V8,这正是 Java 和 JavaScript 今天跑得快的原因,”去掉类让语言更简单,而更简单的语言更容易做快”。他还提到 IBM 的 Korz 更进一步,连对象都去掉,只剩按多个维度分派的”槽”。cmrdporcupine 说他从 1991 年玩 LambdaMOO 起就关注原型系统,第一次听说 Korz,并分享了自己从关系/Datalog 角度做的语言 mica。DonHopkins 还引用了多年前 Alan Kay 给他的一封关于 MVC 的邮件:”计算机领域的东西能留下来,往往只是因为它们勉强能用。”Kay 说 MVC 好的部分是哲学,借鉴了他在犹他大学参与的 3D 图形学中”相机”与”世界”的概念,坏的部分是实现方式,”机制太多”;他更喜欢把视图做成不影响被观察对象的”观察者”。andrekandre 说这很有共鸣,他甚至觉得人们热衷用 LLM 写代码,部分原因是厌倦了用复杂的方式实现本应简单的东西,LLM 成了应对这种复杂性的拐杖。

其他。 notarobot123 说已经等不及看到这段的自动调音混音版。aworks 补充说 Alvin Lucier 还有不少有意思但非常规的作品,只是《我坐在一个房间里》和约翰·凯奇的《4’33”》一样,成了有梗级别知名度的观念艺术。snthpy 则引了一句据称出自牛顿的话:”我能计算天体的运行,却算不出人类的疯狂。”