不是“最佳实践”,而是“取舍智慧”。七条原则,帮你做出更清醒的技术决策。
回顾这些年做过的项目、分析过的协议、踩过的坑,我逐渐意识到:优秀的技术决策不是靠“灵光一现”,而是靠一套可复用的思维框架。我把这套框架浓缩为七条原则,它们贯穿了《权衡之境》全书的讨论。
这些原则不是教条,而是每次设计时的“检查清单”。
原则一:从“不做什么”开始
每个技术方案,最先应该明确的不是“要做什么”,而是拒绝什么。主动放弃的能力,定义了系统的边界和特色。
- NFC放弃长距离、高带宽,换来了物理层安全和极简协议。
- BLE放弃持续连接,换来了传感器数年的续航。
- MIPI放弃通用性,换来了99.4%的有效载荷效率。
- CAN放弃地址和重传,换来了硬实时确定性。
决策问题:“为了在核心场景做到极致,我愿意放弃什么?”
原则二:在三维空间中定位瓶颈
任何系统都有主导瓶颈。优化的第一步,是识别当前瓶颈在物理轴、信息轴还是控制轴。
| 轴 | 典型问题 | 瓶颈信号 |
|---|---|---|
| 物理轴 | 功耗、信号完整性、距离 | 电流高、误码率高、覆盖不够 |
| 信息轴 | 带宽、延迟、分辨率 | 速率不足、响应慢、精度不够 |
| 控制轴 | 调度、资源冲突、实时性 | 任务错过截止时间、优先级反转 |
决策问题:“当前卡住我们的,是物理限制、信息复杂,还是控制协调?”
原则三:硬件做硬件的事,软件做软件的事
硬件做确定、高频、简单的事;软件做灵活、低频、复杂的事。两者边界一旦模糊,系统就会陷入“软件太慢、硬件太死”的尴尬。
- USB 3.0:链路训练、均衡由硬件自动完成,设备类驱动由软件实现。
- CAN:位仲裁、错误计数器由硬件完成,报文解析和应用逻辑由软件实现。
- FMCW雷达:混频、FFT由硬件加速器完成,目标跟踪由DSP/软件完成。
决策问题:“这个任务,应该固化在硬件逻辑,还是保留在软件策略?”
原则四:用结构化冗余对抗不确定性
冗余不是浪费,是系统为生存必须支付的保险费。关键是要选择“对的冗余维度”。
| 冗余维度 | 对抗的不确定性 | 技术案例 |
|---|---|---|
| 时间冗余(重传) | 瞬时干扰、丢包 | USB ARQ、TCP重传 |
| 空间冗余(多天线) | 环境衰落、多径 | Wi‑Fi MIMO |
| 信息冗余(纠错码) | 比特错误 | LDPC、CRC、FEC |
| 网络冗余(多路径) | 节点失效、链路中断 | 蓝牙Mesh泛洪、Zigbee网状路由 |
决策问题:“当前面临的主要不确定性是什么?应该用哪种维度的冗余来对冲?”
原则五:解耦是为未来支付成本,耦合是为现在节省开销
解耦让系统灵活可演进,但即时成本更高(更多代码、更多接口、更多测试)。耦合让系统简单高效,但未来改造成本更高。
- USB 2.0:半双工耦合了收发方向,简单但升级难;USB 3.0解耦后带宽翻倍,复杂度指数增长。
- 操作系统:用户态与内核态解耦,代价是系统调用开销;但换来了进程隔离和安全性。
- 前后端分离:解耦带来独立部署的能力,但增加了网络调用和序列化成本。
决策问题:“这个耦合点,现在省下的钱,未来要花多少倍来偿还?”
原则六:抽象层是契约,不是实现细节
定义接口比实现更重要。稳定的接口是生态繁荣的前提,频繁变动的接口是技术债务的源头。
- 蓝牙HCI:接口稳定,手机厂商和芯片厂商可独立演进,生态爆发。
- USB设备类:HID、MSC等类协议二十年不变,即插即用成为现实。
- POSIX系统调用:稳定了几十年,应用可跨操作系统。
决策问题:“这个接口,十年后还能用吗?如果必须变,我的生态怎么办?”
原则七:性能优化的终极目标是让CPU“无事可做”
CPU应该只做“不得不做”的决策。所有能提前计算、能硬件卸载、能异步处理的任务,都应该从CPU的路径上移除。
- DMA:让CPU不用搬数据,专注于计算。
- 零拷贝:让数据流动变成引用传递,无需复制。
- 硬件加速器:让CPU不用计算FFT、不用执行LDPC译码。
- 事件驱动:让CPU不用轮询空转,只在有事时醒来。
决策问题:“这段代码,真的需要CPU亲自执行吗?”
七原则速查表
| 原则 | 一句话 |
|---|---|
| 1. 从“不做什么”开始 | 主动放弃,定义边界 |
| 2. 在三维空间中定位瓶颈 | 识别物理/信息/控制 |
| 3. 硬件做硬件的事,软件做软件的事 | 各司其职 |
| 4. 用结构化冗余对抗不确定性 | 冗余是保险费 |
| 5. 解耦是为未来支付成本 | 现在耦合,未来还债 |
| 6. 抽象层是契约 | 接口稳定 > 实现漂亮 |
| 7. 让CPU“无事可做” | 优化目标是卸载 |
写在最后
这七条原则不是我发明的,而是从NFC、蓝牙、Wi‑Fi、USB、CAN、MIPI、操作系统、SLAM……这些具体技术的反复咀嚼中长出来的。每一条背后都有十几个真实案例支撑。
它们不是“真理”,而是在特定约束下“好用的思维工具”。你可以根据自己项目的实际情况,增删、调整、甚至推翻某条原则——但前提是,你对为什么这么做有清醒的认识。
这就是《权衡之境》想要传递的东西:不是答案,而是提问的方法;不是教条,而是权衡的智慧。
本文是对《权衡之境》全书思想的总结。书稿已完成,出版在即。
七原则思维卡片已整理到 GitHub 仓库:https://github.com/jakegom/weighing-the-world
公众号(权衡之境)
——高翔,技术哲学作者,系统架构师。著有《权衡之境:一位工程师的技术哲学笔记》,专注技术决策的底层逻辑与思维模型。
