没想到华章已经把这篇序在china-pub上放出来了,那我也就公开了罢。不过更没想到的事情是,这本书有38位作者固然是令人称奇,而这本书(中文版)共有八篇序,大概也是出版中少有的了罢。
一
我上一次印象深刻的美的体验,大概已经是在十年之前了,那只是在午后睡醒,面对窗外的一棵大梧桐树时的感觉。不过这并不是说我这十年来都只看到了丑的事物,而是说我已经忘了去观察既已存在的美。
直到我拿到这本《代码之美》,我忽然地回到了那种仰望着星星烁耀的夜空,或低头沉思于一两句大家文字的日子里。那时刻我既不是在思考,也不是在分析,更不是在解释,而只是在感受自然的、文字的,或将自然蕴于文字之中的,美。
二
有一本书开启了一个时代,而我们如今仍然在这个时代之中而不知觉于这本书的深远影响,
那是三位图灵奖得主合著的《结构程序设计》(1)。其中Dijkstra将人“理解一个程序的种种思维方法”归为三种:枚举、数学归纳和抽象。
显然Wirth先生更为深层地看到了程序的本质,他说“程序=算法+数据结构”(2)。他揭示了这样一个事实:一个未知的、无序的世界是不可能实现“程序”的,于是我们抽象它——使它成为结构,或者对象,或者网,或者某个相对规则的事物。然后,我们再着之以“算法”。
《代码之美》这本书,三十八位大师,在三十三章的内容中详细讨论了代码中抽象的过程、算法的过程和编程的过程。显然的,这些正是程序中最深刻的美。如同花之蕊,叶之脉,以及维系花蕊叶脉的美的,那些汁液。这种对美的触及,使他在我面前闪耀着与前两本书等度的流明。
三
“只有在不仅没有任何功能可以添加,而且也没有任何功能可以删除的情况下,设计师才能够认为自己的工作已臻完美。”(3)然而编程的过程呢?我们最初只是想实现一个功能。但为了实现它,我们写了一段功能代码、一段测试代码、一段功能代码的配置代码,一段功能代码的配置代码的测试代码……
如此往复不休。
我们回到原始的问题,原本只是要做一个“实现某项功能”的代码,我们却为何把代码做到了“往复不休”的绝地?
或者你做的事情并不完美,但是你应该知道所谓完美的终极。代码要不停的测试,以及为测试代码再写测试代码,这一过程也不是美的。或许你认为它“必须”,但你应知道它终究不美。
四
大师们也并没有创生完美的能力,他们只是在一步步地进行着。在这本书里,Adam Kolawa告诉你的,Lincoln Stein告诉你的,以及Elliontte Rusty Harold等等告诉你的,就是那经年累月地或亦步亦趋地进行过程,和那个“终极完美”的定义。
这只是过程和隐于过程中对美的追求。而“美”是什么,还是在你的心底。你心中原本就没有美的感受,如何写得出美的代码?所以代码写到烂处,写到心胸滞涩处,便不如寻一清静所在,捧《代码之美》一册,回顾一下,品味一下,吐故纳新一下了。
看得多远,取决于你站得多高;要想成为他们,你得先知道他们。
这就是我的建议了。
注
(1) 《结构程序设计》出版于1972年,作者分别是1972、1980、2001年图灵奖得主Edsger W.Dijkstra、C.Anthony R.hoare和Dahl。
(2) 《算法+数据结构=程序》出版于1975年,作者Pascal之父Niklaus Wirth,是1984年图灵奖得主。
(3) 出自Antoine de SaintExupery,法国战士与文学家。本书的第3章中Jon Bentley引用。