cover
黄兢成 2018年2月12日 23:36

从过去找原因

新技术面世时,处于特定社会环境中,或多或少会有限制条件。假若完全没有限制条件,其他人早已想到做到,就不是新的了。为绕开某限制,有时会采用一些迂回做法。当新技术普及开来,那些迂回做法也就成为事实上的标准。慢慢地,当时的限制条件已经不存在了,再来看那种迂回做法,就变得很奇怪了。

甚至仅仅是最初那批人的喜好,也会导致今天看来奇怪的做法。有多种可能时,结合当时环境和限制,往往可以排除大部分可能性。有时只有唯一可能性,有时剩下几种没什么优劣之分的可能性,这样就凭个人喜好挑选一种。某人可能喜欢扔硬币,就扔硬币来决定。幸运被挑中的做法就成为标准,延续到今。

因而,从过去找原因就变得很有必要。回顾过去,翻查当时的环境、限制,甚至当初那批人的性格和喜好,今天看来难以解释的事情,会变得很自然而合理。

试举两个例子:

ADM-3A 终端机

在 Unix 风格的操作系统里面,包括 Linux, macOS,当前用户的主目录被称呼为 Home 目录。这个 Home 目录会用波浪符号~来表示。

第一版的 Unix 系统是在 1971 年出现的,1972 年重新用 C 语言编写 Unix。当时流行 Lear-Siegler ADM-3A 终端机,看看它的键盘布局。

右上角的 Home 和 ~ 是放在一起的。

ADM-3A 键盘布局也解释了为什么 vi 中使用 hjkl 来表示方向键。当年 Bill Joy 就是在 ADM-3A 终端机中敲出了 vi。vi 常用的 Esc 键在 ADM-3A 处于今天 Tab 的位置,按起来也算顺手,不像今天这样处于反人类的左上角。

删除键编码 127

ASCII 编码是有规律的,并非随意乱排。计算机是二进制编码,我们将每 32 个字符作为一个组。组 0,编码从 0 到 31 都是控制字符,组 1、2、3,编码从 31 到 126 都是可显示字符。而 127 代表删除键。

为什么删除键作为控制字符,要编码为 127,而不放在组 0 呢?

删除键编码为 127,可追溯到打孔机。打孔机的纸带中,对应位为 0 就不打孔,对应位为 1 就打孔。一卷全新空纸带上完全没有孔,自然表示全 0,也就对应于 ASCII 的控制字符 Null。那在打孔机上打错字符时怎么办好呢?纸带中不能将已打的孔填上,于是当打错字干脆将其全部打孔,表示这一个字符被省略或者删除。全部打孔就是二进制的 7 个 1,对应十进制编码 127。于是删除键编码为 127。

有关 ASCII 更详细内容,请看 为什么ASCII被摆放成现在这个样子?

其它补充

另一种解释是 441000 是个特别的数字,是最小几个素数的平方相乘, 441000 = (2 * 2) * (3 * 3) * (5 * 5) * (7 * 7),这些素数因子可能有助于系统实现时的频率合成。

另外有关时间戳和Bill Gates 的一个有趣的故事,可以看这里 我的第一次 BillG 评审 。阮一峰翻译的《Joel谈软件》第一章也是故事。

相关阅读
  • 推荐阅读
  • 文章导航