刘天北
据说,我们生活在 一个“知识爆炸”的时代。作为专业软件开发者,我对此颇有些切身体会——事实上,我所在的行业就是这次爆炸的重灾区。选择开发软件,就是选择被弹坑包围的、近乎偏执的思维方式:在这样一个产品按照摩尔定律更新,技术以井喷速率向我们涌来的产业中,永不停顿的学习和追赶技术前沿似乎成了唯一可行的生存之道。
要是在这种语境里谈论“教材”,未免会显得笨拙和老套。“计算机教材”,在不少人听来简直是一个矛盾修辞(oxymoron)。每天,甚至每小时都会有几种新技术、或是核心技术的新版本出现,大多数开发人员都在为赶上趋势疲于奔命,若干年前出版的一本旧书与我们何干?教材至多是一瓶过了气儿的酒,代表着那些早该归档入库的旧概念、旧思路。是呀,在知识爆炸的弹坑里为计算机教材辩护,不啻于号召大家搬进博物馆办公。
毫无疑问,如果上述种种全都属实,那软件行业所面对的就只能是一幅狰狞的图景。任何平凡的个人,在无止境的逐新挑战下,都终有一天会力不从心、败下阵来。素闻软件开发是“青春饭”,30岁是开发人员的退休年龄,这些都是上面的知识规律的有效推论,并也在国内不少地方已经成为令人难堪的现实。
我反抗事物的这种状况。依我看来,上面给出的,只是关于知识的一幅似是而非的漫画,远没有描绘出软件业内恒常与革新之间、原理与应用之间、教材与实践之间种种复杂而细微的张力和互动。事实上在不少软件业发达的国家,企业的技术骨干往往是30至40岁的开发者;相应地,不少十几年、几十年前出版的教材至今仍被奉为圭臬。一个例子?Marc Fleury,JBoss的主要设计者就曾坦承,这种当前构架最先进的应用服务器中的核心技术“客户端拦截器(client side interceptor)”,其灵感源自60年前Allan Turing关于自动机的论述。从这个意义上讲,一本书页发黄的教材中包含的现实性,远比不少刚出锅的资料更丰富。
近年来“复用性”是软件开发追求的重要目标。在学习领域,研读教材不失为提高学习过程可复用性的上选策略。所谓举一隅而反三隅,我见过一些基本功扎实的开发者,学习任何新应用的速度都远逾常人。可见多读教材,熟知技术应用背后的原理,能使人以少许胜多许,进而降低学习新事物的成本,摆脱面对前沿技术的被动态度。
要说明上面的道理,恐怕首先得看看“教材”和“教程”的区别。教材(textbook)是某一学科领域的经典读物。我们称赞一个漂亮的解决方案,常说“这可以写进教科书”,含义正在于此。与之相对,教程(tutorial)是对特定技术的使用介绍。在一些短视的、急功近利的语境中,这二者往往容易混同,甚至不少人轻教材而重教程,看到内容稍微详尽的教程就大呼“经典”——这只能是心态失衡引发的谵妄。教材和教程虽然名称相近,实质上却代表了知识的两种极端样态:教程让人知其然(know-how),教材令人明其所以然(know-why);教程使用概念,教材塑造概念;教程倾向于灌输,教材偏爱启发;教程重配置,教材重原理。俗套的说法还爱用主食/副食,或是武侠小说中的内功/招式的对比来描述这二者间的关系。依我看来,这些隐喻未必搔到了痒处,但都肯定了一点:无论对于个人还是行业,单纯推崇教程而忽略教材,都只能将自身引向灾难。
据说不少人由于小时被迫背诵诗歌,成人后患上了叫做“恐诗症”的心理疾病。我猜想那些反感教材的人们,也是国内可悲的教育体系的牺牲品。这些人想起教材,脑中浮现的首先是一种难以下咽、无法消化的锯末类食物。但在我个人接触的国外技术读物中,好的教材远比好的教程可读。国外教材中的名著往往为大师巨匠所作,发达国家的软件业看重表达能力,光有内在美,不善交流也不成——所以越是名家手笔,文章越平易,表述越直观。大师之所以为大师,在于他们对概念把握得更准确,并能以最明晰的方式传播给世人——当他们在著作中首次引入某个概念时,就更在意表达方式是否易于接受。所以在你自己足够清醒的时候,好的教材往往并不使人如坠雾中,反而会时时引发惊叹:我怎么就没想到这个!
教材的可读性优势还在于它对“参与”的鼓励。一般我们看到的各种教程,多为国外企业的商业文档的衍生物。所谓商业文档,大致是使用手册(user manual)或是速成指南(quick start)性质的技术资料,叙述风格以线性的平铺直叙为主,喜欢“手把手”的灌输。这是麦克卢汉(Marshall McLuhan)所说的“热媒体”,学习者的参与程度降到了最低。相反,好的教材的叙述总是启发、对话式的,主题往往在循环中得到深化。故此教程往往诉诸运动神经,它是一种指令,让人不由自主的跟从和忙碌,而教材则使人从盲动中抽身而退,赋予人独立思考的能力。
以我个人所见,技术行业里,大师巨匠大多自信、安恬,温和有趣,水平低得多的技术人员反而常常自矜于一得之见,对旁人摆起面孔。相应地,很多教材名作也都面目有趣,语言温醇,甚至不少段落漂亮得都可以拿去做英语范文。而你很难从大多数教程作者那里指望考究的文风,他们的典型句式是:“读完下面的10页,你将学会a...b...”——要是再加上一个电话号码,这就能构成不错的电视购物广告。
在读书方法上,据说,波普尔(Karl Popper)刚到伦敦大学经济学院(LSE)时,发现学生课程里有一门叫“速读(speed-reading)”。他先生居然跑去问院长,他能不能开门课教人“慢读”。即使是对于计算机教材,卡尔爵士的建议也应该有效:别指望今晚读的教材明天就变成现钱,扫描仪式的线性摄入在这里不起作用。越是名著经典,阅读时越需要享受的、反复体味的态度:应该像吃人参果一样善待这里的一字一句,而不是老想着把它当成果味VC,一口吞了。另外,依个人经验,我觉得带着问题读教材往往更合理——这更容易使读者进入富于启发的对话过程。
怎样从大量的教材中找出合适的那本,也是一个困难的选择。人生苦短,读书作为时间上的投资也须慎重,开卷之前看看权威的意见——目前国外有专门的网站(而不只是网上书店)作这件事——对选择阅读,对读书时更好地把握该书的长处和弊病,都会有一定帮助。此外,我个人(不无偏颇)的倾向是:首先考虑国外原文教材。语言远不止是思想的载体。一个核心概念与表达它的语言总是处于一种非此不可的关系中。英语是计算机科学的世界语(相当于拉丁语对于神职人员的作用),要在问题的核心考虑一项技术,再精确的译文都是离题万里的。加之国内技术书籍的翻译现状远逊于一般文献的水平,除个别情况外,译者往往不是国内特定领域的首选专家,无论技术水平还是语言能力都与原作者相差太远。在原文里一个微妙而尖锐的段落,经过译者强作解人的滤波和转换,往往平庸得可以去作社论,对于塑造核心概念的教材就更其如此。
Habent sua fata libelli——西方的很多图书馆内都有这句拉丁文,大意是,书籍自有其命运。而我看来,我们能读到什么书,甚至进一步说,我们如何阅读、如何思考,很大程度上取决于出版/传媒界的生态状况和图书从业者的素质。近年来,计算机教材在国内似乎运数不差。随着著译增多,人们渐渐也对何谓佳作、何谓经典有了趋于合理的认识。前些年大家把一些具体语言开发教程奉若神明的风气,似乎也有了一定转变。其实,在软件业发达的国家中,人们对技术书籍早有成熟的衡量标准——这是一套严密的价值体系,新书的出版,只能依据这个体系找到特定的位置。好比说书名中包括“*** Bible”、“*** in 21 Days”的,究竟针对什么样的读者,大家心里自然有数。而国内出版者对这一套潜在的规则的理解也许还有待加深,很多时候还是依靠一些所谓“buzz words”来判断是否引进。事实上,在信息全球化的今天,图书从业者掌握类似的知识无需成为技术专家。这里只要恰当的英语能力,也许再加上一点对图书的热爱就已足够。在一篇谈软件工程经典《人月神话》的文章中,我曾经回忆在一次印度之行中购买影印版教材的情形,我也愿意以此结束本篇:“...第三或四层是技术专区——我开始只找到了Jacobson们的OOSE(有点困惑于复杂的书店布局)——看到另外一人手中的Software Project Survival Guide——我求助于一个店员,他立刻拿给我那本书,和一本《人月神话》——另一个店员看到它们,又递来一本《人件》…”。对于一个技术读者,这是难以忘怀的体验。