Category: 读读写写

大江东去,奔流不息

我是非常偶然知道阿耐的:我在抓虾网工作的时候,某天用户反映说一个叫“混水庄园”的blog不更新了,为了验证,我订阅了这个从未听说过的blog。通常,这类问题解决之后我就会退订,如果觉得还有点意思,就“私藏”下来。阿耐的“混水庄园”,就属于我“私藏”的少数。一开始觉得有意思,主要是文章眼光独到:谈论经济总能抓住几个关键地方点评,眼光总高那么一点——最近一次她说到,统计数字当不得真,因为如果把个税起征点调高,就会发现“民众工资普遍上涨,而公司的办公费用等明显下降”。
一开始我喜欢看她的文章的原因就是这么简单,其它方面只知道她是实业家,还写小说在blog上连载,但总觉得她写的小说偏实业,而且连载看起来终究不过瘾,所以总没太多兴趣。去年末今年初,阿耐在blog上说,最新的长篇小说出版了,看下面留言热情洋溢,我终于也有兴趣来看看这部调了那么多人胃口的书,它有一个非常大气的名字:大江东去。

名实相符,《大江东去》本身也非常大气,全书从1978年开始,一直写到1998年,在这个阿耐所言“前所未有的变革时代”中,主要描写了三个人的命运:宋运辉,“黑五类”的后代,从小受尽艰辛,恢复高考后上了大学,从一家化工企业的三班倒技术员开始,走出大型国企中错综复杂的关系迷宫,一步步上到国有(当时还叫“国营”)大型工厂负责人的位置;雷东宝,退伍军人,回到家乡小雷家当村支书,率先带领小雷家搞分产到户、分包到户,想尽办法摆脱政策束缚,之后创办乡镇企业,成为当地政府扶持的明星;杨巡,典型的“孝子长兄”,当年做小本生意的“小杨馒头”,做个体户、当倒爷、盖市场,历经磨难,最终拥有自己的产业。这三个人,身世、身份各不相同,走的路也截然不同,却都是在磨难面前不肯低头、努力胜出的典型,这是《大江东去》在精神上的大气;
在三位主要人物之外,阿耐还在书中巧妙安排了其他许多典型人物,既有北京下来的县长老徐,也有留洋归来的女金融家,既有忠厚仗义的工人寻建祥,也有毁誉参半的县委书记陈平原,既有勤恳扎实却不乏小算盘的小雷家“四大金刚”,也有浸淫市场多年仍刁钻古怪的王老先生……正是这些身份、背景各异的人物,给了读者丰富多样的阅读收获:一项政策出来,上面有什么意图,下面想如何利用,地方政府又有什么考虑,“洋人”如何评价,普通人是什么看法……所有这些,绝非全知全能的点评,而是各有出处,读来只觉得自然、合理,这是《大江东去》在视野上的大气;
而且对于书中的各位人物,《大江东去》难能可贵地做到了一视同仁:以往人们提到“倒爷”、“个体户”、“乡镇企业家”之类名词,总有挥之不去的好恶,《大江东去》里虽然还能依稀看到“个体户不可靠”之类简单判断的影子,理解却深入了一层:个体户遭遇了多少白眼,生存条件有多么恶劣,如何被国营企业和官僚玩弄于股掌之间……读者了解这些,即便不会更改之前的判断,却可以丰富认识,加深对他人的理解,这是《大江东去》在价值观上的大气;
以上说了三点大气,不过在我眼里,《大江东去》最大气的一点还是信息量上的大气:阅读全书,如同顺流而下:包产到户、包干到户、乡镇企业、技改、联营厂、挂靠、红帽子、转制、皮包公司……这一系列在我们生活中闪亮过、却又被渐渐淡忘的概念,以及它们的来龙去脉,一一复现在眼前,原来,我们活生生的经历,早已熔铸进一段恢宏的历史。这种力透纸背的“真实感”,大概与作者阿耐从事实业的经历有关,也正因为如此,本书可以算作“实业小说”——它没有“文艺小说”中典型的细腻丰富的情感、环境描绘,取而代之的是分量十足的经历和体验,这是“职业作家”绝难理解和把握的,所以小说读来反而更加“抓人”。可以说,信息量上的大气,是《大江东去》最突出的特色所在。

既然喜欢《大江东去》,当然难免把它与类似的作品比较一番。这本书虽然没有宣传炒作,读者的反应,却是相当不错的(除去好评不说,1月刚刚初印,我手上已经却是5月第2次印刷的版本),因为它的年代背景,大家难免要把它与《激荡三十年》和《平凡的世界》相比较:窃议为,《激荡三十年》要做的是编年史,走的是《光荣与梦想》的路子(这点非常明显),它不算小说,所以关注的是各个时代的典型人物,点到为止,《大江东去》胜出在对幕后源流的介绍和关注;而《平凡的世界》“文学味道”更浓厚,关于环境和心理的着墨更多,对切实生活(尤其是左右生活的各种力量)的描述更少,作者的想法更纯朴,价值观也更单纯,它与《大江东去》的异同,或许恰恰是这些年来社会变化的见证。另一方面,与阿耐之前作品(譬如《不得往生》)相比,《大江东去》的视野更开阔,内容也更丰富,如果我们不反对“伟大的作品总是要全面地描绘世界”的说法,《大江东去》的大气就是名符其实的。

