今日重点:🗣️ 口语——评审邮件里的每句话,拉到视频会上都要能张口说出来。 今天用 dma-buf 一场真实的 9 小时争论,拆五个说话动作: 承认没听懂、顶格反对、反问举证、预警后悔、自嘲接招。最后给你一个现场场景,逼你 30 秒内把三句话说圆。
🗣️ 现场:一次改名引发的 9 小时拉锯
/ section背景:NVIDIA 的 Alistair Popple 发出一个 26 补丁的 treewide 系列,补丁 23 把 dma_buf_attach() 改名为 dma_buf_sgt_attach()——这个 helper 永远只做 SGT(scatter-gather table,分散-聚集表)一种映射,名字里带上 sgt 让调用方的意图一眼可见; 系列同时引入可协商映射类型的新流程。 AMD 的 Christian König 不买账:他认为新 helper 的形态走错了路。两人从 10-27 晚上 20:07 一路辩到 22:54, 同线程还牵出 TegraDRM 一个既有 bug 的支线。 下面五段引用全部是真实邮件原句,每段末尾给出来源邮件,点开可逐字对照。
🗣️ 五个动作
/ section① 没听懂就直说,别装懂。
原句:Not sure I understand this comment...
语境翻译:这条评论我不太确定自己看懂了……
要点:Christian 一句 NO-GO 砸过来,Jason 没有急着反驳,先承认没跟上。 Not sure I understand 比 I don't understand 软一档:把「你没说清楚」的可能留在桌上,只认领「我没懂」这一半。 三个点的省略号是邮件里的自然停顿,口头说出来就是语速放慢、尾音收平。
同一招 Christian 后来也用了:I still don't see what you mean.(我还是没明白你的意思)——still 一字标明「你解释过了,但我这边还没通」,把继续解释的责任轻轻放回对方手里。
复述引导:合上原文,用 10 秒说出「我没跟上 + 请再讲一次」,不许用 sorry 开头——技术讨论里没听懂不是错,装懂才是。
来源:Jason Gunthorpe,10-27 20:39 北京; Christian König,10-27 22:28 北京
② 反对要顶格,范围要收窄。
原句:Sharing page/physical to be used with the IOMMU functions through DMA-buf is an absolutely hard NAK from my side.
语境翻译:把 page/physical(页/物理地址)经 DMA-buf 传给 IOMMU 函数用,我这边是绝对不行的。
要点:absolutely hard NAK 是内核评审里最重的反对——NAK 已经是否决,hard 再加锁,absolutely 顶到满格。 但注意后半句 from my side:否决的是我这条线,不是替整个社区宣判。 紧跟着他收窄范围:We still need to figure out how to do this between KVM, IOMMUFD and virtio so that it is limited to only those three.(这事怎么做我们还得在 KVM、IOMMUFD、virtio 之间解决,而且要只限这三家。) 顶格反对 + 精确划界,火气全在技术上,一点没泼到人。
复述引导:说一次「我坚决反对 X」,句尾必须跟一个边界——只允许谁、只在什么条件下。
来源:Christian König,10-27 20:11 北京
③ 用反问把举证责任推回去。
原句:Unless you want to see that open coded in ever driver using the more general functions, I'm not sure I see the alternative?
语境翻译:除非你想看到这段逻辑在每个调用方那里就地展开重写一遍,否则我不觉得还有什么别的办法?
要点:Christian 坚持「不该再多一个 attach 变体」,Jason 不直接说「你错了」,而是摊开代价反问: 砍掉这个 helper,26 个调用方就得各自把同一段代码 open code(就地展开、不封装)一遍。 Unless you want …, I'm not sure I see the alternative? 这个结构把「请你给一个更好方案」包装成了疑问句——球回到对方半场,话还说得客气。 (原文 ever driver 是 every driver 的笔误,邮件列表里很常见,引用保留原样,自己写别照抄。)
复述引导:对方否了你的方案,用「除非你能接受 <代价>,否则我看不到别的路?」反问一次——只摆代价,不评价人。
来源:Jason Gunthorpe,10-27 22:08 北京
④ 不喊「这不行」,改说「你将来会后悔」。
原句:I think this is something you'd regret down the road as it starts muddling up different concerns.
语境翻译:我觉得这条路过一阵子你会后悔,因为它会把不同的关注点搅在一起。
要点:Christian 提议「参数为 NULL 就默认匹配 SGT」,Jason 的反对没有落在「现在」——现在的确能跑——而是落在 down the road(往后、将来)。把反对从「你错了」换成「你将为此付出代价」,听的人更容易接住。 muddle up 是口语里「搅混、搞乱」的说法,比 confuse 轻、比 mix 贬义。 他还补了一刀可验证的标准:Implicitly doing things when other things are NULL is more indirect.(别的字段是 NULL 就隐式触发行为,太绕了。)——反对必须落到一条可检查的原则上,不能只说「我不喜欢」。
复述引导:挑一个你不同意的 API 设计,用「something you'd regret down the road because …」说一遍,because 后面必须跟一条具体后果。
来源:Jason Gunthorpe,10-27 22:44 北京
⑤ 被点名了?自嘲一句接住。
原句:Sure, I agree -- so let's say it's a bug on top of the baseline crimes TegraDRM commits :)
语境翻译:行,我同意——那就算它是 TegraDRM 日常「罪行」之上又多出来的一条 bug 吧 :)
要点:Jason 指出 TegraDRM 把 dmabuf 挂到自定义 iommu_domain「100% 违规」,作为 Tegra 维护者的 Mikko Perttunen 没有辩解,先 Sure, I agree 接住,再把自家驱动的历史包袱自嘲成 baseline crimes(底线级「罪行」)。 破折号加一个 :)——认错认得干脆,气氛一点不僵。会后他真的在删这条显式 IOMMU 路径:嘴上认了,手上也认了。
复述引导:下次你的代码被当众指出问题,先试这个句式:「同意 + 自嘲定性 + 已在处理」,三拍说完,不解释动机。
来源:Mikko Perttunen,10-27 21:40 北京
尾声:谁赢了?——到 22:54,Christian 的最后一封还是 Yeah. exactly that is a clear NO-GO from my side.(对,这恰恰就是我这边明确的否决。 见 10-27 22:54 北京)。 九个小时、十几封邮件,没人改口——但没有一句带火气。五个动作轮着用:没听懂就认、反对就顶格、代价就摊开、后果就预演、被点名就自嘲。 争论僵在技术上,恰恰是它健康的样子。
✨ 辅助彩蛋:三个能直接搬上会的词
/ section★ 写法、时间、查找——三个词各管一件事
✍️ 今日练习
/ column💡 显示答案
每日一句:Say you're lost, say your reason, ask for a better way.
仿写示范