【笔记】抽象泄漏

这篇文章源自Joel Spolsky, 我看的是中译文版本

一个例子: TCP试图提供一个完整的抽象机制, 想隐藏底下不可靠的网络, 但是很难做到完备, 有时候网络会渗漏越过抽象机制, 比方说网线断了, 又或者网卡超负载了.

结论: All non-trivial abstractions, to some degree, are leaky. 即 所有重大抽象必有泄漏.

再列举一些证明:

  • SQL 语言抽象化查询, 仍然需要人工做一些优化, 例如著名的"where a=b and b=c and a=c".
  • C++ 对 string 的 + 运算符重载, 却无法实现"a" + "b".
  • 开车时碰上下雨天即便有雨刷(对天气的抽象), 也必然开的慢.

so, 抽象机制虽然替我们节省了工作的时间, 不过学习的时间是省不掉的. 即使我们拥有越来越高级的程序设计工具, 抽象化也做得越来越好, 要成为一个纯熟的程序员却是越来越难了.

作者的结束语: 抽象泄漏法则正在拖垮我们.

个人观点:

  1. 避免过度设计, 让代码更加扁平化, 永远不要为了暂时看不到的收益而做设计, 一般这种收益未来也不会有, 为了炫耀技巧而 coding 则更加可耻了.
  2. 抽象必有泄漏, 从哲学角度上来说, 不正也体现了"人无完人", "阴晴圆缺"的思想么, 何必太过在意. 对于即拿即用的组件, 保持一份谨慎的态度就好.