第一次读《UNIX编程艺术》是2004年的夏天。那时我正忙着把一套只肯在Windows上跑的分布式存储系统移植到UNIX和LINUX上来,业余时间里则正在北大裘宗燕教授的指导下,一字一句地翻译“古奥艰深”的R5RS;于是,像《U
真正从书中学到了什么,现在已经很难说清楚了。只是隐约记得,《UNIX编程艺术》一开头罗列出的那一大堆Rules着实让我陶醉了一阵子。此前对UNIX的认识几乎都是零散的。从make到cc,从emacs到gdb,从ssh到xinetd,尽管我知道在遇到障碍时去howto或faq文档中翻找答案,知道在不知所措时请出开源软件的代码来帮忙,但我却总也想不明白,一个普通的程序员该怎样才能在UNIX的世界里从无到有地勾画出一幅真正属于自己的图景。一种强烈的恐惧感似乎总是与我形影不离――那是一种独自走进克里特岛或是秦始皇陵的人都会产生的恐惧感,是一位缺乏经验的程序员在UNIX种类繁多的工具、接口与源码面前必然会遭遇的恐惧感。也许,《UNIX编程艺术》里罗列的Rules是治疗这种恐惧感的药方,因为有规则总比没有规则强,有一套充满哲学意味的规则更要比仅有些生硬的技术规约强上百倍。通常,Rules意味着坚定,Rules代表着勇气,就像电影《Transporter》中的男主角一样,当凡事都可以用编了号的规则来描述或阐释的时候,就连黑社会的老大也会不由自主地对你说“I like rules”了。阅读的副产品是一个有趣的可扩展计算工具xeval。我的确是在读过了《UNIX编程艺术》的第五章“文本化:好协议产生好实践”之后才有了编写xeval的想法的。当时,我的思维历程大致如下:多用户、多任务的操作系统必然要为不同的应用提供相互交流的平台;最好的平台应该拥有最简单的实现方案;UNIX利用文本格式实现信息交互的想法符合UNIX的KISS(Keep It Simple,Stupid!)准则;与Windows系统提供的协议或交互方式(注册表、剪贴板、DDE、OLE等等)相比,文本格式就像“天仙美眉”一样质朴和脱俗;质朴和脱俗意味着实现简单和扩展方便;不过通常说来,文本化的做法与命令行方式的应用结合得更好一些;为了在Word或Excel这样的纯GUI应用中发挥文本化的优势,我们需要一些桥梁或隧洞;Windows系统中的热键和剪贴板可以成为GUI程序文本化的桥梁之一;最终实现并发布到网上的xeval就是这样一个可以在GUI应用中嵌入文本化应用的程序原型。
第二次读《UNIX编程艺术》是去年有了一台属于自己的“小白”(Applei Book G4的俗称)之后。在那之前,我一直以为Apple发布UNIX内核的MACOSX是在向UNIX阵营投降,是彻底承认MACOS无法长时间稳定运行的无奈之举。实践表明,我的想法错得离谱。在MACOSX漂亮的外衣下面,Apple的设计师们并没有完全克隆或仿制UNIX的所有“生理特征”:无论是Cocoa的巧妙设计还是Widgets的新颖创意,无论是应用程序的封装方式还是Apple Script的自动化机理,这些区别于传统UNIX架构的系统特征似乎在竭力向我们证明,原本属于Apple的优先“关心用户体验”的编程文化可以和原本属于UNIX的优先“考虑基础设施”的编程文化以某种方式优雅地共存、共赢。由此我很快想到,《UNIX编程艺术》在论述“Unix文化中的问题”时已经专门辨析和比对了两种看似矛盾的编程文化与思维方式,并特别指出“两种设计哲学都有正确的一面”,它们“将会融合在一起,如同过去互联网和早期Unix文化在1980年后的融合一样”。
有了这样的认识,我读《UNIX编程艺术》时的关注重心就很自然地从工具和方法转移到了思想和文化上来。比如,在重读“使用Emacs整合工具”一节时,我不会再有打开emacs动手实验的冲动,反之,我更愿意静下心来想一想:那些非UNIX出身的IDE们(比如Visual Studio)是否已经从emacs这样一个“像IDE一样,但更强”的UNIX工具身上吸收或借鉴了足够多的有用特性?同样是可扩展的IDE环境,Eclipse和emacs之间是否存在本质的差异?当elisp在emacs中发挥着不可或缺的核心功效时,为什么Word里的VBA就只能扮演边缘化的辅助角色?李连杰在影片《霍元甲》中说,茶没有高下之分,武术也没有高下之分――在程序设计的世界里,不同的文化和不同的技术之间,是否也没有高下之分?
第三次读《UNIX编程艺术》是今年电子工业出版社的中译本出版以后。我没有仔细核检过英文版和中文版的文句,不敢妄评译本的翻译质量如何如何。但译本把原书第二章标题中的“A Tale of Two Cultures”译为“双流记”的做法的确值得称赞。要知道,翻译也有风格和流派上的差异。同样是这么一个标题,你可以完全不考虑原文与《双城记》之间的双关性,你也可以用更复杂的句式将原文中的文化内涵阐发得通通透透,但你不得不承认,“双流记”的译法是诸多译法中最有UNIX味道的一种,最符合《UNIX编程艺术》一书反复强调的KISS准则。从这一点看来,UNIX平台上以简约、深刻为特征的编程文化在其他领域也大有用武之地,《UNIX编程艺术》一书勾勒技术脉络,辨析文化源流的论述方式也值得所有著书人和读书人好好品味。