# 1. 内核恐慌开播！

内核恐慌 · 2014-10-12

<https://lib.pan.icu/3d4f6a45-7049-4b46-b57f-d90f3a12c988>

《内核恐慌》首期节目从Kernel Panic概念切入，详细对比了不同编程语言的异常处理哲学：C和Go采用错误返回值，强调每一步可控但代码冗长；Python和Java则依赖异常抛出，追求逻辑简洁却牺牲控制流可预测性。主持人批评Java的checked exception徒增复杂性，并延伸至系统软件设计，以systemd为例剖析“大一统”架构与Unix“做一件事并做好”理念的冲突，同时穿插了输入法、行车记录仪等实际开发中的折衷选择。

## Questions this episode answers

### 什么是Kernel Panic？它和Windows蓝屏有什么关系？

Kernel Panic 指操作系统内核遇到无法恢复的严重错误，必须停止运行。在 Mac OS X 上表现为多国语言提示的关机画面（俗称“五国”或“六国”），Linux 下类似。Windows 对应的是“停止错误”（stop error），即著名的蓝屏（blue screen of death）。Rio 在节目中解释，当系统发生内存访问越界等底层故障时，内核为了保护系统完整性会触发 panic，就像内核“恐慌”了一样。

[3:48](https://lib.pan.icu/3d4f6a45-7049-4b46-b57f-d90f3a12c988?t=228000)

### 为什么 Go 语言抛弃了异常处理，改用返回错误码？这样做有什么优缺点？

Rio 和吴涛认为，异常处理（exception）容易打乱程序的线性控制流，像 goto 一样使代码难以预测。Go 回归 C 风格，要求每次调用后检查错误值（if err != nil），迫使开发者将错误处理融入正常逻辑，程序在长时间运行中更健壮。缺点是产生大量样板代码。而 Python 等语言推荐用异常分离正常和异常流程，代码更简洁，但可能隐藏风险。

[25:28](https://lib.pan.icu/3d4f6a45-7049-4b46-b57f-d90f3a12c988?t=1528000)

### systemd 的争议有哪些？为什么它引发了社区的强烈反对？

吴涛和 Rio 讨论到，systemd 试图统一 init 和服务管理，但设计过于激进复杂，违背 Unix“一个工具做一件事”的哲学。它将 PID 1 变得臃肿，增加出错概率，而 init 崩溃会直接导致 kernel panic。此外，systemd 通过主流发行版成为事实标准，带有政治色彩，令喜欢简洁和可验证代码的开发者不满，甚至引发对维护者的人身攻击。

[35:28](https://lib.pan.icu/3d4f6a45-7049-4b46-b57f-d90f3a12c988?t=2128000)

## Key moments

- **[0:00] 开场**
  - [0:06] “北京时间百分号H点百分号M分”
  - [1:28] 《内核恐慌》定位为比《IT公论》更程序员向、不解释术语的节目
  - [3:26] “如果你问什么是Kernel Panic，那你就输了”
- **[5:29] 折腾**
  - [9:19] 吴涛换用Mac的主因是Linux桌面太折腾
- **[11:47] 社会信任**
  - [14:14] 德国税局因抱怨被迫开发Linux报税客户端，Mac用户仍需自购
  - [16:41] 吴涛分享加拿大驾照密码仅凭号码和名字电话就能获取
  - [18:57] Rio对比高信任度社会与中国等人口大国，后者更需注意安全
  - [21:14] 行车记录仪在低信任社会流行，在高信任国家罕见
  - [22:22] Rio预测行车记录仪将因世界走向不信任而全球普及
  - [23:34] 吴涛表示更相信机器而非人，人不predictable
- **[24:52] 错误处理**
  - [25:57] Go语言抛弃异常，全部通过返回error处理错误
  - [26:43] Rio批评异常处理像Goto，被高估且导致控制流不可预测
  - [28:28] 吴涛对比Python用异常简化错误处理与Go大量if err != nil样板代码
  - [29:34] 吴涛总结两种错误处理哲学：错误作为逻辑一部分 vs 正常与异常分离
  - [31:01] Rio批判Java的checked exception要求方法声明所有可能异常是不实际的反模式
  - [32:20] Rio提出务实错误处理：处理可预见错误，不可预见的就让它crash
- **[35:23] systemd**
  - [36:11] systemd主要维护者因收到死亡威胁和讽刺歌曲而发声
  - [37:19] 吴涛质疑systemd让PID1过重不符合Unix哲学“Do one thing well”
  - [38:47] 吴涛推荐轻量init程序如DDB，代码少可穷举错误更可靠
  - [40:29] Debian 8将换用systemd，作为Debian用户的Rio表示不爽
- **[43:14] 错误提示**
  - [43:14] Rio批评Windows严重错误弹窗显示十六进制地址对用户无意义
  - [44:40] 吴涛吐槽Windows Vista安全确认对话框训练用户见框就点OK
  - [46:14] 吴涛惊讶自己两月未改Mac安全设置“允许App Store和认证开发者”且未感不便
  - [47:16] Rio故意保持Mac默认安全设置以辨别程序是否被签名
- **[50:08] 输入法**
  - [50:24] 吴涛和Rio推荐鼠须管为中文界最好输入法，但存在无法输入德语umlaut的bug
  - [53:15] Rio面试时怯问能否用Python而非C++，一秒写出答案
- **[53:46] 尾声**
  - [55:02] “普通人能听懂，但普通人一般不会来听的IT播客节目”
  - [55:50] 吴涛错读“戛然而止”的“戛”字被Rio纠正

## Speakers

- **Rio** (host)
- **吴涛** (host)

## Topics

编程语言, 操作系统

## Mentioned

C (product), Go (product), Java (product), Linux (product), Mac OS (product), Python (product), Swift (product), Windows (product), systemd (product), 鼠须管 (product)

## Transcript

### 开场

**Rio** [0:01]
3，2，1， 开始 。

**吴涛** [0:03]
我们其实要做一下开场还是要怎么 ？ 先介绍一下 ？

**Rio** [0:06]
哎我有一个梗 ， 嗯 ， 我想想啊 ， 北京时间百分号 H 点百分号 M 分 ， 您现在收听到的是 《 内核恐慌 》。

**吴涛** [0:18]
这梗是什么 ？

**Rio** [0:19]
就 ， 你因为你别看 ， 你看 ， 一般人一般做广播的时候 ， 人们会说 " 北京时间 15:46"， 然后我说 " 北京时间 "，但是你会意识到这是一款 podcast， 你根本不知道听众是在什么时候听这个 。

**吴涛** [0:35]
对啊 ， 没有意义了 。

**Rio** [0:36]
Podcast。 所以我说 " 北京时间 "， 然后愣一下， 说 " 呃 ， 百分之好 ， 百分号 H 点百分号 M 分 "。

**吴涛** [0:41]
所以这是一个 placeholder， 对吧 ？

**Rio** [0:43]
对啊 ， 就是那个 date format， 百分之 H， 百分之 ， 百分号 H， 百分之好 ， 百分号 M。

**吴涛** [0:50]
这是什么 ？

**Rio** [0:51]
呃 ，string。

**吴涛** [0:54]
String time format， 对吧 ？

**Rio** [0:56]
对啊 。

**吴涛** [0:57]
啊 ， 大家好 ， 这里是我们新开的一档 ， 呃 ， 播客节目 ， 呃 ， 叫做 《 内核恐慌 》，Kernel Panic。

**Rio** [1:05]
Kernel Panic。

**吴涛** [1:06]
呃 ， 然后这里的嘉宾呢 ， 就是 ， 呃 ， 我 ，Rio，以及吴涛 。 大家可能听 ， 之前听 《IT 公论 》 的时候他已经来过几次了 。

**Rio** [1:15]
对 ， 呃 ，其实咱们两个不能算嘉宾吧 ， 咱们两个应该算 。

**吴涛** [1:18]
主播 ， 对吧 ？

**Rio** [1:19]
理论上是 。

**吴涛** [1:20]
Host。

**Rio** [1:20]
我们假如这个 podcast 可以积累到 ， 呃 ， 足够多的听众的话 ， 我们应该会一直做下去 ， 所以我们都是 host。

**吴涛** [1:28]
对 。 呃 ， 先 ， 我们先解释一下为什么要做这么一档节目哈 。

**Rio** [1:34]
对 ， 我 ， 我听说啊 ， 就是我听 Lawrence 说是 ，有 ，有部分听众认为 《IT 公论 》 不够 hardcore。

**吴涛** [1:41]
对 ，因为 ， 呃 ， 湿 ， 呃 ， 湿货 ，不对 ， 水货 ， 湿货 ， 哈哈 ， 湿货太多 ， 干 ， 干货比较少 ， 然后大家可能会比较抱怨 。

但是其实我想了一下， 你说就我们两个聊 ， 就纯聊干货估计也不现实 ，也会夹杂很多 ， 呃 ， 湿货 ， 丝货 ，以及水货在里面 ， 我觉得 。

**Rio** [2:02]
嗯 ，而且我觉得就是 ，somehow 在中文 IT 圈里面 ， 干货实在是太多了 。

**吴涛** [2:08]
啊 ？ 你有这感觉吗 ？

**Rio** [2:10]
有 ，也挺 ， 挺有这样感觉 ， 就是我 ， 就我总觉得缺一些比较轻谈的部分 。

**吴涛** [2:18]
嗯哼 。

**Rio** [2:19]
当然也有可能是跟我们读的 ， 我们日国跟每个人的日常阅读有关 ， 尤其我总是读那些比较干的部分 。

**吴涛** [2:26]
嗯哼 。

**Rio** [2:27]
我觉得听听你们的湿货挺好的 ， 虽然只 ， 我只是在 ， 对 ， 比如说通勤的路上听 ，但 。

**吴涛** [2:32]
对 。

**Rio** [2:33]
听听湿货挺好的 。

**吴涛** [2:34]
Okay， 所以有一个问题就是 ， 那我们这个节目和 《IT 公论 》 有什么区别呢 ？ 刚才讲了都是很多水分在里面哈 ， 那可能我们这个节目的定位和选题上会更加偏向于 ， 呃 ， 比如说像程序员啊 ， 开发者啊 ， 这类的东西 ，因为刚好我和吴涛都是这个做 ， 做这个相关行业的哈 。

**Rio** [2:56]
对 ， 我觉得可能比较重要的一个区别就是在 《IT 公论 》 里面 ， 呃 ， 你们会假设听众听不懂一些东西 ，而我们则假设听众是能听懂大部分内容的 。

就我们不会去解释一些名词 ， 或者是解释一些术语 ， 或者是做背景介绍之类的 ， 我们就直接开始讲 ，而且会比较 ， 呃 ，不太顾及听众的感受 。

**吴涛** [3:20]
对 ， 所以 ， 所以你看我们这个播客的名字叫做 《Kernel Panic》， 呃 ， 如果你问什么是 Kernel Panic， 呃 。

**Rio** [3:26]
那你就输了 。

**吴涛** [3:27]
对 。

**Rio** [3:27]
那你就不适合听这个节目 。

**吴涛** [3:31]
哈哈哈 。 哎 ，不过 ，不过其实你在提纲里面也写了为什么要解释一下的嘛 。

**Rio** [3:35]
对 ， 毕竟还是要解释 ， 就是 《 内核恐慌 》 来自于 Kernel Panic。 呃 ，Kernel Panic 我相信如果你不是一个初出茅庐的 ， 呃 ， 计算机专业的本科生 ， 那你应该是知道什么是 Kernel Panic。

呃 ， 就是如果你 ever u， 呃 ， 用过 ， 呃 ，Linux 或者是 Mac OS 的话 ，而且你也足够的 ，有足够的不幸运曾经看到过 ， 呃 ，Mac OS 出现过一个俗称五国 ， 啊 ， 现在已经是六国了 ， 还是七国的画面 ， 就是背景是一个大大的关机的符号 ， 然后用 ， 呃 ， 五种国家的语言写着 ， 呃 ，Mac OS 10 遭遇到了一个不可预知 ， 或者是 whatever， 就是很难搞定的问题 ， 我不得不关机了 。

**吴涛** [4:21]
对 。

**Rio** [4:22]
那么在这种情况下 ，其实我们说 ， 呃 ，Mac OS 操作系统的 Kernel，也就是它的内核 ， 呃 ， 出现了 Panic。

**吴涛** [4:30]
可能如果听众朋友没有用过 Mac 的话 ， 用 Windows 时代就是那个叫什么 ， 蓝屏啊 ，Blue Screen of Death。

**Rio** [4:37]
Windows 那个叫做 ， 呃 ， 专业术语叫做 stop error， 就是停止错误 。

**吴涛** [4:42]
嗯哼 。

**Rio** [4:42]
就是这个错误如此严重以至于它必须停下来了 。

**吴涛** [4:46]
嗯哼 。

**Rio** [4:47]
对 ， 俗称蓝 ， 呃 ， 叫什么 ， 呃 ， 中文叫蓝屏啊 。

**吴涛** [4:51]
对 。

**Rio** [4:51]
英文叫做 ， 呃 ，the blue screen of death。

**吴涛** [4:54]
呃 ， 蓝色死亡屏幕 。

**Rio** [4:56]
蓝色的死亡屏幕 。

**吴涛** [4:57]
哈哈哈 。

**Rio** [4:59]
对 。

**吴涛** [5:00]
呃 ， 那 ， 那个 Mac 上还有一个说法哈 ， 叫做那个什么 ，beach，a spinning beach ball of death。

**Rio** [5:06]
Yeah, spinning beach ball of death。

**吴涛** [5:08]
这个 。

**Rio** [5:08]
但是这个其实并不对等 ， 我觉得 ，因为 spinning beach ball of death 不一定会导致 Kernel Panic。

**吴涛** [5:14]
对 ， 那个只是系统停止响应嘛 。

**Rio** [5:17]
对 ， 它只 ， 通 ， 通 ， 它通常只是 ， 呃 ，在用户层的一个进程 ， 呃 ， 导致 UI 不能更新才会出现 ， 呃 ，beach ball of death。

**吴涛** [5:29]
对 ， 所以其实我最 ， 最近还遇到这么几个事情啊 ， 就是那个 ， 我发现现在 Mac 上最 ， 最容易出现这个问题就是 Safari，不 ，不是那个 ，Finder 吧 。

### 折腾

**Rio** [5:40]
啊 ， 真的吗 ？

**吴涛** [5:40]
嗯哼 。

**Rio** [5:41]
我用 Finder 从来没有出现过 。 你 。

**吴涛** [5:43]
我 。

**Rio** [5:44]
你难道经常遭遇 Kernel Panic 不可能吗 ？

**吴涛** [5:46]
不不不 。

**Rio** [5:47]
还是 。

**吴涛** [5:47]
就是不 ， 那个 spinning ball。

**Rio** [5:49]
Okay。

**吴涛** [5:49]
呃 ， 那个 ， 主要的问题是我家里有一个 NAS，NAS 就是那个外置 ， 呃 ， 那个网络硬盘嘛 ， 然后它是通过那个 Finder 的那个 share 的那个 tab 去访问的嘛 ， 然后 。

**Rio** [6:01]
所以是在等待网络 IO 的时候导致的 。

**吴涛** [6:03]
对 ， 会很慢 ， 然后它 ， 我觉得是这个 Finder 写得不好的地方 ， 它 ， 它这里是一个阻塞的一个过程 ， 就是你一旦 ， 你 ， 你看那个 NAS 它是会 ， 它是一个机械式硬盘嘛 ， 然后你如果你一段时间不用的话 ， 我 ， 它是设置了默认是会 ， 就停转的嘛 ， 就省电嘛 。

**Rio** [6:19]
嗯哼 。

**吴涛** [6:20]
然后 。

**Rio** [6:20]
哎我 ， 我也遇到过类似的问题 ， 就是我 ，而且这不 ， 甚至不是通过 NAS， 我在接一个外接硬盘的时候会导致 。

**吴涛** [6:27]
因为 U 盘也会这样 ， 对吧 ？

**Rio** [6:30]
对 。

**吴涛** [6:30]
对 ， 我 。

**Rio** [6:30]
然后我的解决方案是 ， 呃 ， 做一个 chrome tab， 然后每隔五分钟去 LS 一下这个硬盘 。

**吴涛** [6:37]
就保 ， 就保持它一直运转嘛 。

**Rio** [6:40]
对 。

**吴涛** [6:41]
那这样会很吵啊 。

**Rio** [6:43]
呃 ， 还好吧 。 你的 NAS 难道不是放在一个不会吵到的地方吗 ？

**吴涛** [6:47]
我 ， 我很远 ， 另外一个房间 。

**Rio** [6:48]
对啊 ， 所以无所谓嘛 。

**吴涛** [6:50]
不 ，但是你的那个 U 盘就不行了 ，U 盘肯定跟电脑连在一起的嘛 。

**Rio** [6:55]
嗯 ， 我倒是没有遇到过这个问题 ， 就是我是把那个移动硬盘塞在抽屉的最里面 ， 然后它只要转起来我也听不到 ，其实 。

**吴涛** [7:05]
哦 ， 你这样设置的应该好 ，因为我都是摆在外面的 ， 我这个桌子是没有抽屉的 ， 所以 。

**Rio** [7:09]
对 ， 就是我没有找到怎么样才可以设定说这个移动硬盘 ， 或者它根本就是一个内置的功能 ， 就是它会自动停下来省电 。

**吴涛** [7:19]
嗯哼 。

**Rio** [7:19]
然后导致第一次访问的时候会有一个非常慢的过程 ， 那我就干脆用这种暴力的方法 ， 让它根本不要停下来 。

**吴涛** [7:28]
我 ， 我记得在那个 Linux 上是可以设置用那个什么 pmset 这个工具吧 ， 好像叫什么 ， 一个什么玩意儿 ，有一个命令行的工具在 Linux 上可以设定不让这些硬盘就停下来 。

**Rio** [7:41]
呃 。

**吴涛** [7:42]
但我不太记得 。

**Rio** [7:43]
省电功能 ， 对 ，anyways， 应该是可以设定的 ，但是我当时没有找到 。

**吴涛** [7:48]
对 ， 所以 ， 所以你还有很多时候用那个外接硬盘吗 ， 现在 ？

**Rio** [7:52]
现在没有了 ， 现在我可能会 ， 呃 ， 买一个那个时间胶囊 。

**吴涛** [7:58]
哇 ， 你真的要买那个吗 ？

**Rio** [8:00]
对 ， 哈哈哈 ， 挺二的 ，不过我觉得就是越 ， 人变得越来越懒了嘛 ， 如果能花钱解决问题 ， 可能就不愿意再去 ， 再去自己动手了 。

**吴涛** [8:12]
嗯 。

**Rio** [8:12]
或者说我希望能够把动手的精力留在其他部分 。

**吴涛** [8:16]
耶 ， 这个不错 ， 时间 。

**Rio** [8:18]
对 ， 我前两天其实在网上看到了一个 ，在 Hacker News 上面的评论区看到一个 ， 一条新闻 ， 就是有一个人， 呃 ，在 GitHub 上公布了一个 ， 一个脚本 ， 自动的把 Mac 的很多设置设定为 ， 就是加引号的 " 更易用 " 吧 。

**吴涛** [8:37]
嗯哼 。

**Rio** [8:37]
然后有一个人评论说 ， 呃 ， 这些整天倒腾电脑的人就好像 ， 呃 ， 就像 car guy， 就是摆弄汽车的人一样 。

**吴涛** [8:47]
改装的 。

**Rio** [8:48]
把汽车的很多 ， 对 ， 把汽车的很多部分改装掉 ， 来获得一点点微不足道的性能提升 。

**吴涛** [8:53]
嗯哼 。

**Rio** [8:54]
然后他说 ， 我就很恨这种人。

**吴涛** [8:56]
嗯哼 。

**Rio** [8:57]
然后 ，但是我就想说 ，其实我们每个人在每个阶段 ，在某一个阶段可能都是这样的人， 就是会拼命的去摆弄这个 ， 折腾这个电脑 ，但是可能现在是折腾不动了 ， 或者是希望能够去折腾其他的东西 ， 所以就觉得 ， 如果能够 ， 呃 ，有一个现成的而且比较好的解决方案的话呢 ，不妨就用它 。

**吴涛** [9:19]
对啊 ，其实我也 ， 我也是我当初为什么换用 Mac 的一个主要原因哈 。

**Rio** [9:24]
嗯哼 。

**吴涛** [9:25]
就是在换 Mac 之前 ， 我大概用了可能几年的时间的那个 Linux 桌面嘛 ， 就是 Ubuntu 的跑的桌面系统 ， 啊 ， 确实太折腾了 。

**Rio** [9:34]
对 ， 我觉得可能就是因为我不停的折腾它 ， 后来我是在 Windows 里面装了一个虚拟机 ， 然后在虚拟机里面装了可能四五个 Linux， 然后， 嗯 ， 一开始是觉得怎么都不能找到一个可信的 ， 呃 ， 桌面环境 。

**吴涛** [9:55]
嗯哼 。

**Rio** [9:55]
到后来就变成了觉得怎么都不能找到一个可信的 Window Manager。

**吴涛** [10:00]
嗯哼 。

**Rio** [10:01]
就是我记得那个时候用 ， 用 i3 还是用一个叫做 ， 呃 。

**吴涛** [10:07]
E，E 吧 ？Enlightenment 是不是 ？

**Rio** [10:10]
呃 ，不是 Enlightenment， 呃 ， 呃 ， 一时想不起来叫什么了 。Awesome， 好像叫 Awesome。

**吴涛** [10:17]
Okay。

**Rio** [10:17]
对 ，Awesomeness。 对 ， 是一个 Window Manager， 就是纯 ， 它支持纯键盘操作 ，因为那个时候我 ， 对啊 ， 就试图找到一个纯键盘的桌面环境 ，Linux 的桌面环境 。

**吴涛** [10:30]
嗯哼 。

**Rio** [10:31]
但后来就 ， 啊 ， 还是觉得 I might, might have Macs on it。

**吴涛** [10:36]
哈哈哈 。 我 ， 我 ， 我的问题倒不是那么 ， 就不是因为软件的原因啊 ， 我的因为是那个硬件的事情导致 。

当时我用的 ， 就在跑 Ubuntu 的时候用的是一个 ThinkPad， 然后就经常 ， 那个时候是大学上网要用那个什么一种特殊的 ， 呃 ， 无线认证的一种方式 ， 叫什么 ， 现在叫 ReJe 吧 ，是不是 ？

**Rio** [10:55]
对 ， 很多大学里面都有这个 。

**吴涛** [10:57]
对 。

**Rio** [10:57]
哦 ， 你是在国内的时候 。

**吴涛** [10:58]
对 ， 对 ， 国内的时候 。 但是 ，但之前那个是还 ， 我们学校还用的还不叫 ReJe， 还是一个什么其他的一个厂商的 ， 我忘了 ，但是意思是差不多的 ， 就不是说像现在一样你可以连上， 它还是要认证一下 ，但是好像不需要装一个特殊的客户端 ， 你直接用那个 ， 当时是它是针对 Windows 开发的嘛 ， 然后你就用 Windows 那个自带的那个验证一下就可以了 。

但是问题是 ， 呃 ， 我在那个 Ubuntu 上用自带的那个 WiFi Stack，是打死也验证不过的 ， 就非常 ， 非常折腾 ，而且它好像每隔一段时间会升级一次 ， 就是我可能配好 ， 可能能用一次 ， 去图书馆嘛 ， 比如说 ， 然后过个 ， 呃 ， 十天半个月 ， 然后发现 ， 哎 ， 又连不上了 ， 我就想 ， 啊 ，fuck this， 然后就买了一个 Mac， 然后就 ， 就后来就 ， 啊 ， 后来就出国才买 Mac， 就是

也是因为类似的问题嘛 。

**Rio** [11:47]
Okay。 我记得那个时候我刚到德国 ， 呃 ， 印象比较深的一件事情就是 ， 呃 ， 那个学校的计算机实验室的门上贴着一个纸条写着 " 我们不提供任何微软产品 "， 然后， 然后旁边一张纸条上面写着 " 如果要下载那个 WiFi 的 ， 呃 ， 认证客户端 ，Windows 请去这里 ，Linux 请去那里 "， 然后我就觉得 ， 哇 ， 呃 ，Linux 用户真是畅通无阻啊 。

### 社会信任

**吴涛** [12:17]
哎 ， 这点跟我在德国的另外一个学校遇到的印象也差不多啊 ， 当时 。

**Rio** [12:21]
嗯哼 。

**吴涛** [12:22]
就我不是在德国待了一年嘛 ，也是在另外一个学校交换 ，是在他们的那个 Informatic 系 。

**Rio** [12:28]
对 ，Informatic。

**吴涛** [12:29]
Okay。

**Rio** [12:30]
Yeah。

**吴涛** [12:31]
就是德 ， 德语的 computer science。

**Rio** [12:34]
嗯 ， 信息科学 。

**吴涛** [12:36]
对 ， 然后 。

**Rio** [12:36]
哎 ， 对 ， 就是你 ， 你 ， 呃 ， 爱丁堡的计算机学院也叫做 Informatic。

**吴涛** [12:43]
是 C， 就是 C 吧 ， 最后那个字母 。

**Rio** [12:46]
是 Informatics。

**吴涛** [12:48]
对 ，是 C。

**Rio** [12:49]
CS，不是 K。

**吴涛** [12:50]
CS，不是 K。

**Rio** [12:51]
Okay。

**吴涛** [12:52]
就我觉得还挺神奇的 。 其实我觉得这更 ， 更合理啊 。 Computer science sounds weird.

**Rio** [12:59]
嗯 ，Informatic 听起来比较屌 。

**吴涛** [13:01]
信息学是吧 ？

**Rio** [13:03]
对 ， 信息学 ， 信息学院 。

**吴涛** [13:05]
哎 ，其实信息学在国内是不是跟其他的科目什么有点关系 ， 跟 computer science 不是严格一样 。

**Rio** [13:11]
信息学好像是什么情报的信息专业 。

**吴涛** [13:14]
对 ， 对 ， 对 。

**Rio** [13:15]
就是什么 。

**吴涛** [13:15]
他们做的事情是 。

**Rio** [13:16]
间谍那一类的 。

**吴涛** [13:18]
对 ，他们比较偏向于 ， 嗯 ，不那么计算机科学的部分 ， 就是信息传输啊 。

**Rio** [13:27]
嗯哼 。

**吴涛** [13:27]
还有什么 ， 呃 ， 乃至雷达之类的好像都有 。

**Rio** [13:30]
所以是一个更 hardcore 的一个科目 。

**吴涛** [13:35]
对 ， 一个偏向于通讯的专业应该说 。

**Rio** [13:37]
Okay。

**吴涛** [13:38]
我 anyway， 刚说哪里了 ？ 哦 ， 对 ， 我在那个德国的时候发现这个 ， 就德国的就是 LUG 啊 ，Linux Unit Group， 好像特别 ， 特别 hardcore。

**Rio** [13:48]
嗯哼 。

**吴涛** [13:49]
就比较多 ，而且他们会很坚持 ， 就很多事情他不想用这个 ， 呃 ， 付费或者是特别是微软的产品啊 。

当时我在那个系的时候也是有一个 ，有一个 ， 那个门上面 ， 就也是他们也是就是 ， 叫什么 ，technical support。

**Rio** [14:05]
嗯哼 。

**吴涛** [14:05]
然后他们也是说 Windows 去另外那边玩 ， 然后这边只管那个 Unix 类系统嘛 。

**Rio** [14:11]
对 。

**吴涛** [14:11]
对 ， 所以我觉得这挺不错的 。

**Rio** [14:14]
嗯 ， 德国是这样 ， 就是如果你的政府部门 ， 呃 ， 开发什么软件 ， 这个东西只支持 Windows， 立刻会有人去抱怨 。

**吴涛** [14:22]
哈哈哈 。

**Rio** [14:22]
就是德国有一个 ， 德国报税可以在网上报税 ， 然后这个报税部门一开始只有一个 Windows 的软件 ， 后来被人抱怨 ，他们不得不开发了一个 Linux 的软件 ， 像你在 Linux 下面就可以报税 。

**吴涛** [14:36]
酷 。

**Rio** [14:36]
哎 ，在 Mac 用户基金还是没有受到重视 ， 就是可能德国政府也觉得你既然有钱买得起 Mac， 那你就请你去花钱买那个 Mac 下面的报税软件吧 。

**吴涛** [14:46]
它是一个专用的客户端 ，不是一个网页版吗 ？

**Rio** [14:49]
是一个专用客户端 ， 报税必须用一个专用客户端 ， 这个客户端会做 ， 会用数字证书给你签名 ， 然后通过加密信道把那个报税表单发给政府部门 。

**吴涛** [15:01]
哦 ， 这么复杂 。

**Rio** [15:03]
对 。

**吴涛** [15:03]
加拿大报税比较简单 ， 就是你 ， 它是 ， 就政府不提供任何这种官方的界面给你 ， 你可以用纸张的方式填表去报嘛 ， 然后但是其实大多数人还是找一个这种 ， 你刚才讲的那种软件 ，但是那种软件也 ， 就是做那个软件的公司 ， 它同时有这种客户端版本 ， 比如说你可以装到你的这个 ， 呃 ，Mac 上， 可以装到你的 Windows 上， 甚至还有那个 iPhone 的 ， 就是 iOS 的版本 。

但是我一直用的都是他们的一个网页版 ， 虽然很丑 ，但是好歹能用 ，而且我试了一下吧 ， 就跨浏览器的这个兼容性还不错 。

**Rio** [15:37]
对 ，也许这是更好的一种选择 ， 我不知道为什么德国人一定要 ， 要 ， 就是税务局一定要自己开发一个客户端来用 。

**吴涛** [15:44]
你刚才都说了它要加密那些很麻烦 ， 你知道加拿大 。

**Rio** [15:47]
对 ，但我觉得有点 over engineering， 就是德国很多东西都是 over engineering。

**吴涛** [15:52]
哦 ，it's German。

**Rio** [15:54]
当然 ， 当然可能是比较 ， 可能是 ， 呃 ，make sense，但是不像法国的很多东西 ， 它 over engineer 的 ，而且非常奇怪 。

**吴涛** [16:01]
哈哈哈 。

**Rio** [16:02]
我 ， 我 ， 哈哈哈 。

**吴涛** [16:04]
对 ， 我 ， 我希望听众里面没有 ， 呃 ， 法国粉 ，因为我是一个非常喜欢黑法国的人， 可能会经常听见我吐槽法国的这个那个 。

**Rio** [16:12]
德国人都黑法国人吧 ？

**吴涛** [16:14]
也不是德国 ， 我觉得德国应该也有喜欢法国的 。

**Rio** [16:17]
但我觉得主流是黑的吧 。

**吴涛** [16:19]
我觉得 ， 啊 ， 黑法国是欧洲的 。

**Rio** [16:22]
哈哈哈 。

**吴涛** [16:23]
Well, anyway。

**Rio** [16:24]
你想 ， 就是我这是谁说的 ， 这好像是 CC 程说的 ， 说你想跟 ， 呃 ， 欧洲的任何一个国家建立起 ， 呃 ， 陌生人建立 ， 迅速建立起友谊 。

**吴涛** [16:34]
就黑法国人就可以了是吧 ？

**Rio** [16:35]
对 ， 先黑一下法国人， 看看对方有没有反应 ，有反应的话 ， 很有可能就可以一起黑了 。

**吴涛** [16:41]
对 ，但是 ，但是我觉得就是刚才你讲的那种方式啊 ， 用那种什么 ， 呃 ， 就是证书签名 ， 然后加密的方式确实是更安全的呀 ，因为你知道加拿大这种地方 ， 对 ， 安全意识我觉得他们是很水的 ， 很多事情都是可以很容易的 ，不需要经过任何麻烦的就可以 social engineering 到别人， 比如说那天我去 ， 我们不是就这次回来搬了一个地方的新的地址吗 ？

**Rio** [17:08]
嗯哼 。

**吴涛** [17:09]
然后就要去改 ， 比如说我要改那个驾照上的那个 ， 那个注册的地址 ， 我改了我自己的 ， 然后我去改我老婆的 ， 然后它 ， 它有个网页可以 ， 可以输入你的那个驾照的号 ， 然后一个六位数的 ， 呃 ， 密码就可以去登录进去 ，但是我老婆那个从来没有用过 ， 所以我 ， 我们 ， 我也不知道那个六位数密码是多少 ， 然后我就打电话去那个我们这里管那

个发驾照的那个 ， 那个机构去问密码 ， 然后她就问了我一下那个驾照的号码 ， 然后名字 ， 就把那个密码告诉我了 。

**Rio** [17:40]
我靠 。 我觉得这可能这跟就是加拿大地广人稀有关吧 ， 就 。

**吴涛** [17:44]
对 ， 我觉得 。

**Rio** [17:45]
人和人之间有比较更多的信任 。

**吴涛** [17:48]
对 ， 特别是在我这个地方 ， 我觉得可能是属于这种非常高信任度的那种地区啊 ， 就是我知道有很多人他们 ，他们住那种就是两层楼的那种 house， 就是小别墅嘛 ， 然后他们出门是从来不锁门的 ， 就是你随便 。

**Rio** [18:03]
对 ， 或者把钥匙藏在地毯下面 ， 我觉得有时候我小时候看美剧 ， 看到有人把钥匙藏在地毯下面 ， 我 ， 我都惊呆了 。

**吴涛** [18:11]
对 ， 上次我也是 ， 我要去租一个房子 ， 它那个风景非常好 ，在一个海边的一个 ， 一个小 house， 那个人， 那个房主是不在本地的 ，他是远程电话给你说 ， 你去那个地方 ， 然后那个门口有一个那个什么花的 ， 花博对吧 ， 花博上面有把钥匙 ， 你把那个钥匙打开就可以进去 ， 我说哈 ， 然后他说那你 ， 那你这样真的放心吗 ？

我说没事啊 ， 你看啊 ， 然后他 ， 我就给他看 ， 就是看那个房子 ， 后来没租 ，但是而且就在这个地方还是信任度是蛮高的 ， 那你也可能是因为这样才导致刚才你说那些问题 ， 就很多这种所谓的 ， 啊 ， 我们在一个 geek 看来就哇太不安全了 ，但是他们觉得无所谓啊 ， 反正也没有 ，也不会发生什么对吧 ？

**Rio** [18:57]
对 ， 就可能在 ， 嗯 ，在某些社会主义老子看来 ， 这种小国寡民可能是非常理想的一种状态 ，但是很遗憾我们在 ， 嗯 ， 发达国家或者说某些发展中国家 ， 比如某个具有十多亿人口的发展中国家 ， 这是非常不现实的一件事情 ， 人们还是尽量注意安全的比较好 。

**吴涛** [19:18]
嗯哼 。 哎 ， 我觉得在德国的时候 ， 我觉得还 ， 还是蛮注意安全的 ， 很多地方都是 。

**Rio** [19:23]
因为德国 ，其实德国是人， 呃 ， 欧洲的人口第一大国啊 ， 德国八千多万 ， 九千万 ， 法国是第一大国 ，但是德国是人口最多的国家 ， 所以人， 德国之间可能 ， 德国可能是这种信任的状况稍微少一点 。

**吴涛** [19:38]
嗯哼 。 对 ，而且 ，但是我相信还是有很多德国人会把钥匙藏在地上 。

**Rio** [19:43]
对 ，而且还 。

**吴涛** [19:44]
还有一件事情我觉得很有意思 ， 就是你 ， 你 ， 你有开车在德国开那个汽车对吧 ？

**Rio** [19:52]
对 。

**吴涛** [19:52]
然后你那个邮箱是可以随便打开的吗 ？

**Rio** [19:56]
可以 ， 呃 ， 我的不行 ，但是大部分人的车的邮箱都可以 ， 我的邮箱需要在驾驶舱里面按一个键才可以打开 。

**吴涛** [20:03]
所以 ， 所以德国的车也有这样的 ？

**Rio** [20:05]
不 ，不 ，不 ， 德国大部分车的邮箱是按一下邮箱盖就会弹起来 。

**吴涛** [20:08]
但是就是需要一个锁的机制吗 ？

**Rio** [20:12]
不需要 ， 就是任何人都可以打开 。

**吴涛** [20:14]
你不觉得这个事情很傻逼吗 ？

**Rio** [20:16]
嗯 ， 中国难道不是吗 ？

**吴涛** [20:19]
中国我 ， 我开过的所有的车都是 ， 就好的坏的都是有一个锁的机制的 ， 要么你是从外面用钥匙打开 ， 要么是从那个驾驶舱按一个钮 ， 然后它才能够弹起来 。

**Rio** [20:30]
就是会有人偷油是吧 ？

**吴涛** [20:31]
这个是一个问题 ， 呃 ， 可能在中国就是最主要的问题 ，但我觉得另外一个就是 ， 你不觉得这样很不安全吗 ？

**Rio** [20:38]
就是有 ， 如果不喜欢 ， 就是都恨你的话 ， 往你邮箱里面倒一点什么东西 ， 你车就毁了 。

**吴涛** [20:44]
因为我知道上次有一个发生一件事情啊 ， 就是有一个 ， 我不知道他得罪了谁还是怎么样 ，有人好像在他那个邮箱里面尿了一泡 ， 然后发动机就报销了 。

**Rio** [20:55]
嗯 ， 这是挺惨的 ， 我从来没有想过这个问题 ，因为我女朋友的车就是按一下就会弹开的 。

**吴涛** [21:03]
啊 ， 都说觉得为什么会这样呢 ， 都很奇怪嘛 ， 那这也是可能从一个低信任度社会迁移到高信任度社会的一个 shock 之一吧 。

**Rio** [21:14]
对 ， 就好像 ， 呃 ， 比如说 dashcamera。

**吴涛** [21:18]
嗯哼 。

**Rio** [21:18]
就是我们在 Youtube 上可以看到很多很多这个俄国或者是就是 。

**吴涛** [21:25]
对 ， 对 ， 对 。

**Rio** [21:25]
他们那里也超多的 。 大量的车祸的镜头是由 dashcamera 录下来的 ， 我相信中国好像现在也是非常流行 ， 就是 。

**吴涛** [21:34]
对 ， 碰瓷党太多了 。

**Rio** [21:34]
车上装一个叫什么行车记录仪 。

**吴涛** [21:37]
对 ， 对 ， 对 。

**Rio** [21:38]
但是你会觉得在就是高信任度的社会的国家 ， 这种东西是很少见的 ， 就为什么要把行车的东西录下来呢 ？

是你怕别人撞了你不承认还是 ？

**吴涛** [21:48]
对 ， 怕就是 ， 就是怎么 ？

**Rio** [21:50]
一定要撇清楚 。

**吴涛** [21:52]
讹诈嘛 ， 讹诈嘛 。

**Rio** [21:52]
对 。

**吴涛** [21:53]
对 。

**Rio** [21:53]
对 。

**吴涛** [21:53]
因为国内特别是现在碰瓷党又比较多 ， 你回去的时候 ， 你装个行车记录仪能拍到非常很多搞笑而且恶心的事情 。

**Rio** [22:01]
对 。

**吴涛** [22:02]
啊 。

**Rio** [22:02]
对 ， 对 ，有时候我看行车记录仪录下来的东西 ， 我都会觉得非常 disturbing。

**吴涛** [22:07]
上次我 ， 就我老婆她说 ， 就是在我们上次不是回国待了一段时间吗 ？ 她说哎买一个要不带回加拿大去 ， 我说有必要吗 ？

加拿大人那谁管你到时候出了事情 ， 直接找保险公司就按那个什么规则弄就好了 ， 根本没有这种需求 。

**Rio** [22:22]
而且从一个比较悲观 ，但是从一个比较悲观的角度来看 ， 我觉得可能行车记录仪会渐渐普及开来的 ，因为整个世界的趋势是在渐渐走向不信任吧 ， 你觉得呢 ？

**吴涛** [22:35]
哼 。 不 ， 我的想法倒是更简单 ， 我觉得有行车记录仪还要包括 ， 就是行车记录仪只有你在驾驶的时候才会 ， 才会开启嘛 ， 对吧 ？

然后它有些 ， 嗯 ， 这些记录可以做到你是 24 小时全天监控嘛 ， 我是觉得有 ，有的这个东西的话 ， 可以在某种程度上降低这个保险的费用 ， 就是如果保险公司强制要求你装上这个的话 ， 它可以说哎 ， 你装这个保险减半 ， 你不装这个保险加倍这样 ， 你明白我意思吗 ？

就是有更多的 ， 就虽然说 ， 呃 ， 我们 ， 比如说我现在待的地方都属于这种整体社会程序都比较高的 ，但是我觉得这只是通过传统来的一个事情来保证的 ， 就好像你刚才讲这个 ， 这个社会状况是在变化的 ， 所以如果有一些 ， 呃 ， 叫做什么 ， 呃 ， 机制的 ，有些什么这种比较可靠的机制来确保这一点 ， 我觉得是更好的一个方案 ， 就是我更相信机器而不

是人。

**Rio** [23:34]
嗯 ， 我相信 Lawrence 如果在场的话一定会跳出来说 ， 呃 ，他是更希望能够 ， 社会能够朝着更相信人的方向发展 ，因为人才是最重要的 。

**吴涛** [23:46]
但是人是不 predictable 啊 。

**Rio** [23:48]
对 ， 人是 ， 对 ， 人是 。

**吴涛** [23:51]
Highly unpredictable。

**Rio** [23:52]
我记得前两天看了 ， 看一个笑话说 ， 呃 ， 什么是程序员 ？ 程序员是这样一种职业 ， 就是你坐在桌子前面面对着一个盒子 ， 然后非常痛恨自己不能像一台机器那样思考 。

**吴涛** [24:04]
哈哈哈 。

**Rio** [24:06]
对 ， 程序员实际上是一个非常非人的职业 。

**吴涛** [24:08]
嗯哼 。

**Rio** [24:09]
然后这一点可能有时候会引起我的这个肉 ， 呃 ， 叫什么 ， 肉体的内核 ， 就是血肉的内核 ，有时候也有点恐慌 ， 我觉得自己越来越不像一个人。

**吴涛** [24:22]
所以其实大部分时间所谓 debug，debug，其实 debug 不是程序里的 bug，debug 是你脑子里面的 bug， 对吧 ？

**Rio** [24:31]
对 ， 就是找出自己到底又哪一步他妈的不像一个机器那样 ， 所以导致了这个 ， 呃 ， 让你感到愤怒的 bug。

**吴涛** [24:39]
所以写程序一直就是一个异化的过程 。

**Rio** [24:42]
对 。

**吴涛** [24:43]
嗯 。

**Rio** [24:43]
你异化你自己 。

**吴涛** [24:44]
对 。

**Rio** [24:44]
你让自己摒 ， 摒除感情和情绪的影响 。

**吴涛** [24:49]
好像 。

**Rio** [24:50]
变成一个 ， 对 。

### 错误处理

**吴涛** [24:52]
好像球又变变了 。 那行 ， 刚才讲到这里啊 ， 那今天那个一个主题是讲什么 ？ 错误处理对吧 ？

**Rio** [24:59]
对 ，其实对 ，其实刚才我们说到 bug， 那 bug 会导致程序不能正常的运行 ， 或者导致一台机器不能正常的运行 。

**吴涛** [25:09]
嗯 。

**Rio** [25:09]
然后此时就涉及到一个 ， 呃 ， 就是 exception handling 的机制 ， 那其实这是我们这一期节目想要讨论的一个主题 ， 就是 ， 嗯 ，exception 应该怎样被 handle。

**吴涛** [25:28]
哎 ， 先说 ， 先说这个之前我们要先 ， 可能先解释一下啊 ， 就是如果最开始大家是学这种更加低级的语言 ， 比如说 C 啊 ， 这种语言出来的时候是没有 exception 这个机制的哈 。

**Rio** [25:40]
嗯 ， 呃 ，C 其实是 ， 嗯 ， 你可以通过 setjmp、longjmp 来 。

**吴涛** [25:45]
还可以 go。

**Rio** [25:45]
对 ， 你可以说它没有原生的 ， 它没有在语言的层面上支持 exception 这个 ， 这个概念 。

**吴涛** [25:50]
对 ， 然后就一般的错误处理是通过这个返回错误代码的方式来实现的 。

**Rio** [25:57]
对 。

**吴涛** [25:57]
嗯 ， 然后最近有些新兴的语言反而是就 ， 就抛弃了 exception， 然后回归了 C 的这一点 ， 比如说我现在最近一直在用的这个 go， 就是那个 Google 那个语言啊 ， 就它是没有 exception 的 ， 就所有的都是 ，其实它有一种 ，但是用的非常少吧 ， 就大部分时间是用那个就是 return error 这种方式来实现 。

**Rio** [26:22]
对 ， 我记得我在知乎上也回答过一个类似的问题 ， 就是有人问 Swift 为什么没有 exception， 然后我就 ， 我其实我也是一个觉得 exception 是一个比较不那么 ，有点 overrated 这样一个功能 。

**吴涛** [26:40]
所以 ， 所以你觉得这个 exception 的主要问题在哪里 ？

**Rio** [26:43]
呃 ，exception 有点像 GoTo， 你要我说的话 。

**吴涛** [26:47]
对 。

**Rio** [26:48]
就是很多人把 exception 当 GoTo 用 。

**吴涛** [26:50]
嗯哼 。

**Rio** [26:51]
就如果发生了 exception， 那你就 ， 呃 ，有 ， 你此时你的程序会有时候会产生一种不可预知的走向 。

**吴涛** [27:01]
对 ， 我觉得这是最主要的问题 ， 就是为什么 ， 就 ， 就为什么我觉得 exception 不是特别好的原因也是因为就是 ， 就跟那个叫什么 GoTo is considered harmful 一样嘛 ， 就是 exception 它会导致你之前预设的那个 ， 呃 ， 叫什么 control flow， 控制流会变得很乱 。

**Rio** [27:20]
对 。

**吴涛** [27:20]
就是因为它一旦 ， 一旦抛出 exception， 它整个的那个程序的运行的逻辑就不再是按照那个线性的往下走 ，而是跳到另外一个地方 ， 或者跳到调用层或者是更高层去了 ， 这样的话就会导致很多非常难以预料的这种场景的组合嘛 。

**Rio** [27:39]
对 。

**吴涛** [27:39]
所以 ， 所以这样会导致很多问题 。

**Rio** [27:42]
对 ，但是反过来 exception 的支持者也会说这是一种 necessary evil， 或者它甚至就不是 evil， 就是这是一种 ， 呃 ， 非常必要的功能 。

**吴涛** [27:55]
嗯哼 。

**Rio** [27:56]
就是它并不是 ， 嗯 ， 它并不是一种错误 ， 它只是一种对于一种 ， 呃 ， 离 ， 就是现实中， 现实生活里面毕竟会出现的错误的 ，不得不有的这么一种处理方式 ，而且他们会说用返回值或者是像 objective C 这样的 error pointer 的方式非常的原始古老 。

**吴涛** [28:25]
嗯哼 。

**Rio** [28:26]
而且会导致代码非常的冗长 。

**吴涛** [28:28]
对 ， 这也是确实是有 ， 我写 ， 最近写的 go 也比较多遇到的一个问题啊 ， 就是之前 ，因为 Python 是支持这个 exception 机制的嘛 ， 然后很多错误都通过那种那个流走 ， 就是正常的逻辑流就正常走 ， 然后 exception 就错误处理是走单独的一个方式走 。

**Rio** [28:46]
而且在 Python 里面这甚至是一种 pattern， 就是 Python 推荐你用 。

**吴涛** [28:51]
对 。

**Rio** [28:51]
呃 ， 异常处理方式来 。

**吴涛** [28:52]
处理出来 。

**Rio** [28:53]
来当做 logic flow control。

**吴涛** [28:55]
对 ， 对 ， 就它把 ， 它是把那个就是正常情况下的一个流是缩得比较紧 ，因为你不需要做很多这种错误处理 ， 就一旦出错你就直接抛出一层 ， 就跳到另外一层去处理嘛 ，但是这会导致 ， 就会你会看起来那个代码很简单漂亮 ， 那样同样的 ， 要完成同样的事情 ， 然后在 go 里面写就发现你每次调用一个函数都要 ， 都要检查一个 if error 不等于这个 neo

怎么样 ， 对吧 ？

**Rio** [29:22]
对 。

**吴涛** [29:22]
就 ， 就 。

**Rio** [29:22]
其实会 ， 就叫 ， 呃 ， 常话叫什么 ，boiler，boilerplate。

**吴涛** [29:27]
对 ， 对 ， 对 。

**Rio** [29:27]
出现大量的这种其实没什么用 ，但是又明明有意义的 ， 就有意义的语句在里面 。

**吴涛** [29:34]
对 ， 所以这牵涉到的是一个 ， 还是刚才讲的是 ， 是一个 ， 呃 ， 怎么认知的问题啊 ， 就是说 ， 呃 ， 比如像刚才我们讲 Python 那种 ， 那种类型为代表的哈 ，也不是 ，不只是 Python 一种 ，其实大多数支持 exception 的语言都是推荐你用这种方式嘛 ， 就是正常的这个 control flow 你用正常的逻辑思维去想 ， 然后异常的你就走那个 exception handling 就好了 ， 然后这个像 go 和 C 这一派就是

说那你肯定是 ， 那你没有 ，不 ， 就是错误是应该是你的那个逻辑的一部分 ， 就错误处理应该是你逻辑的一部分 ，因为这只有这样才可能保证你的任 ， 就出现任何情况你都是在可控的一个范围内 ， 对吧 ？

啊 ， 所以我觉得他们就是代表两种完全不一样的思维啊 ， 它看当然就是说你喜 ， 你习惯用哪个 ， 就 ， 就看你自己觉得了 ，但是我觉得吧 ， 现在一般是 ， 我现在的看法一般是这样子啊 ， 就是如果你写的这个程序是需要 ， 呃 ， 非常 robust， 非常就是要长时间不间断 ， 然后不出错啊 ，不 crash 的工作的话 ， 就不出现那个 blue screen of death， 然后 spinning beach ball of death 这类的东

西 ， 呃 ， 你还是可能要采用刚才像 ， 像 C 啊 ，go 为代表这种类型 ， 就是把错误处理作为你的程序要考虑的每一步 ， 这样会导致这个代码很冗长很麻烦 ，但是它确实会保 ， 会保证你的每一种情况都 ， 你的程序都是在一个可以预测的 ， 所以叫什么 ， 可控的那个状态内的 ， 我觉得 。

**Rio** [31:01]
对 ，但其实你说的这个就是 ，但其实这是一种不可能的状态啊 ， 就是 ， 呃 ，在几乎在所有的 ， 呃 ， 编程语言里面你都会遇 ， 你都会 ， 呃 ， 遇到 ， 就不是在几乎在所有比较现代的编程语言里面你都会遇到一种区分 ， 就是错误和异常的区分 ， 就是有一种异常是你可以控制的 ， 你可以预料到的 ， 比如说你去 ， 你要打开文件 ， 然后你发现这个文件不

存在 ， 这是你可以预料到的异常 。

**吴涛** [31:31]
对 。

**Rio** [31:31]
可是有些异常是你预料不到的 ， 就是比如说像在 ， 像在 Java 里面 ， 呃 ，有所谓 ， 这是我觉得是 ， 这一直是我觉得 Java 非常二的一个特性 ， 就是有一个所谓 checked exception。

**吴涛** [31:43]
嗯哼 。

**Rio** [31:43]
你在写一个方法的时候 ， 你要告诉方法的调用者这个方法可能抛出什么样的 exception。

**吴涛** [31:49]
嗯哼 。

**Rio** [31:49]
这其实是一个看起来很美 ，但是用起来非常不实际的这么一个功能 。

**吴涛** [31:54]
嗯哼 。

**Rio** [31:55]
就是在许多时候你是预料不到 ， 或者是作为一个会出错误的人， 你是没有办法完全的辨立这一个方法可能出现的 exception 的情况的 。

**吴涛** [32:08]
对啊 。

**Rio** [32:08]
这其实也是导致了非常多的 anti-pattern。

**吴涛** [32:11]
这个 ， 这个我觉得是 ， 这为什么会是一个问题呢 ？ 如果你用这种就是返回错误的方法来处理 ， 为什么不能解决这个问题呢 ？

**Rio** [32:20]
对 ， 你用返回错误的 ， 就是我觉得用错误返回值的语言 ，其实是采用那种更为 pragmatical 的理念 ， 就是我处理所有我能遇见到的错误 。

**吴涛** [32:32]
嗯哼 。

**Rio** [32:33]
如果这个错误我没有遇见到 ， 那我就让它 crash 好了 。

**吴涛** [32:36]
对啊 。

**Rio** [32:38]
但是在很多 ， 或者也不是很多 ， 就是在部分编程语言里面 ， 人们会觉得我有 exception control， 我有这种机制在 ， 那我就会尽可能的让我的程序不要 crash。

我觉得很多 Java 程序都是这样的 。

**吴涛** [32:56]
呃 ， 我想想 ， 就起码我在最近在写 go 的时候没有遇到说会有某一个错误没有处理到导致 crash 的这种 ， 这种状况发生诶 。

**Rio** [33:08]
对 ，因为 ，因为这种错误如果一旦出现的话 ， 基本上我觉得 go 程序是处理不了 ，handle 不了的 ， 比如说你运行时把你一块内存拔下来 ， 那你 ， 你的 ， 你的这个程序本身要怎么 handle？

**吴涛** [33:20]
那如果遇到这种情况下， 你用 exception handling 也是没有办法的诶 ， 就比如说你的 Java， 就是 Java 虚拟机内存出了问题 ， 你 ， 你上面能怎么办 ？

也是没有 ， 没有任何办法 。

**Rio** [33:30]
但是 somehow 有时候我会有一种感觉 ， 就是我又要黑 Java 程序了 ， 那这个 ， 这个不太好 ，在第一期里面就树立这么多敌人， 算了 ， 就是在某些比较广为人知的程序里面 ， 呃 ， 程序员会产生这样的错觉 ， 就是我有 ， 我有异常处理机制 ， 那我几乎是可以处理一切异常的 ，但其实并不是这样 。

**吴涛** [33:49]
嗯哼 。 所以其实我觉得吧 ， 就是如果要实现那种所有的错误都被预测到 ， 所有的错误都被 ， 都被处理过 ， 你肯定是需要一些更加 ， 呃 ，formal 的一些机制 ， 比如说你要去 ， 就是去 ， 去 ， 叫什么 ， 证明这个程序是不错 ，但是这种情况在现实中是基本上是不可能实现的嘛 ， 只有在一些非常受限的学术性的环境里面才可以 。

**Rio** [34:15]
对 ， 或者说 ， 或者说你可以 ， 你可以觉 ， 你可以说 ， 呃 ， 我程序本身并不提供这样的机制 ，但是我倚赖于系统所提供的机制 ， 就是就像你说的 ， 你希望一个程序它稳定的运行 。

**吴涛** [34:29]
嗯哼 。

**Rio** [34:29]
那么尽 ， 尽量可能的不出错 ，不 crash， 可是它一旦 crash 了怎么办呢 ？ 你可以说那我把它做成一个 service。

**吴涛** [34:37]
嗯哼 。

**Rio** [34:38]
然后， 呃 ， 那么我们都知道 Linux 或者是 Windows 下面对于一个 ， 一个 service 的 ， 呃 ， 控制里面会有这样一项 ， 就是如果这个 service crash 了怎么办 ？

那 Windows 下面比如说可以选说 ， 呃 ， 尝试重新启动它 。

**吴涛** [34:55]
嗯哼 。

**Rio** [34:55]
并且如果尝试重新启动三次它仍旧 crash 的话 ， 那我就不再启动它了 。 那其实这也是一种就是异常处理机制 ， 那 Windows， 呃 ，Linux 其实也是有类似的这样一个 ， 一个机制在里面 。

**吴涛** [35:08]
这里就牵涉到 ， 呃 ，Linux 上面也常见的那个叫做 ， 呃 ， 你说 service 嘛 ，他们就可能 。

**Rio** [35:15]
Demon。

**吴涛** [35:16]
对 ，demon 的概念 ， 然后 demon 的话就会有相关的像这个 supervising 的一个机制在里面啊 。

### systemd

**Rio** [35:23]
对 。 诶 ， 你 ， 你有没有归 ， 最近关注那个 systemd 这个话题 ？

**吴涛** [35:28]
哦 ， 看了好久 。

**Rio** [35:29]
对啊 ， 我觉得也挺扯的 。

**吴涛** [35:32]
对 ， 诶 ， 你对这个事情的态度是怎么样子 ？

**Rio** [35:35]
我觉得 system， 我也是觉得 systemd 有一点激进了 ，但是

， 嗯 ， 怎么说呢 ， 我觉得这一天迟早会来 。

**吴涛** [35:45]
嗯 ， 就你觉得它激进的地方在哪里呢 ？

**Rio** [35:49]
就是它试图把一些 ， 它试图把所有的 ， 呃 ，demon 的启动机制乃至于系统的启动机制均一化 ， 模块化 。

**吴涛** [35:58]
嗯哼 。

**Rio** [35:59]
然后， 嗯 ， 就摒弃了很多传统 ， 就是我不知道你有没有 ， 呃 ， 读那篇文章 ， 就是 systemd 的主要维护者之一 ， 它叫什么我忘了 ， 它 ， 它好像是个德国人。

**吴涛** [36:11]
嗯哼 。

**Rio** [36:11]
他在 blog 上发了一篇文章说 ，因为他开发 systemd 已经受到了很多死亡威胁 ， 甚至是有些人在写很酸的文章在暗示要对他产生人身攻击 ， 或者是有人写了歌 。

**吴涛** [36:25]
嗯哼 。

**Rio** [36:25]
来嘲讽他 。

**吴涛** [36:26]
嗯哼 。

**Rio** [36:27]
呃 ， 恨不得他去死之类的 ， 就是你会发现这种问题居然可以导致就是非常 personal 的这么一个层面 。 对 ， 呃 ， 对 ， 这就扯远了 ，但是回到 systemd。

**吴涛** [36:38]
这个故事的教训是什么 ？ 不要激怒一个程序员 ， 对吧 ？ 不要激怒一群程序员 。

**Rio** [36:44]
不要像唐吉诃德一样去 。

**吴涛** [36:46]
对 。

**Rio** [36:47]
但反过来 ， 呃 ， 你可以说就是因为会有这样的反应 。

**吴涛** [36:55]
嗯哼 。

**Rio** [36:55]
呃 ， 体现出了 systemd 到底 ， 到底是一个多么激进的项目 。

**吴涛** [37:01]
对 ， 我觉得可能我对它的一个就 ， 现在我 ，其实是没有太明确的反对或者是支持它的一个 ， 一个观点啊 ，但是我觉得有一些是值得商榷的 ， 比如说它把那个就是 PID1 的那块做得那么重 ， 真的好吗 ？

**Rio** [37:19]
对 ， 就是此时你会有一个想法就是 Linux 并不只是跑在你的笔记本或者是跑在大型机上的 。

**吴涛** [37:26]
对 。

**Rio** [37:26]
Linux 很多 Linux 是跑在比如说像 ， 像 Beagle 或者像 ， 像 ， 嗯 。

**吴涛** [37:32]
路由器上面 ， 对吧 ？

**Rio** [37:33]
Raspberry， 对 ， 或者路由器上面的 。

**吴涛** [37:35]
对 。

**Rio** [37:35]
那 ， 那个地方的 system，Linux 真的要混用 systemd 吗 ？ 有意义吗 ？ 好像也没有 。

**吴涛** [37:41]
对 ， 现在我就觉得它 ， 它 ，但它自己的说法是说 ， 说我这个 systemd 这个是一大块东西 ， 你可以挑其中的一小部分来用 ， 你不是要全部都用上， 这显得很臃肿嘛 ， 你可以只用一小坨 ，但是我不知道哈 ， 就它那种组织的机制还有那种思考的方式 ， 我觉得很容易会导致一种就是 unnecessary complexity 在里面 。

**Rio** [38:06]
对 ， 它会为了模 ， 为了 ， 为了有这么一种比较均一的模式 ， 或者说为了有这样 ， 为了设计而去牺牲功能 。

**吴涛** [38:16]
对 ， 然后， 嗯 ， 就我 ， 我也有看其他的一些就是替代的那种就是 ， 呃 ，PID1 的那个程序嘛 ， 比如说像 DDB 他们那些比较简 ， 轻量级简化的 ， 甚至就总共就只有可能不到 100 行 C 代码的一些这种 initial，ini-ini 程序我觉得是更好的 ，因为如果代码够少的话 ， 你可以就是穷举掉它所有可能出错的地方嘛 ，因为这个 PID1 是一个非常重要的程序 ， 如果它 crash 你真的就只能 kernel panic 了哈 。

**Rio** [38:47]
对 。

**吴涛** [38:48]
啊 ，但是如果你这个东西就代码量复杂了 ， 然后就 ， 就刚才讲的 ， 你如果能出错的地方多了 ， 那你肯定是不可避免的有些出错的地方 ， 然后这个出错会导致整个系统崩掉嘛 ， 所以 ， 呃 ， 如果有一个这种更加简洁的 ， 或甚至就是几十行不到 100 行代码的能够实现 ， 那你真的是可以用 ， 呃 ， 甚至你可以用这种机器这个就是 ， 就是 ， 就是证明

的方法去证明这个程序可能会在哪些地方出错 ， 然后那些可能出错的地方你都已经顾及到了 ， 对吧 ？

**Rio** [39:20]
对 。

**吴涛** [39:20]
你可以实现一个就是 100% reliable， 就只要你的硬件是不出错的哈 ， 这个软件是可以保证 100%， 呃 ， 这个正常运行的 ，但是如果你是太复杂的话 ， 你就做不到这一点 ， 这点我是觉得是有一点点问题的 。

**Rio** [39:34]
对 ，而且就是 systemd 的设计与 Unix 的哲学就是 ， 嗯 ，do one thing and do it well。

**吴涛** [39:42]
嗯哼 。

**Rio** [39:43]
有点相背 ， 背道而驰嘛 。

**吴涛** [39:45]
对 。

**Rio** [39:45]
就是它 ， 它试图实现很多事情 ， 然后把很多功能集中在一个 ， 一个单一的程序里面 ， 或当然它 systemd 也不是一个单一的程序 ，但是它试图以这样一种大一统的架构去解 ， 解决一些 ， 呃 ， 源头和本质都非常异构的问题 。

**吴涛** [40:05]
对 ， 就是可能我觉得很多人对这个 systemd 的反感倒不是说 ，但可能他就是不喜欢那种 ， 这种设计哲学是一个最主要的因素啊 ，但是可能更多的一个是因为它用某种政治的方法在主流的发行版中得到了一个这个所谓正统的地位嘛 。

**Rio** [40:26]
对 ，Debian 也换 ， 好像也是 。

**吴涛** [40:28]
对 。

**Rio** [40:29]
即将支持 。

**吴涛** [40:30]
就 8 嘛 ， 就 Debian 8 里面它就会换成这个 systemd， 之前是在 longjmp。

**Rio** [40:34]
作为一个 ， 作为一个历经的 Debian 用户 ， 我觉得还是有点不爽的 。 当然其实就我觉得以我的 ， 呃 ， 水平来说 ， 这种改变可能对于我的影响是微乎其微的 ，但 。

**吴涛** [40:50]
啊 ， 那个其实也比较简单 ，因为我用的场合也比较简单 ， 那个主要的问题就是它的那个 upstart 的那个配置是不是一个完全的数据化的东西 ， 它里面有包含可以调用这个 shell 脚本嘛 。

**Rio** [41:04]
嗯 。

**吴涛** [41:04]
然后你一旦你 。

**Rio** [41:06]
其实也是一个安全隐患 。

**吴涛** [41:07]
对 ，不光是这个问题 ， 就一旦你调用那个 shell 脚本之后， 你这个整个东西就没有办法自动化来去分析或者是处理了嘛 。

**Rio** [41:15]
对 ， 你这就打开了一扇 ， 打开了一个潘多拉的盒子 ， 然后你就 ， 它就不再可控 。

**吴涛** [41:21]
对 ， 就变成一个纯粹的叫做 descriptive， 描述性的配置文件变成一个 imperative， 叫什么 ， 叫可执行的配置文件 ， 这个变得就比较奇怪了 ，而且你像最近不是又出了那个 shell。

**Rio** [41:36]
诶 ， 等等 ， 反过来了吧 ？

**吴涛** [41:38]
什么 ？

**Rio** [41:38]
为 ， 为什么我记得 systemd 里面的 demon 的描述文件是 descriptive 的 ？

**吴涛** [41:44]
是啊 ，是啊 ，systemd 是 descriptive 的 ， 然后 upstart 的不是啊 。

**Rio** [41:47]
啊 ，OK。

**吴涛** [41:47]
Upstart 上面支持的是你可以嵌入这个 ， 比如说你的 pre-start， 然后什么 post-start 之类的 ， 你可以加入一些钩子 ， 然后那钩子可以直接调用 ， 你可以直接在那个配置文本里面嵌入这个脚本的执行的 ， 执行脚本的 ， 那就会导致各种各样的麻烦的 ， 就没完全没有 ， 没有完全解决那个 sysv 的那些问题嘛 。

**Rio** [42:09]
嗯哼 。

**吴涛** [42:10]
啊 ， 然后刚好最近不是出了那个 Shell Shock 嘛 ， 然后那肯定 。

**Rio** [42:14]
对 。

**吴涛** [42:14]
现在是 Bash 这种老 ， 老东西也是可能会有很多坑的 ， 所以 。

**Rio** [42:19]
Bash 对 ，Bash。

**吴涛** [42:22]
Bashing Bash。

**Rio** [42:23]
嗯 ， 对 。

**吴涛** [42:24]
啊 ， 又扯远了哈 。

**Rio** [42:26]
对 。

**吴涛** [42:26]
呃 。

**Rio** [42:26]
不过这可能就是 podcast 的 ， 的 ， 本来要做的一件事吧 ，不停的扯远 。

**吴涛** [42:33]
OK， 所以 ， 所以你觉得那个刚才讲那个 ， 我们在讲 exception handling 哈 ， 你说这个 。

**Rio** [42:38]
嗯哼 。

**吴涛** [42:38]
Exception 应该在哪一层处理 ？

**Rio** [42:41]
诶 ， 这是一个很好的问题 ， 就是 exception 其实是有不同层级的 。

**吴涛** [42:45]
嗯哼 。

**Rio** [42:46]
我觉得我可能在小时候用 Windows 的时候 ， 这话说的 ， 对 ，在以前用 Windows 的时候 ， 呃 ， 非常恼人的那个错误提示就是 ， 呃 ， 一个红叉的 pop-up， 然后说严重错误冒号 ， 呃 ，0x 某某某某地址的内容不应被访问之类的 ， 然后程序终止 。

我觉得这其实是非常愚蠢的一个错误提示 ， 就是我作为当时作为一个普通的用户 。

### 错误提示

**吴涛** [43:21]
用户 。

**Rio** [43:22]
我凭什么要去读这个十 、 十六进制的地址 ？

**吴涛** [43:26]
嗯哼 。

**Rio** [43:26]
就是你这个 pop-up 到底给我带来了什么呢 ？ 什么也没有啊 ， 你只是告诉我我的游戏不能玩了 。

**吴涛** [43:33]
所以那个 。

**Rio** [43:34]
那你不如直接告诉我我游戏不能玩了就好了 。

**吴涛** [43:37]
产品 ， 产品经理偷懒嘛 ， 没有 ， 没有去做这个事情 ， 这个不应该暴露给用户嘛 。

**Rio** [43:43]
我相信这是 Windows 的问题 ， 就是这种严重的错误级别 ， 这种 ， 这种级 ， 就是现在我知道了 ， 这样的错误提示显然是 Windows 抛出来的 。

**吴涛** [43:51]
OK。

**Rio** [43:51]
就是 Windows 作为一个就是抢占适多任务的系统 ， 它可以探测到程序访问了不该访问的那一层 。

**吴涛** [43:57]
嗯哼 。

**Rio** [43:58]
所以它就会抛出这样的错误提示来 。

**吴涛** [44:01]
OK，OK。

**Rio** [44:02]
对 ， 就我相信这种情况就是 ， 我相信这种情况如果在 Mac，MacOS 10 上发生的话 ，MacOS 10 会很简单的让它 crash。

**吴涛** [44:09]
嗯哼 。

**Rio** [44:10]
然后跳出来一个对话框说 ， 啊 ， 你刚才的这个程序 crash 了 ， 你要发送一个错误报告给 Apple 吗 ？

**吴涛** [44:16]
啊 ， 对啊 ， 这个 ， 这个 ， 诶 ， 现在 ， 现在 Windows 不是这样的吗 ？ 我已经好多年没有用了 。

**Rio** [44:20]
我不知道啊 ， 就咱们两个都不是 Windows 用户 ， 我觉得这其实可能有点偏颇 。

**吴涛** [44:25]
不过 ，不过其实我起码到 Windows 7 的时候我还是有这个印象 ， 就 Windows 上面就一旦出了任何预料之外的事情 ， 它的那个错误提示都是非常的用户不友好 ，highly user-friendly。

**Rio** [44:40]
而且它 ， 对 ， 它 ，而且它一定要你点一下， 就是一定要跳出来告诉你啊 ， 这玩意儿挂了 。

**吴涛** [44:44]
对 ，而且 。

**Rio** [44:45]
你确认嘛 。

**吴涛** [44:45]
而且 。

**Rio** [44:46]
你点 OK 吧 。

**吴涛** [44:47]
是 Win 7 还是 Vista 里面这个问题超严重 ， 就是它每次就出现任何系统级别让你提示的东西啊 ， 它会把就所有的都灰掉 ， 只出现那个框 。

**Rio** [44:58]
对 。

**吴涛** [44:58]
就你 ， 你没有办法去 ， 去忽略它 。

**Rio** [45:01]
嗯 。

**吴涛** [45:01]
然后就会导致一个问题就是 ， 那普通用户他反正他也看不懂那个在说什么 ， 对吧 ？ 然后他就点了 。

**Rio** [45:07]
嗯 。

**吴涛** [45:08]
你再多出几次之后， 它就见到那个框就点 ，也不管他们说什么 ， 就会导致它有一个这个叫什么 ， 防止这个恶意程序的一种机制嘛 ， 对吧 ？

我记得是 Vista 里面开始有的吧 ？ 然后就它 ，但是因为这个 ， 它把用户训练的只要遇见那个框就点 OK， 就所以其实那个机制等于有了等于没有 。

你用 ， 你 ， 你不断去烦用户说 ， 啊 ， 这个程序会怎么样 ， 啊 ， 那个程序会怎么样 ， 这就是这个 ， 啊 ， 所有的都去死 ，不管了 ， 甚至就很多 。

**Rio** [45:35]
就好像不停的弹窗 ， 那么用户养成了习惯就是一键弹窗 ， 立刻点关闭 。

**吴涛** [45:40]
对 。

**Rio** [45:40]
如果你不停的跳对话框 ， 用户的习惯就是听对话框出来不去读 ， 立刻点 。

**吴涛** [45:45]
对 。

**Rio** [45:45]
一个可以让它最快消失的键 。

**吴涛** [45:48]
但其实现在我觉得就不管是在什么情况下， 已经是绝大多数用户的就是第一反 ， 第一反应了吧 。

**Rio** [45:54]
对 ， 就我们黑 Windows 的其实很多 Mac 用户也是这样的 。

**吴涛** [45:58]
对 ，不过这是 Mac 上这个情 ， 这个情况小的 ， 小一些哈 ， 就是比如说起码它是从那个十点几开始搭那个 ， 那个叫什么玩意儿 ， 那个就是你点一下， 它要经过它就签证 ， 签名过的程序才可以正常使用那个 。

**Rio** [46:14]
啊 ，在那个 security settings 里面叫 ， 叫 ， 叫认证 authorize developer 之类的那个功能 。

**吴涛** [46:21]
我看一下那个东西叫什么来着 ？ 呃 ， 啊 ， 对 ， 就是 allow apps downloaded from 什么什么 ， 它有三个选项嘛 ， 比如说它默认 ， 就是默认是允许 。

**Rio** [46:34]
Mac App Store。

**吴涛** [46:35]
App Store 和 Firefox。

**Rio** [46:36]
对 。

**吴涛** [46:36]
And identify the developers and anywhere。

**Rio** [46:38]
对 ， 就是 。

**吴涛** [46:39]
对 ， 这基本上是我 ， 好奇怪啊 ， 我居然没有改过这一项 。

**Rio** [46:44]
你的是默认是哪一个 ？

**吴涛** [46:46]
第二个 。

**Rio** [46:46]
对 。

**吴涛** [46:46]
就是 Mac App Store and identify the developers。

**Rio** [46:49]
对 ， 诶 ，不 ， 你不 ， 你觉得你应该改哪一项 ？

**吴涛** [46:53]
我竟然没有把它改成 anywhere， 这是非常奇怪的一件事 。

**Rio** [46:56]
你为什么把它改成 anywhere？

**吴涛** [46:58]
因为我觉得这不是 ， 我不是在用 ， 呃 ，iOS， 我知道我要干什么 ， 我作 ， 作为一个程序员 ， 我知道我下载的程序是什么 。

**Rio** [47:08]
嗯哼 。

**吴涛** [47:09]
但至少是我认为我知道 ， 所以你不要 stand in my way， 然后告诉我我不应该做什么 。

**Rio** [47:16]
我 ， 我觉得我就 ， 我就 ， 我就是我知道有这三个选项 ， 然后我是故意留的就 ， 就现在这个就是允许 App Store 和这个受信任的开发者 ， 然后这样一个好处就是我从网上下载了一个程序之后， 我可以很清楚的知道这个程序是被那个开发者自己签过名的没 。

如果它是没有被签过名的 ， 那它 ， 然后我觉得它应该是有签名的话 ， 它可能我下的那个版本可能会是一个叫做什么 ， 呃 ，contaminated 版本 。

**吴涛** [47:45]
对 ，但可是你不觉得这一点其实对于你这个层级的程序员来说很 ， 很无稽吗 ？ 就是 ， 呃 ， 你明明也会去用 Brou， 呃 ，HomeBrew 或者是 ， 呃 ，其他的脚本程序 ，有时候这些脚本程序有时候有些安装包它同样是需要你速度的 ， 那这种情况下你其实是这种程序是不会经过 ， 呃 ， 微 ， 微软 ，Apple 的这一套认证机制的 。

**Rio** [48:10]
那我 ， 我用 。

**吴涛** [48:11]
可是你照样会去运行它 。

**Rio** [48:12]
我 HomeBrew 我不用速度啊 ， 我把它那个就是 user local 改成了我自己属于我自己的 。

**吴涛** [48:18]
是 ，HomeBrew， 对 ，HomeBrew 是一个不好的例子 ，但是我的意思是你可以去运行一些脚本 ， 呃 ， 脚本程序 ，而不仅仅是这种 ， 呃 ， 经过 Apple 打包的 bundle 程序 。

**Rio** [48:29]
对 ， 对 。

**吴涛** [48:30]
但那种程 ， 那种程序的安全性是不受这里的控制所保护的 。

**Rio** [48:35]
对 ， 嗯 ， 我想一想啊 ， 我觉得是这样子 ， 就是我 ， 我知道我大部分时候在做什么 ，但是我不保证有时候没睡醒的时候或者是快睡着的时候做的事情都是一定是合乎逻辑的 ， 所以有这么一个安全机制保护一下还是挺好的 。

然后要跳出这个机制其实也很简单 ， 就是你 ， 你双击执行那个 App，不行的话你就右键调出那个 ， 那 context menu， 然后点 open 的话 ， 它就可以绕过那个限制 ， 它会确 ， 它会问你确认一下， 你然后你就再二次确认一下就可以直接执行了 ， 你也不需要把这个 ， 这个选项调成 allow from anywhere， 这样也就杀伤面比较大嘛 。

**吴涛** [49:14]
对 。

**Rio** [49:14]
所以 ， 啊 ， 就哪怕是你知道你在干什么 ， 就好像 ， 就好像很多车 ， 你开车一样 ， 对吧 ？ 你虽然你知道你是怎么开 ，但是我觉得有这么一种安全机制还是不错的 。

**吴涛** [49:27]
嗯哼 ， 对 ， 我其实刚才惊讶的是我这台电脑买来也有 ， 呃 ， 两个月了 ， 就是买了一台新的 MBP。

**Rio** [49:37]
嗯哼 。

**吴涛** [49:37]
然后这两个月里面我居然从来没有改过它 ，也没有察觉到任何不正常 。

**Rio** [49:43]
对 。

**吴涛** [49:43]
或者说没察觉到任何不便 。

**Rio** [49:45]
所以说明两个问题 ， 对吧 ？ 要不你就是用的第三方软件比较少 。

**吴涛** [49:51]
嗯哼 。

**Rio** [49:51]
要么就是 ， 就是你遇到的都是那种就签名过的嘛 ， 至少是 。

**吴涛** [49:58]
对 。

**Rio** [49:59]
下载这种 。

**吴涛** [50:00]
还证明了第三个问题就是 ， 还证明了第三点就是其实你的选择是比较理智的 ， 我有点太 over opening。

### 输入法

**Rio** [50:08]
对 ， 就 ， 哎 ， 我 ， 我是 ， 就刚才讲了 ， 我们刚才也在讲不想折腾嘛 ， 这也是其中一个 ， 就是我之前还说了这么一个事情 ， 就之前我打那个在 Mac 上打中文输入法 ， 都用一个叫做 ， 呃 ， 鼠须管的一个 ， 一个 。

**吴涛** [50:24]
对 ， 我也用过 。

**Rio** [50:24]
你也用它 ， 对吧 ？

**吴涛** [50:25]
嗯 ， 对 ， 这如果有听众不知道的话 ， 鼠须管是中文界最好的输入法 ， 没有之一 。

**Rio** [50:32]
对 ， 然后 。

**吴涛** [50:32]
免费为这个佛镇做过广告 。

**Rio** [50:34]
对 ， 哎 ， 对 ， 连 ， 那个链接我们可以放到这个里面 ，不过那个东西其实还不算用户特别友好 ， 它的那个要改设置是要改配置文件的哦 。

**吴涛** [50:44]
诶 ，但在 Mac 上面有一个 GUI 可以用的 ， 对 ， 对 。

**Rio** [50:49]
把那个也到时候连进去吧 。 但 anyway， 我想说的是我最近把那个鼠须管关掉 ， 然后开始用那个系统默认的那个拼音输入法 ， 就自带的那个 。

**吴涛** [50:57]
嗯哼 ， 感觉怎样 ？

**Rio** [50:58]
竟然还不错

， 就是我没有觉得效率有特别大的影响 ，但一方面是因为我最近打中文也打的不多哈 ，其实也无所谓 ，因为日常的都是英文的比较多 ， 然后中文的话也就仅限于给你们发发邮件 ， 聊聊天之类的 。

**吴涛** [51:16]
嗯 ，是这样的 。 而且我觉得鼠须管让我觉得很不爽的一点就是我在输入 ， 我不知道自带的中文输入法有没有这个问题 ， 就是你在输入这个德语的叫 umlaut 的时候 ， 就是有些字母上面要加两点 。

**Rio** [51:31]
嗯哼 。

**吴涛** [51:32]
在这种情况下， 如果是 Mac 的英文状态 ， 呃 ， 可以通过 alt 加上 u 来输入两点 。

**Rio** [51:40]
嗯哼 。

**吴涛** [51:40]
然后再按一个字母 ， 这样就可以形成这个字母上面加两点的这个组合 。

**Rio** [51:45]
嗯哼 。

**吴涛** [51:45]
但是在鼠须管里面是没有的 。 我还其实我一直想要给佛镇提一个 bug， 呃 ，bug request，因为有些组合键在鼠须管下面是可以按出来的 ，但是这个没有 。

**Rio** [51:58]
所以它是因为有 ， 它被占用了吗 ？ 还是怎么样 ？

**吴涛** [52:01]
应该不是吧 ， 就比如说在鼠须管下面你按 alt 加 a， 你可以打出这个 。

**Rio** [52:08]
API。

**吴涛** [52:08]
就是 。

**Rio** [52:09]
是吧 ？

**吴涛** [52:10]
不是 API， 应该是那个挪威语的 o， 就是 a 上面加一个圈 。

**Rio** [52:15]
OK。

**吴涛** [52:16]
我不确定啊 ，但应该是可以的 。

**Rio** [52:18]
嗯 。

**吴涛** [52:19]
但是 ，但是在 ， 呃 ， 你要想打 umlaut 的时候就不可以 。

**Rio** [52:24]
啊 ， 诶 ， 我觉得它可能 umlaut 是不是也是类似一种 IME 的方式来实现的 ？ 你看 。

**吴涛** [52:30]
呃 ，umlaut 叫 ， 就是这种 ， 就是你先按一个键 ， 再按其他键 ， 然后这两个键组合成一个字母的方式叫做 deadkey。

**Rio** [52:38]
嗯 。

**吴涛** [52:39]
Deadkey 应该不是 ，deadkey 应该是可以通过被 ， 呃 ，IME 改变的 ，但是 ， 嗯 ， 我相信它是可以不去改系统既有的这种 deadkey scheduling 的 。

**Rio** [52:52]
OK。

**吴涛** [52:52]
那所以 。

**Rio** [52:53]
对 ， 我也不是 ， 我也没有做过这些东西 ， 我只只是我猜想嘛 。

**吴涛** [52:56]
那你可以给它提个那个 bug request。

**Rio** [52:58]
对 。

**吴涛** [52:59]
Pull request。

**Rio** [53:00]
你自己改了好了 。

**吴涛** [53:01]
Bug request， 呀 ， 我不知道 ， 我不知道怎么改 ， 我太弱了 。

**Rio** [53:06]
不 ，但是 。

**吴涛** [53:07]
对 ， 我相信 。

**Rio** [53:07]
这等等 ， 呃 ， 鼠须管是用什么写的 ？C，C++？

**吴涛** [53:11]
呃 ， 好问题 ， 我不知道 ， 没有 ， 没有 ， 没有关注过 。

**Rio** [53:15]
对 ， 就我昨天 ， 对 ， 我昨天去面试的时候 ， 呃 ， 对 ， 听众朋友们 ， 我作为一个目前你们还不太了解的主持人， 昨天我去面试新工作了 ， 就是在面试的时候 ， 呃 ，他们给了我一个一道面试题 ， 面试题里面写说 ， 呃 ， 最好能用 C++ 解决 ， 然后我心里就流汗了 ， 我说 ， 呃 ， 这个招聘简历上可没写说一定要会 C++，而且我真的是不会 C++。

然后我就说 ， 我怯生生的问 ， 我能用 Python 写吗 ？ 然后他们说可以 ， 然后我用一秒钟写出来了 。

### 尾声

**吴涛** [53:54]
效率 ， 效率顿时就不一样了 。

**Rio** [53:56]
对啊 ， 对啊 ， 我觉得 ， 对 ，但是我也不是很骄傲 ，因为 ， 呃 ， 我觉得如果能用 ， 能在十秒钟之内用 C++ 写出来可能更快 ， 可能更会受到激赏 。

**吴涛** [54:07]
你这样用一秒写出来更爽 。

**Rio** [54:10]
对啊 ， 一秒可能夸张了 ， 可能三秒 ， 就是毕竟要写一个 。

**吴涛** [54:15]
打几个字是吧 ？

**Rio** [54:17]
嗯 ， 对 ， 就是一个 。

**吴涛** [54:18]
诶 ， 你 ， 你有在找工作吗 ？ 我们又岔开了 ，不过 anyway， 岔开吧 。

**Rio** [54:22]
呃 ， 目前还没有啊 。

**吴涛** [54:24]
你想 ， 你是什么时候毕业 ？

**Rio** [54:26]
呃 ， 理论上是明年吧 。

**吴涛** [54:29]
OK， 啊 ， 对 ， 我们的嘉宾主持 Rio 现在还在读博士 ，Rio 博士你好 。

**Rio** [54:34]
呃 ，不 ，candidate， 还 ， 还没 ， 还不算 。

**吴涛** [54:37]
呃 ， 对 ， 就是 Doctor。

**Rio** [54:39]
博士生 ， 对 ， 博士生 ， 博士生 。

**吴涛** [54:42]
Doctor Rio 刚刚毕业 。

**Rio** [54:44]
对 。

**吴涛** [54:45]
啊 ， 北京时间 ， 啊 ， 百分号 H 点百分号 M 分 ， 您现在所收听到的是 《 内核恐慌 》，由 Doctor Rio 刚刚毕业的吴涛为你主持的一款 ， 嗯 ， 普通人也能听懂 ，但是普通人一般不会来听的 IT 播客节目 。

**Rio** [55:02]
你确定普通人能听懂啊 ？

**吴涛** [55:05]
啊 ， 程序员能够听懂 ，但是程序员应该不一定能听懂 。

**Rio** [55:08]
嗯 。

**吴涛** [55:08]
我们做成程序员能听懂 ，但是程序员来听 ， 然后普通人不会听的播客就好了 。

**Rio** [55:16]
或者说 ， 呃 ， 程序员都喜欢听 ，但是程序员甚至不一定能听懂的播客节目 。

**吴涛** [55:22]
那倒是吧 ， 感觉 。

**Rio** [55:24]
No, no, no， 这样会让程序员产生一种挫折感 ， 然后会 ， 呃 ， 奋发图强去 ， 去 ， 去学到能够来 bitching 我们的节目的种种微小的错误的水平 。

**吴涛** [55:36]
嗯 。

**Rio** [55:37]
这就达到我们节目的目的了 。

**吴涛** [55:39]
OK。

**Rio** [55:41]
所以怎么样 ， 今天到此为止吗 ？

**吴涛** [55:44]
啊 ， 我们录了多久 ？

**Rio** [55:46]
差不多 。

**吴涛** [55:46]
不到一小时 。

**Rio** [55:48]
不到一小时了 ， 对 。

**吴涛** [55:49]
OK， 对 ， 那我们 。

**Rio** [55:50]
还是控制在一小时内吧 。

**吴涛** [55:52]
OK， 就这样戛然而止 。 那么 ， 呃 ，不知道各位听众听了之后 。

**Rio** [55:57]
那个字念 " 夹 " 呀 。

**吴涛** [56:00]
不念夹吗 ？

**Rio** [56:00]
我不知道 。

**吴涛** [56:01]
英文不好 。

**Rio** [56:01]
我 ， 我 ， 我经常会念错字 ， 然后被 ， 被听众那个直触 ， 然后啊 ， 原来这个字这么念 。

**吴涛** [56:09]
啊 ， 真的是念夹 。

**Rio** [56:10]
希望是戛然而止 。

**吴涛** [56:11]
对 ， 假如你听 ， 你认为这个字有其他的念法 ，也请你 ，也欢迎你连同其他反馈告诉我们 。

**Rio** [56:17]
诶 ， 我们 。

**吴涛** [56:18]
啊 ， 我们的 ， 对 。

**Rio** [56:19]
要有一个反馈 。

**吴涛** [56:20]
我们的 producer 是 Lawrence Lee，他会为我们剪辑今天的这款节目 。

**Rio** [56:25]
嗯哼 。 啊 ， 我们还有 ，有 ， 我们还没有社交媒体哈 。

**吴涛** [56:29]
我觉得 ， 对 ， 暂时如果有反馈的话 ， 可以直接反馈给 IT 公论 ，IT 公论的 Twitter 账号是 IT 公论的全拼 ， 嗯 ，Twitter 我在模仿 Lawrence。

**Rio** [56:40]
不不 ， 这个算 ， 这个我们发 ， 我做 ，有一个邮箱地址吧 ， 到时候会有一个 ， 就每个播客在 IPN 都会有一个邮箱的嘛 。

**吴涛** [56:47]
对 ，但是每个播客会在 Twitter 或者是微博上面有自己的账号嘛 。

**Rio** [56:52]
下次吧 。

**吴涛** [56:52]
叮咚 。

**Rio** [56:54]
等等 ， 等等 ， 等等 ，不要下次了 。 事实上在我剪辑播客的时候 ，Rio 已经效率非常高的把 《 内核恐慌 》 的社交网络账号注册好了 。

我们在新浪微博和 Twitter 都是叫 Kernel Panic Fm，Kernel Panic Fm，K-E-R-N-E-L P-A-N-I-C Fm。

啊 ， 所以观众朋友有任何反馈可以给我们写邮件哈 ， 邮件地址是 Kernel Panic，K-E-R-N-E-L P-A-N-I-C at I-P-N dot L-I。

**吴涛** [57:28]
写在一起 ， 中间没有 dot 或者是 dash。

**Rio** [57:30]
对 ， 然后不分段 。

**吴涛** [57:31]
也没有下划线 。

**Rio** [57:33]
有点长 。

**吴涛** [57:36]
会 。OK， 那今天节目先到这里 ， 然后我们下期再见 。

**Rio** [57:41]
OK， 拜拜 。

**吴涛** [57:42]
拜拜 。

---

本节目库由 PodHood（https://podhood.com）提供支持——播客网站平台。