如果非要说作品的缺点,我觉得它走的是平铺直叙、情节推动的道路,结构不算精巧,行文也难言华丽,而且细微处修订一下会更好(八十年代初的人大概很难说出“我有吃过饭”和“不招人待见”之类的话)。不过,好小说是没有定规的:大江东去,风景自然不同小桥流水,奔流不息的气势才是它最迷人的地方,读者能做的,就是接受这部150万字长篇的裹挟,一路高潮,一路抱怨“拿起就放不下,占用了太多睡眠时间”吧。

P.S. 这本书在卓越的售价总是变化不定,时而88块,时而70块,最低还有67块的(两天三变是很可能的),如果想买,不妨持续关注一段时间,低价下手。

也可以在阿耐淘宝店购买签名本,因为淘宝最新出台了关于销售图书的规定,明年1月之后可能就买不到了。

假如我是……

我国的历史教育有很多特点,其中之一就是按照马老圣人的“规律”削足适履,另一大特点就是把历史当成“大事记”——哪年、哪月、哪日,发生了什么事情,意义是什么,它是进步的,还是退步的……教科书上的所谓“历史”,便是这样的简单重复。其结果就是,接受完完整的所谓“义务教育”之后,某天我忽然发现自己对历史竟然一无所知:阳历乃是外来的立法,为什么阳历1月1日会有“元旦”这样本土的名称?“星期”乃是外来的历法,在它传入之前,我们生活的时间单位是什么?……这些活生生的历史问题,“历史书”毫不关心,似乎我们根本不需要知道,也不需要感兴趣。
所以,我们只能便带着这些好奇,自己去探寻:

假如我生活在辛亥革命之前,那么大家说的“元旦”乃是春节;
如果我生活在“星期”没有传入的年代,大家的生活乃是以“旬”为单位的;
如果我生活在晚清、民国,我和普通劳苦大众穿的,多半是单调的深蓝色衣服;
……

不过,了解归了解,内心却难以清除“大事记”的遗毒:如果当时我是xxx,我一定要运筹帷幄、明察秋毫、力挽狂澜……
可是,某天我忽然再次猛醒:从生活现状看,我生活在任何年代都只能是一介凡人,即便在风起云涌的年代,注定连“治世能臣、乱世奸雄”都算不上,再加上厌倦了那些毫无逻辑、牛头不对马嘴的所谓历史“分析”和“研究”——与其迷恋帝王将相、生造出各种因果链条,不如多去了解了解跟自己类似的平凡人的生活。革命导师说:忘记历史就意味着背叛。忘记自己是凡人,忘记平凡人的历史,多半可以算作背叛自己身份的可怜虚妄吧。

假如我是民国时期的贫苦农民,我一定去寻求新教传教士,而不是天主教传教士的帮助;
假如我是民国时河南的农民,在开明进步的“基督将军”冯玉祥的治下,春节包起饺子,是一定会被当兵的把桌子灶台踢坏的;
假如我是参加长征的战士,在贵州落了单,一心想要回到大部队,我肯定念叨的是“我要找到朱总司令”,而不是“我要找到毛委员”;
假如我是红军的下级军官,遵义会议的“伟大转折”期间,我很可能在馆子里消受美味的辣子鸡,连吃一个礼拜,最后店家只能以猪肉冒充鸡肉;
……

这些年来,我着意收集凡人的生活历史,只觉得困难重重:详实绵密的生活记忆本身就很稀少,又因为审查制度的妖娆,大多只能口耳相传,绝少集中公布、发表的机会;第一手资料固然可靠性高些,又要竭力避免有意无意的吹捧或贬损,需得多种资料互相验证才敢取信。在这种环境下,龙应台女士新近出版的作品倒是显得尤其可贵了:她通过大量的第一手材料,再现了“天翻地覆慨而康”的那些岁月中有太多太多平凡人的故事,又因为故事的主人多半是平凡人等,即便对大形势的了解有所差池,但对切身经历回忆,因为无涉太多利益,反而真切可信。星星点点的故事,让我想起许多年前的一首歌:一个神话,就是浪花一朵,一个神话,就是泪珠一颗,聚散中有你,聚散中有我……

假如我是在长春被围困的老百姓,可能饥肠辘辘地被国军放出城去,面对解放军封锁的枪口,上吊自尽;
假如我是四行仓库撤退的八百壮士之一,我可能被送往腊包尔的俘虏营,为日本人修筑机场,被日军虐待,被美军轰炸;
假如我是抗战中被俘的国军战士,我可能遇上与日军同样凶恶的台湾监视员,命丧异乡,也可能遇到心怀善念的监视员,蒙恩幸存;
假如我是那些年河南南阳中学的五千学生之一,我可能必须与老师同学一起,徒步走过几千里,在永州“产异蛇”的空地上,跟老师朗诵《古文观止》,辗转到达台湾员林;
假如我是北平解放时载歌载舞的大学生,我可能遇到难过得掉泪的国军青年军官:前方打仗的补给都没有,却一直给你们白面、肥肉,可你们一直要闹,闹到“解放”了,跟大家一起吃陈年小米;
假如我是河北崇礼的村民,历来信奉基督教,我可能在抗战结束后,跟五百乡亲一起,被无神论的军队杀死,尸体不及埋葬,就要被三民主义的军队用作宣传的证据,直到亲友突破封锁,泪流满面地冲上来认领;
……

