程序员说话,为什么老是让人听不懂?
工程师花了十分钟,讲清楚了一个技术方案的所有细节——架构图、接口设计、边界情况处理……
有一种会议上的常见场景:
工程师花了十分钟,讲清楚了一个技术方案的所有细节——架构图、接口设计、边界情况处理……
然后产品经理问:"所以,这个方案能解决我们的问题吗?"
工程师愣了一下。
他刚刚说的十分钟,恰好没有回答这个问题。
这不是个案。我见过太多技术很强、但表达让人头疼的工程师。
他们说的每一句话都是对的。但听完之后,你不知道他想说什么。
这不是他们不会说话,而是没有人教过他们怎么跟非技术人说话。
技术表达的三大通病

通病一:从细节开始,而不是从结论开始。
工程师的思维习惯,是先把推导过程说清楚,然后得出结论。这在写代码的时候非常有用——逻辑清晰,推导严密。
但在对话里,这种习惯是灾难性的。
因为你的听众,在听到结论之前,不知道你的铺垫是为了什么。他们没有耐心等你推导完,因为他们不知道你要往哪里走。
通病二:说的是过程,而不是影响。
"我们把缓存层从 Redis 升级到了集群模式。"
这句话对工程师有意义,但对产品经理或业务负责人没有意义。他听到的只是一个技术操作。
他真正想知道的是:这对他有什么影响?是更快了?更稳了?还是需要他做什么配合?
通病三:说的是问题,而不是选项。
"这个需求技术上很难实现。"
这句话说了等于没说。听的人不知道"很难"是多难,也不知道下一步该怎么办。
更好的方式是把问题转化成选项:有哪几种做法,各自的代价是什么,你建议哪种?
结论先行:最有效的一个改变
如果你只能改变一件事,那就是:先说结论,再说理由。
不是:
"我们调研了方案 A 和方案 B,方案 A 的优点是……缺点是……方案 B 的优点是……综合考虑下来,我们建议用方案 B。"
而是:
"我建议用方案 B,主要原因是 X 和 Y。如果你想了解我们为什么没选方案 A,我可以展开说。"
前者让听众在信息不完整的状态下一直等待,后者让听众先知道你在说什么,再决定要不要深入。
这就是所谓的"金字塔原则"——结论在顶,支撑理由在底部。

在技术表达里,它的实际效果是:你说完第一句话,听众就知道你想说什么了。
把技术翻译成影响
很多工程师不擅长这件事,但它其实很简单——把技术操作替换成它对受众的意义。
技术语言 → 业务语言的翻译模板:
- "性能提升了 30%" → "这个页面的加载速度快了,用户流失率预计会降低"
- "系统可用性从 99% 提到了 99.9%" → "每个月故障时间从 7 小时降到了 43 分钟"
- "重构了数据层" → "以后加新功能的速度会快很多,不容易出 bug"

你不需要假装听众不关心技术细节。你只需要先给他一个他能理解的结论,他如果感兴趣,自然会问细节。
一个实用的表达结构
面对任何需要你做技术说明的场合(会议发言、方案汇报、进度更新),可以用这个简单结构:
BLUF 模型(Bottom Line Up Front):
- 结论:我要说的核心观点是什么?(一句话)
- 原因:为什么是这个结论?(2-3 个关键理由)
- 影响:这对听众意味着什么?(他需要知道什么或做什么)
- 行动:下一步是什么?谁来做?(如果有的话)

举个例子:
"这个方案我建议不采用(结论)。主要原因是它在高并发下有数据一致性的风险,上线后出问题排查难度很高(原因)。如果我们现在上,可能在大促期间出故障(影响)。我建议我们先做个压测,下周给你结果再决定(行动)。"
这个结构可以用在任何场合,而且说完你会发现:别人对你说话的感受变了。
防御性表达的问题
还有一类表达问题,很多工程师没意识到:防御性表达。
比如:
- "这个 bug 不是我们这边的问题。"
- "上次需求改了,所以现在才这样。"
- "这个功能本来就很复杂,做成这样已经很好了。"
这些话说的可能是事实,但听起来像是在撇责任。
更好的方式是把防御变成推进:
- "这个 bug 的根源在 A 模块,我们已经在排查,预计明天能给方案。"
- "因为上次需求调整,现在有一些地方需要处理,我来拆一下任务。"
- "这个功能有一些复杂度,目前版本覆盖了核心场景,还有几个边界情况我列出来,我们讨论一下优先级。"
从"解释为什么这样"到"说明下一步怎么做"——这一个转变,会让你在团队里的形象发生质变。
最后
没有人天生会跟非技术人说话。
工程师的训练环境是代码和逻辑,在这里,细节是美德,推导是标准。
但沟通的环境不一样。在沟通里,你的职责不是展示你的推导过程,而是帮对方快速得到他需要的信息。
结论先行,翻译成影响,把问题变成选项。
这三件事做好,你会发现一件奇怪的事:你说的话少了,但别人觉得你说得更多了。
你在表达上,最常遇到哪种困难?评论区说说——