周五。今天浮出来一个结论:这套系统被名字卡住了,而这次逼它的不是预算表,是一沓纸。
上午 Kernighan 抱着一叠写满字的纸进机房。他写完了前六个命令的说明——一页一个,第一行给用法,底下两个例子,最短的不到十行。他把纸往桌上一放,问 Ken:
“这能印出去吗?”
Ken 扫了两眼:”能。”
“那就得有个名字。”Kernighan 指着最上面那张纸的抬头,”手册第一页得写它叫什么。总不能印’那台机器上的东西’。”
屋里静了三秒。
上周 Morris 的表格要名字,那是账的事,Ken 可以不接。今天要名字的是手册——是要递到外人手里的东西。一个东西想被外人学会用,先得有个能被人喊出口的称呼。这不是面子问题,是效率问题:手册里每写一句”这个系统”,读者就多分一次神。
Ken 的答复还是老路数:”先写后面那几页。”
Kernighan 没跟他磨。但他出门前留了半句给我:”名字不是我编得出来的,得他们自己认。”
下午 Ritchie 过来,把名字这件事翻了个面。
他说,名字不该是标签,该是你希望别人记住的那一个特点。一个系统有很多属性——便宜、小、能同时伺候几个人、命令能拼起来。你得挑一个塞进名字,挑中的那个,就变成所有人看它的第一眼。
我端着搪瓷杯站旁边,嘴里那个词又开始滚。
九月十二号那回(第十七句),我咽下去的是它的形状。今天咽下去的是它的来路:它得从一个笑料里长出来。 Multics 那名字念着像庙堂,贵、大、要一整层人伺候,最后被拆成部件运走。得等他们先把这个笑柄嚼够,才会想到反着来——用一个讲”一次只伺候一个人”的短词。它不是设计出来的,是拿对手的名字剜了一刀剜出来的。
第二十七句。 咽了。理由跟上次不一样:上次是怕偷,这次是怕早。现在说出口,它是个俏皮话;等他们自己嚼够了再说出来,它是一份宣战。
中间帮 Kernighan 校了一页。他问,要不要在用法后面补一段”为什么这么设计”。
我给了个 1969 年听得懂的回答:读者不在乎你为什么这么设计,他在乎自己敲错的时候机器会不会骂他。把”敲错了会怎样”写清楚,比写一百句原理管用。
他划掉两行,改成:”敲这行,得这样;打错这个字,机器回你这一句。”
石头踢过去了,捡不捡是他的事。这不算破功——手册那套写法,本来就该被它自己的读者打回来几遍才成形。
傍晚 McIlroy 来了,把 Kernighan 那沓纸一页页翻过去。翻到第六页他停住了。
“你发现没有,”他说,”你这六页长得一模一样:读一个文件,写一个文件。”
Kernighan 说,命令不都长这样。
“那就怪了。”McIlroy 把烟叼上,”既然每个都读一个、写一个,为什么中间非得有人把上一个吐出来的东西先抄到纸上,再喂给下一个?让它们自己对上不好吗?”
屋里没人接话。Ken 在角落敲电传打字机,手上停了一下,又继续。
管子这一截,今天又往前铺了一小段。
McIlroy 把纸放回去,补了句关于手册的实话:
“写手册的人不该是作者。作者自己看得懂自己写的东西,所以他这辈子写不出给外人看的东西。”他顿了下,”代码坏了,机器知道;手册坏了,只有人知道。机器不会替你喊疼。”
回宿舍路上买报纸。体育版一片棒球:大都会队拿下分区第一之后,全城开始算下一轮,连卖热狗的都在聊。赛季前报纸管这支队伍叫笑话,现在管它叫奇迹。名字没变,里头装的东西变了。
本子今天两条:
第三十一条:一个东西想在别人手里活下来,先得有一个能被喊出口的称呼。
第三十二条:手册不是写它是什么,是写给第一个看不懂的人——那个人的问题才是目录。
(今日咽话一句,累计第二十七句。)