在我看来,面对这样的故事,争论对错全然失去了价值:没有必要为其他人“站错了队”幸灾乐祸,也没有必要为自己的“进步”暗自庆幸,“居功至伟”、“恶贯满盈”之类,或许只适用于政客,距离普通人十万八千里;在大江大海的年代,无数的寻常人,我们的同胞,仅仅是懵懂地签了字、上了船、出了门,就走上了截然不同的命运,成了大江大海漩涡中的一叶扁舟。

I, IT Newbie

据说,如果被人问道“该怎么办”,一般有两种应对:一种是单纯的说理,把问题剖析解理,抓住“本质”找到出路,遇上与科学关系紧密的问题,此类解法最是合适;另一种则是“答非所问”,给你讲一个故事,相比“干巴巴”地探究法则,娓娓而来的叙事更“罗嗦”,但也更丰厚、更温暖、更亲切——“听完这个故事,你就会感觉好多了”,对于人生的困惑,此类问题或许更加合适。实际上自古也是如此:从上古的传说,从《荷马史诗》到《伊索寓言》,再到晚近流传的各种故事、小说,人类一直从重复的叙事中获得安全感,获得启示。下面要说的,也是一本与叙事有关的书。

近年来,迷惘和无助,似乎成了大学生活的主要色彩。“我该怎么办?”、“我的人生究竟何去何从?”这样的问题困扰着许多正处于人生最美好年华的同学。甚至拙译《精通正则表达式》出版之后,也有同学给我留下的勘误邮箱来信诉说这样的痛苦,问题的严重性由此可见一斑。这里暂不去追究现象的原因,更紧要的问题似乎是:面对这些迫切希望解脱的同学,我们到底能做点什么?
面对这样的问题,单纯的说理难免显得乏力,尤其在现代,它往往带有荒谬的色彩——电影《顽主》里的“德育专家”,就是最好的注解。这种时候,叙事的解答反而更加合适:通过讲述那些经历过这些困扰,但又成功挣脱的“普通人”的经历,给还身陷其中的孩子以力量和启示。这样的好处是双重的:一方面,它真切展现了“挣脱”的过程,仍然身陷其中的人,往往能够在这样的故事中复现自己,这是“设身处地地讲道理”也无法提供的;另一方面,它又不同于大众传媒所包装的“成功人士”,它不但给你看到蝴蝶的美丽,也给你看到化蝶的辛苦,让你相信明白成功者并非“天赋异禀”,于是能够重塑对自己的信心。
当然,要做到这一点非常困难:如今我们看到更多的是成功之后的“全面包装”,有几个人愿意把自己曾经的血泪和疮疤无保留地展现给大家呢?也正因为如此,这本《我是一只IT小小鸟》,才显得难能可贵。

Continue reading I, IT Newbie

你的香蕉怎样剥?

我第一次吃香蕉的时候,顺手把蕉把(也就是互相连结的那一头)一揪,就开始剥皮。父亲看了说:怎么能这样剥香蕉呢,一定要从另外一头开始剥的。在父母面前,小孩子当然不敢当面顶撞,而且,我并没有尝试过从另一头开始剥。可是比较两种方法之后,我觉得还是自己的方法更好,于是去找父亲理论。父亲又试了试,说:“真怪,从这一头来剥,果然是要省事一些,可是我们从小到大,都是从那头开始剥皮的呀。”

这件事过去已经有二十多年了,我却时常想起它,开始只是告诉自己“不要迷信权威”,到后来,我逐渐发现,在生活中,一些看似简单的事情,似乎有“想当然(甚至都不用‘想’)”的做法,可是这做法未必好,许多时候,我们甚至需要意识到“我这是在想当然”、“想当然其实并不是好的办法”,于是或者另辟蹊径别出心裁,或者放下身段重新学习,结果要么遇见别样洞天,要么由此再上层楼;这样的事情,在我的生活中,一次又一次地被验证。

最近一次的经验,来自读书。
我最开始读书,主要看重的就是故事情节,哪几个人,发生了一回怎样的事情,了解了这些,就差不多够了。那时候,除了情节,学校语文课顶多教教“拿个小本子,把优美词句、名人名言记录下来”。这种做法,我从来没有尝试过,所以它有什么效果,我也不得而知。“读书这样简单的事情,还有什么道理可言吗?”许多年里,这就是我“想当然”的观点。
印象里,第一次启蒙来自在大学学到姚斯的“接受美学理论”:审美经验原来分为三个层次!原来普通的“愉悦”只停留在最表面的层次!这可以算“歪打正着”吧,姚斯说的本是对于文艺作品的接受,可是我却想到了自己读书的方法原来那么“原始”,并一下子明白了,为什么同样读一本书,不同的人能谈出来的内容完全不一样。
原来,这道理就和剥香蕉一样,即便是“读书”这样“再简单不过”、“人人都会”的事情,居然也可以有门道可言,居然也有规矩可讲。在这些门道和规矩面前,我这个“读”了许多年书的人,似乎根本“没有上道”!于是我开始有意识地学习和锻炼读书的方法:记住作者的名字,了解作品的背景,寻找文字的特点,并且,要针对不同的文本,选择不同的方法和侧重点……这样下来,成效大增(去年有位朋友与我谈及读书,最后问我:你这样的阅读境界,是怎样来的呢?)
读书这样简单的事情,自己探索和反思都可以收到这样的成果,那么已经成型的“门道”和“规矩”,岂不是帮助更大?可是,这些“门道”和“规矩”,究竟在哪里呢,是不是只能自己反省、参悟?这个问题我一直不很清楚,直到最近接触了《如何阅读一本书》才想到,所谓“门道”和“规矩”,大概就存在于这样的书里头罢。

