周六,但这间机房现在周六不空了——Ossanna 拉来的人在这里干活。
数字先报:排版工具上线一周,专利部门三个打字员已经用它出了十几页真文档。不是测试,是活儿。Kernighan 把这事写进了申请材料的补充论证,标题起得很会:”非开发部门的实际使用记录”。我看了那一页,心里给它批了句语:这一页纸比我上周憋的所有”潜力”都值钱。 “别人也会用”这道题,答案不是写出来的,是长出来的。
下午出了个好事故:B 编译器被压垮了。
排版程序比之前所有 B 写的练手玩具大一个数量级。编译到一半,编译器自己先出错了——不是源程序的错,是编译器的错。Ken 排了两个小时,找到一个 bug:编译器内部的一张表,按玩具程序的规模开的,真程序一进来就溢出,而且溢出得悄无声息,踩了别人的内存。
我站在旁边看,这个场面对我来说有种奇怪的双重曝光:一门刚满两周的语言,被它编出来的第一个正经程序压出了第一道裂缝,然后它的作者把裂缝补上。语言不是设计出来的,是这么被碾一遍、补一层,碾一遍、补一层,滚出来的。Ritchie 下午过来,看了一会儿说:”这个错以后还会有。“Ken 说:”嗯。”
两个人加起来四个字。但我听懂了:他们不是在修 bug,是在给语言定预期——语言会被用坏,用坏了修,修完更结实。这就是教科书上叫”演化”的东西,此刻它就是两个人对着一张内存布局图皱眉头。
傍晚的事记一笔。打字员里有个姑娘,用编辑器用得最熟,提了个意见:每次排版都得她手动跑三步——存文件、调排版程序、回终端看样张。她说:”机器能不能自己走完这三步?“
McIlroy 正好在,烟灰弹在门边,接了话:”她比你们管理部门懂系统。中间那个跑腿的,本来就不该是人。”
Ken 没说话。但我看见他把手边那张画了格子的纸翻过来,在背面画了三个框,框之间两根箭头,然后在第一个框上写了个词:编辑器。写完盯着看了很久。
管子不是从设计里来的,是从一个打字员的抱怨里来的。我端着咖啡把这句话咽了回去。本月第十三句。
本子第十六条:需求的最高形态,是用户替你把系统该有的样子说出口——她自己不知道她说的是什么。