1 分钟阅读
你的 Bug 可能正是别人的功能
软件工程的魔幻定律(2)
Part I-II:架构与复杂度
Law of Leaky Abstractions:抽象总是有漏洞的
Joel Spolsky 在 2002 年提出这条定律:
“All non-trivial abstractions, to some degree, are leaky.”
抽象的作用是屏蔽复杂性。TCP/IP 让你不必关心数据包丢失;ORM 让你不必手写 SQL;云存储让你不必管磁盘故障。但当问题出现时,你还是得理解被屏蔽的那一层。
用 ORM 遇到了 N+1 查询问题,你得懂 SQL。用 TCP 做实时通信出现延迟抖动,你得懂网络层。这不是 ORM 或 TCP 设计得差,而是抽象的本质决定的。
这条定律的实用结论不是"别用抽象",而是"了解你依赖的抽象层的内部机制"。 知道什么时候抽象会失效,比永远不用抽象要务实得多。