《如何阅读一本书》
,就是一本关于“读书”的书(是的,它就好像一口咬住自己尾巴的蛇)。这本初版六十多年来不断重印、再版的书,就是要教会读者读书的方法。大致来说,整本书分为三个部分:第一部分可以视作纵向探究,主要向读者介绍阅读层次的概念,由下而上依次介绍了基础阅读(也就是初步的,毫无结构的阅读)和检视阅读(带有结构意识,能够抓住主题的阅读)。第二部分则着重讲解阅读的第三层次,也就是分析阅读,即如何“通透”——紧紧抓住这本书,做到“我注六经”,读到这本书“真正属于自己”为止。有过亲身经历的人都知道,这并非易事,大学里的一些课程,老师会带领学生,把大量的精力倾注到少数的经典上——可惜,许多人即便花了大量的时间精力,因为没有掌握合理的阅读方法和技巧,也无法达到“通透”的境界;我想,作者之所以愿意花三分之一的篇幅来讲分析阅读,原因也部分在于分析阅读是如此重要,而它本身又需要大量的技巧和锻炼。全书的第三部分则可以视为横向解剖,在这一部分,作者分门别类地讲解了各类书籍的阅读方法:实用型的书籍要如何阅读,想象文学要如何阅读,历史、科学、数学、哲学类书籍,又应当怎样阅读……虽然我们未必要完全遵照其中的方法去阅读各类文本,但是相比自己从头开始积累,书中提到的各种办法,无疑是具有相当价值的,不容错过。
另外,这本书也有一些总览性建议,我觉得很受用,譬如阅读书籍时,要仔细观察目录,要读一读作者的前言,要仔细想想每一部分的标题……这些都是我之前读书不太重视,其实又非常重要的技巧(当然,这也可能与我国特色的前言、序言有关,不信,看看《中华人民共和国宪法》),以后应当努力改进。

也许有人会说:读书就是读书,要那么多条条框框干什么,太累了。
没错,一千个读者就有一千个汉姆雷特,极端地说,作品的意义完全存在于“接受”的过程之中。可是,我又分明看到,同样的一本书,同样的时间,有人还在刀耕火种,也有人读书却已经开上了联合收割机——虽说都是“接受”,可是接受的深度和广度,却有如此的差别。造成这种差别的,恐怕并非悟性,而是清晰的思维,和长期有意识的锻炼。

朋友,你的香蕉是怎样剥的?你的书,又是怎样读的呢?

上帝的归上帝,程序的归程序

程序员,就是整天与机器打交道的那群人。
在计算机并不普及的年代,这样的描述毫无疑问;然而,这些年来,得益于计算机成本的不断下降,软件使用门槛的不断降低,如今,昔日昂贵而又神秘不可莫测电脑,已经成了随处可见、人人能用的办公器材。一句话:人机交互不再是程序员的专利。大家都可以用电脑干活,只不过,程序员用电脑写程序,其他人用电脑干其它事。
结果,普通人抱怨的问题,程序员也在抱怨:电脑不够聪明,不够智能,效率太低……

可是,电脑真的进化到了对程序员和普通用户“一视同仁”的地步吗?

我不由得想起,上个世纪80年代,温伯格在《技术领导之路》中提出的疑问:

(开办技术领导力学习班)也让我们产生怀疑,技术在当今社会扮演了重要的角色,我们的学习班,是否赋予了某些人太多的力量?

细细想来,那个时候IT是高深的技术,只有少数人能够接触,因而程序员“理所当然”地借助了IT的东风,具有超常的力量。可是如今呢?与常人无异的程序员(或者说,IT技术人员),他们身上让人担心的“太大的”力量,到底是被淘汰了,还是没有发挥出来?

对这个问题,不同的人或许有不同的看法。不过,读过The Productive Programmer(中文版《卓有成效的程序员》)的人,多半会选择后一个答案。

The Productive Programmer是一本奇特的书,它的Productive(也就是“生产力”),与新的语言、新的框架、新的系统完全无关,而是另辟蹊径:它只是提醒读者,作为程序员,你与普通用户是不同的:其它人只是简单地“启动”程序,而你完全可以动用自己的专业知识,“驱使/调度”那些程序。这样的机会,普通用户想不到,也不愿意抓住,但是抓住它们,你的生产率就会成倍上升。所以,这本书叫做The Productive Programmer,而不是The Productive Computer-User

