# 《编程智慧：编程鬼才的经验和思考》（The Kollected Kode Vicious）书评

* 原文链接：[A review of The Kollected 编程智慧：编程鬼才的经验和思考](https://freebsdfoundation.org/wp-content/uploads/2022/03/reuschling_practical_ports.pdf)
* 作者：**BENEDICT REUSCHLING**

亲爱的 Practical Ports，

> 我是否应该抽时间阅读 George V. Neville-Neil 的《The Kollected 编程智慧：编程鬼才的经验和思考》，而不是一本关于我工作所需的新编程语言的书？我没有太多时间阅读，所以需要谨慎选择。我也不明白，像 KV 这样使用笔名而非真名的人，如何能被认真对待，特别是当他们给别人提供如此主观的建议时。
>
> —— 一位时间不多的怀疑读者

亲爱的怀疑者，

你是否听说过 Alice Addertongue 或 Silence Dogood？或者 Poor Richard 有没有让你想起什么？这些都是本杰明·富兰克林（Benjamin Franklin）使用的笔名。在富兰克林的时代，笔名和漫画形象是非常常见的，尽管通常很容易知道是谁在背后写作。这些不同的漫画形象不仅让富兰克林能够为他的读者（即他自己报纸的读者）提供多角度的看法，还允许他运用夸张、讽刺和奇思妙想来娱乐读者并影响他们的观点。因此，使用化名和人格写作并不是新鲜事，实际上，既然你在给 Practical Ports 写信，你也是在参与这种情形。

在我们讨论书籍之前，让我们先解决你抽出时间读书的问题。“每个人都有时间。别再看该死的《迷失》了！”—— Gary Vaynerchuk，2008 年在 Web 2.0 Expo NY 说的 <https://www.youtube.com/watch?v=EhqZ0RU95d4>

不过，好吧，撇开这个，我可以理解如今时间很难抽出。而且，能读的书毕竟有限（如果是好书的话，更加难得！）。无休止地刷新闻或社交媒体不算是阅读，陷入 Youtube 的无尽循环也不算。书籍仍然是知识和娱乐的相关来源——或许现在比以往任何时候都更为重要——这就是为什么我抽时间来审阅这本书。即便在充斥着电子信息的互联网海洋中，翻开纸质书页仍然能吸收永恒的智慧并享受乐趣。

现在，关于你是否应该为《编程智慧：编程鬼才的经验和思考》这本书腾出一些时间的问题。对于尚未接触 KV 专栏的读者，我应该解释一下，这本书是 KV 在 ACM Queue 列刊中同名专栏的合集，按照主题分组。作者多年写作这些专栏，并将最好的文章收集在书中，按主题进行组织，并附上简短的介绍。至于他是如何让计算机科学巨匠唐纳德·E·克努斯（Donald E. Knuth）为书写序的，或许永远是作者的秘密。简直是受封了！我非常喜欢章节开头的引言，这里有不少能够概括你即将阅读的内容的引用。（例如：哦，Bullwinkle，那招永远不管用！— Rocky J. Squirrel）

如果你从未读过 KV 的专栏，要知道，它们遵循的是传统的问答/建议专栏格式——这个格式古老得可以追溯到本杰明·富兰克林的解构和重构方法，当然，也可以追溯到苏格拉底。书中的信件/问题呈现的是一个困惑或困扰的人向 KV 寻求建议的情境。这些问题既真实又相关，常常和我从学生那里听到的类似。一些较后的专栏显然是基于真实的信件，而一些较早的专栏则是代笔写作。在所有情况下，答案/建议都会回应问题，解释、化解、解构、重组或反思假设，同时为主题提供新的见解。提供的意见通常是出于良好意图，并给出所期望的建议。这些信件中的许多（如果不是全部的话）可能以禅宗故事中常用的词语结尾：“于是，学生得到了启发。”

查看目录，你会看到以下几组主题：

* 手头的代码 —— 讨论程序员（像你）必须面对的日常烦恼和思考——从分配过多内存、异常处理（或缺乏处理）到正确的日志记录和编码风格讨论。本章主要吸引程序员，对于那些偶尔使用计算机、好奇为什么互联网不起作用的用户不太适合。
* 编程难题 —— 探讨更为哲学性的问题，比如什么是好的编程语言，如何避免无休止地包含文件的意大利面条式代码，为什么测试很重要，以及代码扫描器和调试策略等元主题。所有这些都值得一读，如果你有多年的编程经验，你肯定会在其中找到一个熟悉的故事。如果你曾问过自己为什么现在的事情是这样，那接下来的章节将为你解答。
* 系统设计 —— 讨论我们日常使用的系统设计中（大多数是错误的）选择。永恒话题如身份验证与加密、跨站脚本攻击、钓鱼和感染（后者指的是计算机系统），以及 UI 设计将让你频频点头同意，同时也会对糟糕设计的典型例子摇头。我留给你自己去发现为什么 Java 会出现在这一章节。
* 机器对机器 —— 讨论延迟、扩展失败、协议设计以及日益增长的标准列表。如果你了解这位作者或知道他，那么你不会感到惊讶，这一部分并不是在谈论网络如何连接这些机器。如果你觉得这很让人不安，那就等着读下一部分吧……
* 人类对人类 —— 思考如何命名你的主机，别让你的自尊心介入，代码面试问题，以及“油漆小棚”现象（即无关紧要的事物成为争论焦点）。人们为计算带来了许多有趣的特质——如果它们只是好特质就好了。

在每一章中，作者通过故事揭示洞察力和经验，进行警示和教育。尽管这些故事常常带有些许抱怨（或许是因为看到了太多类似的情况），但没有一页让你觉得事情已经无望。相反，书中充满了实用的建议，夹杂着个人的偏好和推荐，并且始终以机智和幽默的方式传达。我能想象这本书有两个很好的用途。一个是作为轻松娱乐的阅读，另一个是作为参考书。专栏内容足够简短，可以在短暂的休息时（搭配你喜欢的饮料）或睡前（当然，不包括噩梦）阅读。把书放在容易拿到的地方，这样当有问题时，你可以迅速翻阅相关章节。另一个想法是，当争论发生或设计决策即将做出时，把它交给你的同事和同行。“让我们翻到《Vicious》书中，提醒自己什么是不该做的”，当讨论陷入僵局，需要新视角时，或许可以这样说。经验丰富和新来的同事们都会在这些专栏中找到有趣且相关的内容，他们会一边点头表示认同（我也经历过），一边微笑着想起那些有趣的轶事。

现在，回到你是否应该在有限的阅读时间里选择《The Kollected 编程智慧：编程鬼才的经验和思考》而不是一本新编程语言书籍的问题，我会说：“是的。”我认为你应该阅读 KV 的书，但不要期望从中找到“使用这个巧妙的代码片段让代码更快”或“使用 Emacs 作为编辑器会让你生产力翻倍”之类的建议。另一种编程语言可能会在简历上看起来不错，但最终，这些不过是行业工具罢了。我们所做的事情远不止编写代码！这本书将为你阐明这一点，展现这个行业的喜怒哀乐。你的阅读体验可能不同，但我认为阅读这本书并内化其教诲，会对你大有裨益。最后让我用另一句引言结束：

> “去年の癡僧 ち そう今又来たる（去年癡僧今又来）”
>
> ——日本禅宗诗人良寛大愚

***

**PP BENEDICT REUSCHLING** 是 FreeBSD 项目的文档提交者，也是文档工程团队的成员。他是 FreeBSD 基金会董事会的副主席。过去，他曾在 FreeBSD 核心团队服务了两个任期。他在德国达姆施塔特应用科技大学管理一个大数据集群，同时为本科生教授“开发者的 Unix”课程。Benedict 还是每周 bsdnow\.tv 播客的主持人之一。
