抽象必漏:TCP、SQL 与 C++ 字符串的同一课
Joel Spolsky 从 TCP 讲起:TCP 承诺可靠、有序、不损坏的传输,底层却是会丢包、乱序、损坏的 IP,靠重传和重排把不可靠伪装成可靠——这就是抽象。文章的核心论断是:所有非平凡的抽象都会泄漏。二维数组按行还是按列遍历,缺页次数可能差出几个数量级;逻辑等价的 SQL 多加一句 a=c 可能快上千倍;C++ string 类再努力也写不出 "foo" + "bar",因为字面量永远是 char*;NFS 挂载的 home 目录在服务器宕机时会让 .forward 邮件直接丢失;ASP.NET 用一段 onclick JavaScript 假装超链接能提交表单,用户禁用 JS 就全线失效。结论对工程师有实际后果:抽象省下写代码的时间,不省学习的时间;工具层次越高,出问题时越需要往下钻。适合做系统、工具链和框架的一线工程师。