薄薄的一本书(英文版224页,中文版215页),共分16章,兼顾概念和实践两个方面,既介绍了加速、专注、自动化等等提高生产率的“先进”思维观念(譬如“多用键盘少用鼠标”,“消除干扰集中精力”),也给出了在设计、分析、构造、元编程、多语言编程等等多种任务中贯彻前述思想的若干实例(譬如“用全面测试保证质量”,“选用最省事的方式/语言完成任务”),可以说是“麻雀虽小,五脏俱全”了。

不过,看完整本书,我最深刻的印象还是贯彻全书的思想。说白了,就是尽量让机器做机器该做的事情,让程序和程序打交道,发挥程序员在这方面的先天优势——他人眼中的普通工具,是程序员手里的有利武器。

不信你可以想想,虽然如今人机交互的难度已经大大下降,然而程序终究是程序,“程序跟人打交道”与“程序跟程序打交道”,效率差的不是一星半点:

不用宏,你可能需要一次又一次地重复选择、修改、保存;
不用脚本,你可能需要一次又一次地点击、配置、等待;
不用自动化测试,你可能需要一次又一次地运行、调试;
不用管道,你可能需要一次又一次地生成、删除中间文件;
……

The Productive Programmer则会“教导”你:

多用宏吧,启动它,你就可以迅速完成大量重复的工作;
多用脚本吧,你可以提高运行的效率,避免变数和误差;
多用自动化测试吧,你可以迅速定位问题,保证质量;
多用管道吧,这样多个程序就可以“无缝结合”成一条生产线;
……

没错,学习宏、脚本、自动化测试、管道(Shell),不是“容易”的事情。但别忘了,身为技术人员,了解技术,学习技术,运用技术,正是你的职业、你的优势,也是你的责任、你的生产力(所谓productive)所在。随便举个例子吧,在本书中文版的第196页有这么一段话:

……在我刚才提到的例子中,开发人员用了1小时58分建立正确的语法,然后用了不足两分钟运行。在一些未曾培训过的人眼里,他的大多数时间都没有效率(这就是为什么他们反对使用正则表达式的原因),但最后,他节省的是几天的时间!……

我还要补充的是,解决好这样的问题,“现在”能节省几天的时间,将来,更可以节省无穷无尽的时间!就我的开发经历来说,平时多注重这样的细节,做些“没效率”的事情,积累起来,就可以节省大量的时间和精力——最起码,你不再会抱怨,自己终日被一大堆“简单重复劳动”所困扰。

类似的例子,在书中随处可见,譬如作者讲到,“几乎每个*nix用户,都会有自己的shell alias”,真是于我心有戚戚焉:我自己积累了一大堆alias,喜欢用grep –color把要找的内容标成高亮,也喜欢在统计脚本里用不同的颜色标注不同的状态……在Shell下干活,更加简单、利索,一目了然,这种流畅和效率,也可算专属于程序员的宝贵财富。不厚道地炫耀一下,我还有程序定期自动备份我的blog文件和数据,有程序把下载的有声资料“统一”为广播音质mp3(节省空间,同时更新/修正id3信息,调整音量)方便导入随身听……

当然,也有读者会觉得很烦:作者每讲一个很小的例子,几乎都要强调一遍:“简单重复劳动是低效的(程序员不应该这么干)”。不过,我丝毫没有觉得罗嗦,反而因此喜欢上这本一个下午就能看完的“轻量级”小书:阅读它,你并不需要太多的期望,权当一次愉快的思维体操吧——你会发现,专属于自己的高效率,就来自书中提到的点点滴滴。

《精通正则表达式》勘误列表Excel版

承蒙各位读者喜爱,《精通正则表达式》2007年出版至今,已经三次印刷了。不少读者在来信提供勘误建议的同时,也反映原有的勘误列表结构不够清晰,勘误没有区分版次,使用起来不够方便。每次收到这样的来信,我都深感惭愧。

所以我制作了Excel版本的《勘误列表》,列出了到目前为止收集的所有勘误,并列出各个版次所对应的勘误,希望能给广大读者提供方便。

《精通正则表达式》(第三版)勘误列表下载:MRE_errata.xls

P.S.

要感谢博文视点的晓菲,她帮我调整了Excel的版式。

别做光鲜行业的蠢苦力

我很小的时候,在外出差的父亲给我写信,说“玩也要动脑筋”,这真让我头疼:玩就是玩嘛,动脑筋,那肯定是跟学习有关的,这怎么能扯到一起呢?我百思不得其解,甚至去找外婆评理。
父亲出差回来解释说:玩也要动脑筋,就是不要老停留在一个水平上,要想办法玩得更好,更有意思。
于是我明白了,“动脑筋”不只是跟烦人的学习有关的,各种问题其实都可以“动脑筋”。这些年来,随着经历的增长,我越来越深刻地体会到当年父母的一片苦心,也体会到四处“开动脑筋”的重要性。

去年,我有幸翻译了温伯格的《技术领导之路》,在书中,我遇见了同样的道理:

