GARBAGE IN, GARBAGE OUT


      雨后的下午, Jack来到我的办公室,心怀忧虑地对我说,他担心他们小组手头上正在做的一个Utility Module在今后使用中可能会出问题,理由是不知道在今后使用之中什么东西将被输入进 module。我知道,这种担忧不无道理,因为Utility Module与其他一般的Module不同之处,它所处的使用情况和环境是事前难以预料的,仅举一例,它可以被各种各样的plug-in使用。但是,对整个Applications for online services而言,这是个必要的Module,否则整个Applications在Internet就失去了原有的意义。所以,这是不得已而为之。我安慰他说,既然我们开过几次会议作了mathematic prove, 在理论上module自身应该是没有问题。我们Computer Science不是有句名言“Garbage in, Garbage out”嘛,只要module是正确的,遇到麻烦也不会伤害到自身。记住这句话,你就可放宽心了。Jack笑了,点点头回去了。

      在回家的路上,交通阻塞,汽车只好在Freeway上缓慢地爬行。我脑海里不知怎的冒出了当年读书时的情景,有次,我对一个algorithm一反常规地用了它,任课的教授看了不明白,结果判我错,我自然不服气,当场在Computer Lab里run给他看,output都是正确的。教授张着大嘴,说不出话来,最后只说了句“amazing”。然后,我向他解释, 这个algorithm只要是正确的,起点不管是从左还是从右,是从前还是从后,其最后的结果应该是相同的。他回去以后琢磨了半天,才把成绩还给了我。第二天上课时,他笑嘻嘻地对其他同学说,我把computer science 改成为computer arts。我不知道这话是夸奖还是讽刺,或者兼而有之,反正我默然无声地把此话当补药。由此联想到自己下午讲的“Garbage in, Garbage out”,我猛然地省悟出,这条原则不是同样也可以适用于人在社会,以至于人在现今的社网上吗。假如我们把人看作一个Module,也会有相类似的发生。面对着光怪陆离故作惊人的语言,天马行空捕风捉影的根据,玄而又玄覆盖环宙的发现,口沫横飞肆无忌惮的断言,当然其中有的是真Data,有的就是Garbage。怎么办?拒之门外是不足取的,除非Module愿与世隔绝,而放其进入才为正确。之所以如此,是因为这种方法既可检验输入之物是否是Garbage,也可检验Module本身是否有问题。一般来说,无非会出现四种情况:Data in, Data out; Garbage in, Garbage out; Data in, Garbage out; Garbage in, Data out。前二者是正确的,而后二者则反映出Module自身存在着bugs。Data无论怎么被忽视掩盖,毕竟还是Data,而Garbage无论如何蛊惑鸣噪,终归还是Garbage。要扫除世上一切的Garbage,我们既没这个气魄(老人家“要扫除一切害人虫,全无敌”之气概,我们是望尘莫及),也没这个能耐,更没那个必要。而必要的则在于Module自身的免疫力, Garbage又从反面证实了Module是否具备这样的能力。Module有bugs无须大惊失色,fix就可以了,bug free software只是理想而已,不过,如果Module被corrupted,并且无法fix,那也就无可奈何的了。如果有人问,输入之物是Data和Garbage混杂一起,又如何处置?我的回答,最简单的方法是一经发现,把它们统统kick out,倘若还想做些挽救, 那只有修改algorithm,或者加些与之相适应的functions (or called methods in Java)。至于Data input是否能用,则须看关键之处是否被corrupted, 否则,神仙也难为。


2010年3月,写于临水阁

1 則留言:

  1. 这篇文章曾经在万维读过,现在重读,更能体会到潜兄用心良苦。

    计算机科学中潜伏着很多的哲学呢:-)

    回覆刪除