尽管风格各有不同,解决问题的领导都有一个共同点:他们都相信,总有更好的办法(there’s always a better way)。
这信念源自何处?伯特兰•罗素曾说,信念就是不需要证据的相信。尽管解决问题的领导可能是讲逻辑的,他们也不能用逻辑来证明信念。也许它源于他们之前的成功:聪明孩子能把坏事变成好事。这种成功强化了孩子对于思维的信念。以这种信念为依托,孩子就更可能想到更聪明的办法,解决下一个问题。熟能生巧,成功带来更大的成功,最终成就了解决问题的领导。

看来,“努力把事情做得更好”的重要价值,是大家公认的。然而,努力践行这一点,也是非常有难度的,这一点,我深有体会。
就拿我所从事的软件行业来说吧,工作中,我时常会有这样的想法:软件开发顶着朝阳产业的华盖,然而内部的规范性和秩序性实在不容乐观,甚至到了“粗陋”的地步,远远赶不上传统的工匠:设计随意、文档混乱、沟通缺乏、配合失当、效率低下、维护困难……,许多的所谓“高科技产业”,只是“使用高科技工具胡乱拼凑出来的劣质产品”而已(刘未鹏写过一篇有趣的文章《我们都是信息时代的远古人》,我看不妨借用这个标题:我们都是光鲜行业的蠢苦力)
究其原因,一方面是软件开发本身的问题(须知,软件乃是纯粹依靠人类的智力,“凭空”构造出来的复杂系统);另一方面,也与我们对自己工作的思考深度有关——即便软件开发本身是困难的,我们仍然能够开动脑筋,总结、反省、提高,一点点做得更好。这样的思考和反省,本身就是非常难得也非常可贵的,但正是这样的思考和反省,提醒我们,自己位于向前延伸的时间轴之上,而不是一次次地在起点重复。
更可惜的是,长久以来,关于这些问题的论述,都被外国人所垄断。在中文世界里,“如何做好软件”,或许有许多人在思考,但经验的交流都还局限于口耳相传的方式,在知识的整体性、层次性和交流效率上,都很可惜。所以,当我看到《走出软件作坊》的时候,实在是大为惊喜。

我手上这本书,是在面世签售的前一天晚上,博文视点的周老师赠送的。赶回家已经是夜里两点来钟了,但捧起这本书就很难放下,这是一本包罗万象的书——从程序到架构,从售前到售后,从开发到管理,从销售到维护,完全涵盖了当前国内软件开发的各个方面。我相信,任何IT从业者都能从中见到许多困扰自己的问题,而且许多未曾接触过的问题,也会看得饶有兴致,并且为其中的某些观点、做法叫绝。看技术类的书籍,很久没有这种畅快的体验了,于是我想,这本书一定能吸引很多人的兴趣。

果然,这本书面市之后,引发了大量的关注。无论评价如何,这些关注本身,就证明书已经挠到了软件开发的痒处(正如它的英文名:The Itch of Software Workshop),引发了大家的思考。我以为,针对中国软件行业的现状来说,这就已经是重要的价值了。

《走出软件作坊》或许不是一本圣经,但它无愧于一个起点,为了走出作坊,我们需要这个可贵的起点。

“语法糖”和“有机方法”

“语法糖”与“有机方法”?别奇怪,这两个词虽然不容易理解,翻译文章中却很常见。

语法糖,直译自“syntactic sugar”,原指“语法中的糖分”。Beginning Regular Expression的译者李松峰先生有专文讨论:

含糖语法,是由Peter J. Landin创造的一个术语,指的是为一门计算机语言的语法中添加的附加物或附加成分,它不会影响语言的功能,但却能使人类使用起该语言来”更甜美”一些。含糖语法为编程人员(对计算机规范语言来说,是设计人员)提供了一种编写程序(编写规范)的替代方式,这种方式更具有实用性、更有助于形成较好的程序设计风格,或者使代码读起来更自然。但是,它不会影响形式上的可表达性,也不会让语言拥有某种新功能。

Syntactic sugar is a term coined by Peter J. Landin for additions to the syntax of a computer language that do not affect its functionality but make it “sweeter” for humans to use. Syntactic sugar gives the programmer (designer, in the case of specification computer languages) an alternative way of coding (specifying) that is often more practical, more conducive to a better programming style, or more natural to read. However, it does not typically affect the expressiveness of the formalism or permit the language to do something new.

仁兄的认真精神,我非常钦佩,不过“Syntactic sugar”是否要翻译为“语法”,我却有不同看法。

在我看来,sugar固然可以翻译为“糖”,但英文语境中的sugar和中文语境的“糖”是否能对等,恐怕值得商榷——“糖”在英语世界是种普遍讨人喜爱的东西,甚至饭后都喜欢用甜点,而大多数中国人好像没有这种习惯。在中文语境中,让人喜欢的“糖”,更多是与小孩联系在一起的,在成人世界,倒是有一个类似的说法,叫“甜头”。所以,如果直译,不妨翻译为“语法甜头”,比“语法”,更容易理解,更自然。

既然把握了原文要传达的意义,我们甚至可以再进一步,突破形式的樊篱,直抵问题的核心——Syntactic sugar翻译为“语法诀窍(窍门、捷径)”,虽然与“糖”相差十万八千里,却更贴近原文的意思。有人或许会问,那“sweeter”怎么翻译呢?将计就计,直接翻译为“更顺手”就好了嘛——当然,一般情况下能这么用,如果是专文讨论“糖”,加上什么desugar, sugar-righ之类的概念,或许还得老老实实地“糖”来“糖”去。

“有机方法”则是今天早上看到的标题——成为领导的有机方法。这翻译,真让人没脾气,organic approach,不就是“有机方法”嘛。横竖想想,总觉得有些不对劲,“有机”总让人想到化学、食品,“有机”方法,到底是个什么方法呢?

索性查查Collins Cobuild,Organic,它的解释包括:

  1. Something that is organic that is produced by or found in plants or animals,这个是“有机”,没错;
  2. Organic describes change, development or progress that happens naturally or gradually rather than a sudden or force way,“渐进”的,“自然”的,而不是“突然”的,“强迫”的;

看到这里,“有机方法”就站不住脚了。这东西,说轻一点,是“硬译”,说重一点,根本没搞懂意思嘛。不过,这种例子还真多,比如sensitive,就被硬生生翻译为“敏感”,于是大家都“敏感”起来,只会说“大小写敏感”,而不会说“区分大小写”了

一艘轮船横渡大洋需要七天,那么……

“一艘轮船横渡大洋需要七天,七艘轮船横渡大洋就只需要一天吗?”我第一次听到这个段子,是在湖南经视的某档娱乐节目(抨击的是某些专家的“唯数字论”),接下来又听到了那个著名的“吃狗屎与GDP”的例子,“所以,很多时候光靠数字是不能说明问题的”,主持人俨然一脸严肃。

一艘轮船横渡大洋需要七天,七艘轮船横渡大洋就只需要一天吗?面对这个问题,许多人的第一反应就是,“不对”。不对在哪里呢?仔细想想就会明白,“横渡大洋”的工作,没法分拆给七艘轮船来同时完成。
是了,这就是问题的核心(Nature)所在——无法拆分完成的任务,投入更多的劳动力,不见得会有成效。这道理看似简单,变换了情境,就不是如此了。

芯片制造工艺不断发展,在同样方寸内集中更多晶体管的做法已经遇到了瓶颈,人们对计算速度的渴望却永无满足,于是“多核(共享内存的多处理器)”应运而生。多核能给我们的编程带来多大好处?双核真的能比传统的单核快上一倍吗?Amdahl定律(Amdahl’s Law)告诉我们,这是不可能的:

设加速比(完成同样的任务,单处理器所需的时间与n个处理器所需的时间)为S,任务中能并行完成的部分为p。如果单处理器的完成时间为1个时间单位,则理想状态下n个处理器所需时间(不考虑多处理器间的协调成本)是
(1-p)+p/n
那么加速比S的上限就是它的倒数:
1/((1-p) + p/n)

具体到“横渡大洋”的问题,其中的p等于0,所以,7艘轮船的加速比为1,当然还是需要7天。

Morgan Kaufmann的这本书(The Art of Multiprocessor Programming),就以“加速比”和类似“轮船横渡”的例子开头,来介绍多核编程的。全书内容分为两大部分:理论与实践。理论部分关注可计算性——什么样的问题是能够在异步并发环境中完成的,读过这部分,你会明白,为什么有些共享对象无法以任何并发算法来实现,以后不必再白费工夫(It is therefore important to understand what not to try, before proceeding to write multiprocessor programs);实践部分关注并发程序的性能——单核编程依赖的是基础完备的成型抽象,许多东西已经是“约定俗成”;而多核则需要以另一种视角看待,有时程序甚至必须“欺骗(outwit)”内存系统,这样的程序,不熟悉多核结构的程序员可能很难读懂。

传统讲解多核、并发编程的书,大都偏重实践部分,而忽略了理论部分。结果就是,读完虽然知道一堆多线程编程的技巧,也能保证程序的正确性,总是一头雾水,不能有效分析、拆解问题(不过是复杂些的“横渡大洋”问题:)),也难以真正提升程序的效率。相比之下,这本书在Amazon拿到五星,确实不难理解。

如今多核已是大势所趋,有兴趣的朋友,不妨都来读读这本“高年级研究生教材”。

墨黑的土地,血红的A字

保罗·戴维斯在《上帝与新物理学》中说,尽管大多数宗教都是教人向善的,但纵观人类历史,相当多的争端乃是由宗教所引起。这话没有说错。
所以,新殖民地的开拓者们,不管头脑中起初有什么关于人类品德和幸福的美妙理想,总要在各种实际需要的草创之中,划出一片未开垦的处女地充当墓地,再划出另一片土地来修建监狱。
所以,新英格兰地区的清教徒们,要处罚海斯特·白兰,要以别样的方式对待她。

海斯特·白兰,她出生的贵族家庭已经没落,她高贵的气质却未曾消失。这妇人身材颀长、体态优美,举手投足间自有一种端庄的风韵。她的婚姻已属不幸,更何况两年来,旧大陆的丈夫却渺无音讯,谣传此人已经葬身大海。如此,孤苦伶仃的少妇与才貌相当的牧师丁梅斯代尔萌生感情,实在是顺其自然,水到渠成。然而,这种事情在当时当地实属丑闻,尤其是私生女珠儿诞生之后,“惩罚这个不道德的淫妇”,便成了人心所向,众望所归。
面对街头巷尾的议论中,面对咄咄逼人的审视,甚至是面对法庭的威严,海斯特·白兰坚决不肯指认孩子的父亲,照判决,必须怀抱婴儿,登上刑台,示众三小时。她的脸烧得通红,试图用婴儿挡住胸前的那个通红的A字(表示Adultery,通奸)。但她很快发现这是徒劳,索性架起孩子,敞开那个用红色细布做的、镶嵌奇巧金丝线花边的A字——是的,婴儿,还有那耻辱的红字,都是她的现实,其余的一切,都消失了;她的眼中不再有愧色,逼视的目光在她的身上化作神圣的光辉。

而世界总是充满了巧合,刑台下的围观者中,就有海斯特的丈夫,罗杰·齐沃林斯。此人专为复仇而来,对于海斯特和牧师的怨恨,构成了他生活的目的和全部意义——“海斯特,如果你胆敢向丁斯代梅尔律师暴露我的身份,我就向众人暴露他的身份”,以此为要挟,他伪装成医生,悄悄地潜入牧师的生活,获得他的信任,成为他形影不离的朋友,苦心孤诣地制造出一种气场,煎熬牧师的身心,求得自己的满足。
于是乎,丁梅丝代尔牧师就身处奇怪的情景之中。他学识渊博、道德高尚,为人们所称颂,当然不能和那个戴着红字的女人有什么接触;这样一来,他却愈发清楚,自己胸口无形的红字,无时不刻不在燃烧,带来远甚于海斯特的痛苦;他的布道日益虔诚,他的学问日益精进,他的形象日益神圣,健康却在日益恶化——无论是身体,还是精神。

就这样,七年过去了;这是怎样的七年呢,是牧师的健康日益恶化的七年,是老医生日益接近自己目标的七年,更是海斯特勉力承担异样目光、被众人孤立的七年——纵使她含辛茹苦、助人为乐,终究无法融入她的清教徒乡亲。最终,还是海斯特打破沉寂,向牧师透露了内情。顷刻间,爱情再次滋润万物,两个人好像重新活了过来。
“海斯特,你是在鼓励一个两膝发抖的人去赛跑!我身上已经没有力量和勇气独自到那广袤、陌生和困难的天地去闯荡了!”,牧师又重复了一遍,“独自一人啊,海斯特!”
“不会叫你独自一人前往的!”,她的回答很轻,又很深沉。
一片阳光。

故事的末尾,牧师完成了人生中最辉煌的一次布道。之后,虚弱的他靠着海斯特,带着女儿,一步步挪上刑台:

新英格兰的人们!你们这些热爱我的人!——你们这些敬我如神的人!——向这儿看,看看我这个世上的罪人吧!终于!——终于!——我站到了七年之前我就该站立的地方;这儿,是她这个女人,在这可怕的时刻,以她的无力的肩膀,却支撑着我爬上这里,搀扶着我不至扑面摔倒在地!看看吧,海斯特佩戴的红字!你们一直避之犹恐不及!无论她走到哪里,——无论她肩负多么悲惨的重荷,无论她可能多么巴望能得到安静的休息,这红字总向它周围发散出使人畏惧、令人深恶痛绝的幽光。但是就在你们中间,却站着一个人,他们的罪孽和耻辱并不为你们所回避!
那烙印就在他身上了!上帝的眼睛在注视着它!天时一直都在指点着它!魔鬼也知道的一清二楚,不适用他那燃烧的手指的触碰来折磨它!但他却在人们面前狡猾地遮掩着它,神采奕奕地走在你们中间;其实他很悲哀,因为在这个罪孽的世界上人们竟把他看得如此纯洁!——他也很伤心,因为他思念他在天国的亲属!如今,在他频死之际,他挺身站在你们面前!他要求你们再看一眼海斯特的红字!他告诉你们,她的红字虽然神秘而可怕,只不过是他胸前所带的红字的影像而已,而即使他本人的这个红色的耻辱烙印,仍不过时他内心烙印的表象罢了!站在这里的人们,有谁要怀疑上帝对一个罪人的制裁吗?看吧,看看这个骇人的证据吧!

说完,牧师哆哆嗦嗦地解开法衣前襟的饰带。露出来了!台下的人惊慌失措,台上的牧师瘫倒在地。

人们那天到底看到了什么,事后众说纷纭。有人断言看到了一个嵌在肉里的红字,有人说,这是牧师苦修的结果,也有人说,这是医生的毒剂所致;也有人说,其实什么也没看到,牧师的胸膛,像新生婴儿那样光洁无暇,他们还说,牧师最后的布道,既没有承认,也没有丝毫暗示,他与海斯特·白兰有任何牵连,他只是希望在那堕落的女人怀里断气,证明人类精英的正直是多么微不足道,他只是希望教育他的崇拜者:在无比纯洁的上帝心目中,我们都是相差无几的罪人。

霍桑写这本小说,可能更希望引发读者思考“善”与“恶”的哲理,因此在人物的语言和行为上着墨不多,反而花了大量的篇幅描绘、评述、阐释,用心营造气氛、渲染意境——这是另一种形式的引人入胜。譬如全书结尾的那句话,“一片墨黑的土地,一个血红的A字”,让我想起《终结者2》的片尾,向前延伸的路。