同样的时间,多几点收获

我的一位朋友曾在意大利求学,某次他坐飞机回国,遇到旅游返程的同胞,便聊起天来。原来这位同胞在国内某垄断企业任职,这一趟去意大利,资金当然不是问题,不仅买了不少皮具,还游览了不少经典。在飞机上,他得意地拿出相机展示看那些“到此一游”的照片,不料,我的朋友看到每个景点,都能把典故娓娓道来。开始这位同胞还听得饶有兴趣,后来却露出失落的神情,他说“唉,原来有这么多讲究,之前根本不知道,比起来,这趟真是太亏了。”

听到这个故事的时候,我想,如果换了我,我也会失落甚至懊悔——我们且不论购物和浏览的关系,不争的事实却是,游览时不了解背景知识,同样时间、同样的线路,所得也极为有限;或者说,如果知识更多一些,在同样的时间里,完全可以多几点收获。

这一点,其实不仅仅限于游览,对日常生活的世界,也是如此。近年来我业余时间着意读了不少关于湖南历史、地理、经济方面的文本,原本只是出于兴趣,希望梳理自己的感觉经验,结果却出乎意料:虽然回家的时间不多,每次回家的感觉却远远比在离家读书之前来得丰富和深厚:看到作为特产的蜜橘,会想到它其实是20世纪30年代从日本引进的;路过易俗河,会想到它曾是省内最大的米市;去长沙、湘潭,可以观察到湘江江面的变化,联想起木船时代湘潭乃是省内经济中心,而汽船时代长沙取而代之的故事;经过习以为常的株洲汽车齿轮厂,会想到这是80年代引进奥地利“斯太尔”载重卡车“全国一盘棋”战略的部署…风景名胜就更是如此,有个朋友去长沙玩,我推荐了若干人不多但有故事的地方,这位朋友也挺喜欢。回想起来,自己不过是多读了一点书,多看了一点资料,但是在同样的时间里,接触、感知到的东西大大增加了。

当然,知识的作用,不仅仅是为个人提供更丰富的体验,还能影响观察,产生更直接、更重要的后果。

1924年到1932年间,美国芝加哥西方电气公司的霍索恩工厂中,澳大利亚人埃尔顿·梅奥(Elton Mayo,1880-1949年)等人进行了一项实验,试图找出影响工作效率的环境因素。然而出乎实验者意料的是,在保持其它条件不变的前提下,正反向调整某个因素总能导致同样的后果:无论是增加还是减少光照,延长还是简短休息时间,工作效率都会上升。总结发现,奥秘原来在于实验者的观察忽略了自身的因素,被试(工人)发现自己收到关注,往往会产生效率的额外提升——这意外的发现,就是后人所说的“霍索恩效应(Hawthorne Effect)”。

发现霍索恩效应的人,忽略自身因素当然无可厚非,毕竟他们是开创者;但是作为后来人,因为没有掌握许多(已经存在的)知识,在求解问题的过程中忽略了许多因素,多走许多弯路,就非常可惜了,更可惜的是,这样的事情似乎并不罕见。举我熟悉的程序开发中除错的例子吧,我亲见许多技术人员,因为不愿花时间去学习调试和除错的知识(包括基本的逻辑判断能力),在复杂现象面前一筹莫展,自己累得不行,进度也受影响;而掌握了相关知识的人,面对同样的现象,却能够迅速定位问题所在。知识的作用再次体现出来:在同样的时间内,在同样的现象面前,知识大大影响了我们的收获。

引申开来说,学习知识的意义无论怎么强调也不为过:每个人的时间大致是相等的,如果希望多一些收获(无论是丰富生活体验,还是提升工作效率),多学习和掌握一点知识,就是当然的选择。

这道理不难明白,但实践起来却有难度,即便是在信息已经大大丰富的当下,我们仍然可以听到许多人说,学习知识太麻烦了。为什么会出现这种情况呢?下面尝试依据知识做点解释。

第一方面的解释来自进化心理学。这是心理学中新出现的一个分支,它尝试从物种进化的角度看待人的认知和行为。从这个角度出发,进化心理学得出了许多有意思的结论:比如,人类进化出了对蛇之类动物的天生畏惧,却没有进化出对插座、汽车等物品的天生恐惧——因为插座和汽车出现的时间太短,不够让人“进化”出这种本能。关于知识的学习也是如此,一般来说,人类多是生存在感觉经验的世界里(实际上大多数物种都生存在感觉的世界里),然而知识总是要依靠提炼、总结、归纳,梳理出超越感觉经验的“本质”的。因此,许多道理落实在生活的例子里,我们可以依靠本能推理,得出结论。如果减少其中感觉经验的内容,依靠抽象的概念和符号进行推理和判断,就有些“超出进化阶段”的味道了,感到麻烦也是理所当然。
不过我想,一方面,人类社会的复杂程度已经远远超出了普通生物的感觉经验世界,仅仅依靠感觉和经验是不足以对付的,这是学习知识的压力;另一方面,人脑尚有大量的能力没有开发(爱因斯坦曾说,“人类最伟大的发现之一,就是对大脑无限潜能的认识”),这是学习知识的潜力。综合两方面来看,问题并不严重。

另一方面的解释来自我的经验。我们大都有过这种经验:对同一个问题,有的书这样说,有的书那样说……让人无所适从,甚至不如“蒙头撞大运”来得干脆,这也是许多人觉得“学知识太麻烦”的原因。但是,你在半山腰看到的风景,很可能不及山顶的一半,甚至不如山脚下——事物的发展可能并不都是线性的,知识的学习也是如此。举个简单的例子吧,选择伴侣,到底是要与自己类似的更好(所谓“有共同语言”),还是不同的更好(所谓“互补”)?这个问题,相关的论述很多,而且各有调查数据和理论分析做支撑,初看确实很容易困扰。但是,如果我们更进一步,能够以批判的目光看待各种说法的数据和论证,同时把笼统的“相似”量化规范,并严格描述“好”,得到的结论就更加可信,也更有参考价值了。类似的例子,还有对言论的判断:我们往往习惯于给人贴上“言行一致/言行不一”的标签,但是了解了与“可通达性”有关的知识,我们就能够判断和理解,某个人在什么场景下、用什么态度说的关于什么主题的话,到底有多大可能与行为一致。所以,对这类“太麻烦”而放弃学习知识的做法,我们不妨化用罗伯特·卡帕的名言:(如果某一门知识真的很好很重要)如果你觉得学了很困惑,那是因为你学的不够多、不够深。

事关“工程师思维”

今天金山的刘鑫老师在邮件里谈到了“工程师思维”(工程师的思维能力,就是一种可以把想法实现出来,一步步的变成现实的思维和实践训练),借题发挥一下吧。

我上高中的时候,学校算是本市最好的中学,班主任物理老师也是特级教师,但我一直不是觉得,他讲课说不上多好,无非是循规蹈矩的套路,甚至有点死板——就拿受力分析的题目来说吧,多简单的题目,都要画坐标系,而且就只有那么几个力:重力、摩擦力、牵引力等等,来来去去地分解,真是麻烦,许多题目明明一眼就能看透的嘛。
到我大学快毕业的时候,辅导一个小朋友做高中物理题,忽然就让我改变了之前的看法:那是个很简单的问题,物体在斜面上的受力分析,我问他:这个题目要怎么想呢?出乎我所料的是,他胡乱画出了一堆力:扯力、顶力、拉力…
就在那一瞬间,我明白了,我们的物理老师的做法有多么高明:复杂问题是不能单纯依靠直观思维来解决的,我们往往需要从简单的情况中提炼出章法,再循序渐进,把章法练到纯熟,这样才有能力解决更复杂的问题。物理老师那看似繁琐的重复,其实就是在培养章法,把握问题的核心——做到了这一点,再复杂的问题,都可以一眼看到本质,而不会困扰、迷惑。

可惜的是,这样的思维和习惯,似乎还没有在我们身边扎下根基。我目力所及,看到的很多问题的解决方案,很多教育、探索和反思还只停留在对天赋、才气的吹捧和推崇上,而没有强调练习章法、探究规律、把握本质的工作。可是,才气、天赋等等都是太微妙的因素,难以把握,无法复制,也不易推广,甚至很可能遗失——研究中国古代科技史的李约瑟博士就指出,中国古代的发明有个特点是“重复发明”,前人发明了某件东西,后人不重视,于是失传了,直到许多年后,再由后人发明……
在这方面,西方似乎比我们做的好得多,他们会有人不满足于直观的思维,努力探究日常生活各种现象背后的原理,总结出不依赖“才气”、“天赋”的章法,再经由一代又一代的人传承、积累,结果知识与生产力就像滚雪球一样,越来越多,能量也越来越大。
再举个例子,小时候我做过不少“智力题”:比如几个人各说了一句话,其中几个人说了真话几个人说了假话,让你判断到底谁说了真话谁说了假话;又比如河上有一条船,河边有狼、羊、人、草等等,一次只能渡两样过去,要怎样安排顺序,才能全部安全渡过去。这样的问题,我有一段时间做起来很快,也尝试总结过一些思路,但还是碰运气、凭感觉的成分居多,而且,这样的习题书,也没有告诉我们应该怎么解这类问题,它的本质是什么。直到后来学了离散数学,我才恍然大悟:第一个题目其实就是真值表,第二个题目其实就是图算法。问题提炼到了这个层面,就有现成的章法(或者说“套路”)解决了,再不需要什么才气、天赋:天赋再高、才气再旺盛,也无法大规模推广,也快不过计算机。于是,普通人也可以解决这类问题,其他人(也包括我们)的精力就不用再耗费摸索这类问题的答案上,而可以探索更加深入、更加新鲜、更有价值的问题。

我们还可以再举一个身边的例子:西方的很多书中,一个简单的道理,往往要翻来覆去地讲,非要把各个细节、各种情况都涉及了,才善罢甘休;许多人觉得很罗嗦、很累赘,他们关心的是“正对我胃口的知识”、“核心的结论”。但是,如果有时间认真研究这些细节,了解了各种情况,往往可以站在一个更高的角度来审视这些“核心的结论”,对它的认识更加全面——不但知道价值在哪里,也知道局限在哪里。
其实,这也是我当年阅读《精通正则表达式》之后的体会,在细细阅读了整本书之后,我不但了解了各种功能,用正则表达式解题的一般套路,也知道了在什么情况下要使用什么功能,更知道了什么情况下不应该使用正则表达式——这样的知识,很多就来自书中那些“繁琐”的内容。

正是因为有了这样的体会,我也奢望为大家提供一些这样的便利:《怎样翻译更地道》系列文章尝试总结一些应对翻译难点的通用套路,希望读者遇到这类问题时,查到对应内容就可以解决;《正则表达式傻瓜书》希望重点讲明白的(也是本书的重点),不但有各种功能的应用场景和选择规则,还有正则表达式解题的思维步骤:归纳一个应用场景的文本特征(转化为对正则表达式的需求);照这些特征一一写出子表达式,合理组合起来;最后优化整个表达式。掌握了这三步,并有意训练,就可以熟练准确地运用正则表达式,解决各种问题。

希望我可以努力做到。

感觉之外

小时候,父母给我买了许多书,其中用的最多、印象也最深的一本,就是《少年自然百科词典》(我最早拥有的是动植物那一卷)。当时,无论在外面遇到什么植物、捉到什么昆虫,在电视上见到什么新的动物,都会习惯地查那本词典,从里面,我知道了这些动物/植物的英文名、拉丁名,也知道了它所在的纲目种属,在自然界的分布,生活习性和天敌等等;但回想起来,这本词典给我最重要的收获是:我获得了一种奇妙的体会:在感觉经验之外,存在另一个世界,它更广阔,包含闻所未闻的新鲜事物;也更严格,天地万物,在其中都有各自的地位和归属;有了这种视角,再反过来看自己日常生活的世界,就凭空多出许多感触。

这样的感觉,在许多年后再次得到了印证了,只不过,这次是关于翻译的:常有人问我,翻译到底要怎样学?这样的问题,总是让我苦恼,冥思苦想很久之后,我觉得答案就是一句话:如果你能突破文字形式的限制,真正想明白“原文到底说的什么意思”(这个意思很可能无法用言语表达,很模糊,但你努力揣摩,一定可以捕获到),再用自己的话把它说出来,翻译就完成了——说到底,语言只是表象或工具,真正重要的,乃是语言之外的意象,也是一个更广阔的世界。虽然突破语言限制的过程过程很艰难(时常思考“我说的这句话到底是什么意思”或“这句话,其他人会怎么理解”,很容易把人逼疯,看看维特根斯坦或许会有帮助),但只有突破它,进入到那个更广阔的意象世界,才能最好翻译,也才有标准审视自己的译文。

而且,我逐渐意识到,“把握更广阔世界”的道理,其实适用于许多方面,最重要的就是思维——普通人的思维,大都没有经过严谨的逻辑训练,纵使有天分,多半也是段誉的六脉神剑,无从驾驭,只能期望妙手偶得,而不能经由一条严谨的逻辑链条,得到经得起考验的结论,还是无法突破自身感觉经验世界的局限;或者,用约翰·杜威的话来说就是:

……我们浪费在下面这些事情上的精力,比我们敢于承认的还要多:随意构想的图景、随机闪现的回忆、诱人但毫无理由的期望、无聊的重复、不成形的印象……

六月的第一天,当我收到李笑来老师赠送的Beyond Feelings:A Guild to Critical Thinking时,打开就不忍放下了——标题的Critical Thinking已经很诱人了,目录更是如此:

I. The Context
Introduction
1. Who Are You?
2. What Is Critical Thinking?
3. What Is Truth?
4. What Does It Mean To Know?
5. How Good Are Your Opinions?
6. What Is Evidence?
7. What is Argument?

II. The Pitfalls
Introduction
8. The Basic Problem:  “Mine  Is Better”
9. Errors of Perspective
10. Errors of Procedure
11. Errors of Expression
12. Errors of Reaction
13. The Errors  in Combination

III. A Strategy
Introduction
14. Knowing Yourself
15. Being Observant
16. Selecting an Issue
17. Conducting  Inquiry
18. Forming  aJudgment
19. Persuading Others

参照上面杜威的话,懂得Critical Thinking的人,相比一般人,在希望运用自己的心智解决看待问题、仔细思索并求得结论时,更懂得如何停止即兴的、意识不完全的妄想,也就是说,他们能够对自己的思考负责,他们更懂得如何驾驭自己的心智,而不是任由其发展,被动地对外界做出反应。我想,这样的能力,是我们每个人都希望具备的吧。

当然,学习是艰苦的过程,学习思考更是如此。经常有人说:想那么多、抠那么细,脑子乱不乱,心里累不累?我却觉得不累、不乱,我的经验是:累与不累,更多的是心理的感觉,而不是生理的现象;而且,许多事情,只做到一半和全做完,感觉是截然不同的,甚至完全相反:摸索的过程当然是痛苦的,但不经历这种痛苦,就不能超越自身感觉经验的局限,收获纵览全局的愉悦,而纵览全局之后,自然可以收放自如——能举重,才有自由能够选择举重若轻还是举轻若重。这个道理,也适用于许多正确的事情,如果明知方向是对的,但免不了挫折感,那多半是因为你做得还不够多,不够勤罢。

怎样翻译更地道:否定句的翻译

英文中的否定句,大致可分为两种,一种是对单词的否定,也就是“特殊否定”(Special Negation),比如She is unhappy;另一种是对整句的否定,也就是“句子否定”(Nexal Negation),比如She is not happy。两种类别,在最简单的情况下,意思是没有多少区别的,都是“她不高兴”,但如果加入了其它词语,分别就显现出来了。
比如,我们加入单词very,前者就成了She is very unhappy,意思是“她很不高兴”,后者则是She is not very happy,意思是“她不太高兴”——可以看到,对文句的否定,多少都含有一点肯定的成分。我们不妨再举几个例子:

I don’t think he will come. 我认为他不会来。(本意是“认为”而不是“不认为”)
I don’t complain of your words, but of your tone in which they are uttered. 我抱怨的不是你说的话,而是你说话的口气。(本意还是要“抱怨”的)

如果文句否定中加上because进去,变成not…because…,情况就更复杂些了。最简单的情况,可以把because理解为though/although:

You should not despise a man because he is poor.  不要因为他穷就看不起他(或者“虽然他穷,也不要看不起他”)
Don’t be vain because you are good-looking. 不要因为自己漂亮就虚荣(或者“虽然你很漂亮,也不要虚荣”)

但是,not…because…另有一种更复杂的情况,单从句子上看,完全可能是不同的意思,这时候就需要根据上下文来理解了,举例如下:

I didn’t go because I was afraid.
一种理解是:I didn’t go, because I was afraid. 因为害怕,我没有去。(在这里,否定的是“去”,而“害怕”是原因)
另一种理解是:I went, but the reason is not fear. 我去了,但不是因为害怕才去的(在这里,“去了”是事实,否定的只是“原因”)

所以遇到这种句子,一定不可孤立地猜,而要根据上下文来确认。

最后说说翻译否定句时对语气的把握,比较下面这三种形式的否定:

He isn’t a liar.
He’s not a liar.
He is no liar.

第一种的语气最为平实,意思也最为简单,可以直接翻译为“他不说谎”;第二种把not单独拿出来,语气就更强烈些,不只是说“他不说谎”,而是肯定“他是个诚实的人”;第三句使用no表示“彻底否定”,语气更为强烈,实际上可以理解为“他说的话绝对可信”。类似的例子还有 He is no coward(他非常勇敢)、It is no distance from here(根本没多远)。

怎样翻译更地道:It is…that…句型谚语的翻译

It is…that…的句型,在英文中非常常见,大家都知道,这表示强调,理解的时候,要把that后面的部分放到前面来,比如:

It is no wonder that she is so ill.
她病得这么厉害,并不奇怪。
It is strange that she should have failed to see her own shortcomings.
她竟然看不到自己的缺点,这真奇怪。
It is arranged that the class meeting will be held next week.
据安排,下周召开班会。

但是,语言也是非常微妙的,没有定规可循,例外的情况很多,中文里“中国队大败美国队”与“中国队大胜美国队”是同一个意思,英文也同样如此,“She is too tired to speak”与“She is too ready to speak”,句型一样,表达的却是完全相反的意思(前者是“她累得走不动了”,后者是“她说话太草率”);再比如,莎士比亚的《威尼斯商人》第2幕第2景第81行有这么一句:

……It is a wise father that knows his own child. ……

老高波:唉,少爷,我是个瞎子;我不认识您。
朗斯洛特:哦,真的,您就是眼睛明亮,也许会不认识我,只有聪明的父亲才会知道自己的儿子。好,老人家,让我告诉您关于您儿子的消息吧。请您给我祝福;真理总会显露出来,杀人的凶手总会给人捉住;儿子虽然会暂时躲过去,事实到最后总是瞒不过的。

以上是朱生豪先生的翻译,而梁实秋先生翻译的是:……聪明的父亲才能认识自己的儿子呢……

初看起来并没有错,都还通顺,但较真起来是,两位大翻译家不幸翻译错了。中国古话虽然有“知子莫若父”,但莎士比亚的意思却是相反的:无论怎样聪明的父亲,也不见得认得出自己的儿子。把这句话放回原文,才真正通顺:

老高波:唉,少爷,我是个瞎子;我不认识您。
朗斯洛特:哦,真的,您就是眼睛明亮,也许会不认识我,再聪明的父亲,也有认不出自己儿子的时候。好,老人家,让我告诉您关于您儿子的消息吧。请您给我祝福;真理总会显露出来,杀人的凶手总会给人捉住;儿子虽然会暂时躲过去,事实到最后总是瞒不过的。

那么,It is…that…,究竟在什么情况下表达这种“否定”的意思呢?据我的经验,如果它作为格言、谚语(Update:网上查到已经有人写过这个问题,总结有三个特征:1.被强调部分是一般的泛指;2.被强调中心词至少有一个形容词作为修饰;3.时态为一般现在时),就要尤其小心,仔细掂量原意,以下再举三个例子:

It is a good workman that never blunders.
再好的工人,也会犯错(智者千虑,必有一失)。
It is a long lane that has no turning.
再长的路,也会遇到转折(世事难料)。
It is a good horse that never stumbles.
再好的马,也有失蹄的时候(凡人总有缺点)。

正则表达式解题经验谈

这两天,我的同事丁宇@felixding,极具艺术气质的设计师,推荐)遇到了一个正则表达式的问题,我琢磨了半天写了个表达式,暂时能用;今天庄表伟@zhuangbiaowei)跟我说,遇到正则表达式的问题,大家一般只能查手册,但具体的问题要怎么思考和解决问题,往往束手无策;恰好我在写作《正则表达式傻瓜书》,也希望多讲讲这方面的内容。尽管目前的写作还没有进展到介绍解题经验的阶段,但可以先在blog上写这方面的内容,希望对大家有所帮助,也希望大家多提意见;如果大家愿意,我可以继续写这类文章。
另:本例解决过程中王晖同学(@cnhacktnt)提供了大量的帮助,他使用正则表达式的熟练程度远在我之上,在此深表感谢。

要想写好、写对正则表达式,第一步就是分析需求,把模糊的应用要求清楚归纳为几条程序性特征;本例中的正则表达式用于验证“密码字符串”,仔细分解应用场景,可以得到四条明确的要求(一般来说,密码字符串对长度都有要求,但本例中,需要验证的密码字符串已经由其它语句保证了是6-12位长的字符串,所以这里不考虑长度):

1.只能由小写字母、数字和横线(-)组成;
2.开头和结尾不允许是横线;
3.不允许全部是数字;
4.不允许有连续(超过一个)的横线。

下面我们一一解析:

1.只能由小写字母、数字和横线(-)组成
这一条很好办,用字符组『[-a-z0-9]』即可解决,注意我们没有用字符组『\w』,因为一般来说『\w』等价于『[a-z0-9_]』,下划线_也可以匹配;在使用正则表达式时准确限定范围、避免错误匹配,是需要谨记的规矩;

2.开头和结尾不容许是横线
这也很好办,我们知道,在正则表达式中,字符串的开头位置用『^』表示,结束位置用『$』表示(关于『\A』和『\Z』的情况暂不讨论,因为密码字符串中不可能出现换行符),这两个锚点(anchor)只匹配位置,不匹配任何字符;开头不容许出现横线,也就是说,从开头位置向后,不容许出现横线字符,我们可以用否定顺序环视(negative lookahead)功能解决。在本例中,它写作『(?!-)』,其中的『(?!…)』是否定顺序环视的标志符,其中的横线,整个结构表示,在当前位置之后(也就是右边一位),不容许出现横线字符,把它和表示字符串开头的『^』连在一起,得到『^(?!-)』,就表示“从字符串的开始位置,向右边看,不容许马上出现横线”;类似的,我们在表达式的末尾使用否定逆序环视,正则表达式『(?<!-)$』就表示“从字符串的末尾位置,向左边看,不容许马上出现横线”;

3.不容许全部是数字
这个要求得动点脑筋,有人一看到“不容许全部是数字”,就想到否定型字符组『[^0-9]*』,这其实是不对的。我们仔细想想,“不容许全部是数字”就是“必须出现至少一个非数字字符”,而第一条要求字符只能是小写字母、数字和横线,那么这个“非数字字符”只能是小写字母,或者横线。这样一来我们就知道了,在这个正则表达式中,必须出现一个『[-a-z]』匹配的字符;

4.不容许有连续(超过一个)的横线
这种“不容许出现某种连续字符”的情况,是正则表达式中最难处理的地方,因为常见的表示“不容许”的功能,就是排除型字符组『[^…]』,于是,遇到“不容许出现两个连续横线”的情况,许多人就想当然地写下『[^–]』,但这其实大错特错——我们需要谨记,字符组的作用只限于单个字符,所以『[^–]』的意思是“在这个位置,不能匹配横线”。那么要怎么办呢?
一般来说有两个办法,我们可以规定,在一个横线字符匹配之后,不容许继续出现横线,还是应用上面说过的否定顺序环视,『-(?!-)』,就保证了匹配了一个横线之后,不容许继续出现横线,如果在每一个可能匹配横线的地方都加上这个限定,“不容许有连续(超过一个)横线”的要求也就满足了;或者我们也可以在整个正则表达式的最开头,使用否定顺序环视『^(?![-a-z0-9]*–)』,因为表达式『[-a-z0-9]*–』会“尽力寻找可能的匹配”,对它加以否定,就保证了整个字符串中绝对不容许出现两个连续的横线。
在这个例子中,我们观察第一条要求对应的表达式,发现横线一般是与小写字母和数字同时出现在一个字符组『[-a-z0-9]』中,如果采取上述第一种办法,因为字符组中只能出现对单个字符的规定(而无法使用类似环视之类的结构),『[-(?!-)a-z0-9]』的意思完全不对,所以整个字符组就要改成括号,以多选结构表示为『(-(?!-)|[a-z0-9])』,显得很累赘,所以优选第二种方法。

好了,四条要求已经分别解决完毕,现在我们把它们组合起来。

首先,是开头的『^(?!-)』,这就表示“开头不容许出现横线”,在结尾用『(?<!-)$』,表示“结尾不容许出现横线”;
其次,之中的内容都只可能是小写字母、数字和横线,所以用字符组『[-a-z0-9]』,因为长度不确定,所以使用量词『*』,变成『[-a-z0-9]*』;
再次,整个正则表达式中必须出现一个非数字字符,也就是必须让『[-a-z]』匹配一个字符,因为这个非数字字符出现的位置不确定,我们不妨把上面的表达式『[-a-z0-9]*』“切开”,把『[-a-z]』塞进去,得到『[-a-z0-9]*[-a-z][-a-z0-9]*』,这样就保证了“在所有由小写字母、数字和横线构成的字符串中,至少出现了一个非数字字符”;
最后,不容许出现两个连续的横线,我们的解决办法是在字符组的最开始位置,添加一个否定顺序环视,也就是『(?![-a-z0-9]*–)』,我们把它与之前的『^(?!-)』合并起来,得到『^(?!(-|[-a-z0-9]*–))』。

所以,整个正则表达式就是这样:

^(?!(-|[-a-z0-9]*--))[-a-z0-9]*[-a-z][-a-z0-9]*(?<!-)$

看起来完全没有问题,但放到Ruby on Rails框架里运行,却报正则表达式错误——原来是Ruby不支持逆序环视,所以最后的『(?<!-)』无法使用;那么要如何解决呢?
这时候又有两个办法,第一是用字符串函数判断最后一个字符是否横线,来“辅助”正则表达式,许多新手往往会陷入思维的误区,或者追求“漂亮”,非要用一个正则表达式解决所有问题,这其实是不必要的;如果非要用正则表达式,可能要动用一些复杂的结构——不过还好,在本例中,我们可以“取巧”,再添加一个否定顺序环视,『(?![-a-z0-9]*-$)』,表示“不容许出现 横线+字符串结尾 的情况”,也就等于“在字符串结尾之前,不能出现横线”。

我们把这个字符组与之前的『^(?!(-|[-a-z0-9]*–))』合并,就得到『^(?!(-|[-a-z0-9]*–| [-a-z0-9]*-$))』;于是,整个正则表达式就成了:

^(?!(-|[-a-z0-9]*--|[-a-z0-9]*-$))[-a-z0-9]*[-a-z][-a-z0-9]*$

输入这个正则表达式,编译不再报错,运行测试,发现完全符合要求。

怎样翻译更地道:译者一定要多走一步

很多人都对外国的教材颇有微词:一个简单的东西,翻来覆去地讲,生怕不明白,很麻烦。没错,这样确实很罗嗦,但罗嗦并非没有意义,这是因为作者为广大读者(而不是某一个读者)考虑,多走了好几步,这样才能照顾到大部分读者,真正传授知识。

同样的道理也适用于翻译,译者相比读者,也一定要多走一步,这个道理最明显的体现就是典故的翻译。

所谓典故,就是文章中引用的古代故事或者有来历的词语。译者对典故的处理,需要照顾两方面:一方面要能够识别、准确理解原文中的典故,这需要语感、知识积累和运用搜索引擎的能力;另一方面,也要能把典故的意蕴传递给读者,毕竟,原文与译文是不同的语言,存在于不同的文化之中,不能奢求读者理解原作文化中的典故。

Continue reading 怎样翻译更地道:译者一定要多走一步

我个人比较受用的一些习惯

1.长期的任务,要尽早开始

一般来说,长期任务总是比较烦人,也有难度,而人心里总有逃避困难的趋势,最后的结果或者是最后干脆放弃,或者是剩下一点点时间手忙脚乱地赶工;我自己之前也有这样的教训,自欺欺人地说“要轻松生活,抛开烦扰”,到最后几天才着急办理,搞得狼狈不堪。

后来,我发现这做法其实是事与愿违的,如果调整好心理状态,尽早了解情况并不必然带来的心理压力,反而因为时间充裕,有信心把握进度,即便中间遇到突发的问题,也留有时间解决;更重要的是,尽早着手,可以充分利用边角余料的时间:比如说,接到一份文档,需要在三天后给出意见,我一定会在当天大致浏览一遍,下面的三天里,就能在坐车、走路等等零碎的时间来思考,而且效果不错,如果没有尽早了解,这些时间就浪费了,什么有意义的事情也没干(阿基米德若不是之前遇到了问题,在澡盆里泡一万年也想不出办法检测皇冠的真伪)。

电子邮件的情况也是如此,我常看到有人讨论电子邮件是马上回好还是过一段再回好,我的经验是,收了电子邮件要尽快看,至少了解邮件里说了什么,如果不是着急的,等想清楚了再回。

2.时常想清楚自己正在做的事情

一般来说,我们做的工作总是有一个目的和意义的,但工作的形式又是非常具体的,忙起来往往就钻到死胡同里,忘记了真正的目的和意义,“想不清楚”自己真正要做什么了。前几天,我需要搭建一个演示环境,手上有两套方案A和B,方案A估计要半小时,方案B估计要一小时,于是我选择了方案A,可是动手之后才发现服务器缺乏一个必要的组件,于是先费劲添加好这个组件,再编译自己需要用到的软件,又发现在64位环境下会编译出错(以前我只在32位机器上编译过),上网查发现需要打一个补丁,于是又四处去寻找这个补丁……此时已经用掉一个多小时了,下面还不知道会有多少问题;我忽然想到,自己真正要做的无非是演示程序,解决打补丁、找软件之类的问题虽然很有意思,但其实从任务的角度考虑,是浪费时间,于是果断选择方案B,一小时后就顺利解决了。

据我观察,很多技术人员都热衷解决纯技术问题,温伯格称之为“hacking (神游)”;神游很好玩,容易上瘾,但我们都不是不食人间烟火的神人,要想真正做点事情,就不能放任神游。

关于这一条,还要补充一点:哪怕忙得昏天黑地,也不能没有头绪。工作的压力很大,忙得焦头烂额是常有的事情,许多人就在这种忙碌中失去了方向,往往忙了整天,下班了都不知道自己今天到底干了什么,有什么意义。我的经验是,越是这种时候,越要打起精神想想(虽然这样很难):自己究竟要干什么,目前的安排是不是可以做些调整……持续的思考,才会产生感悟,才能有改观,否则,有可能一直陷入“瞎忙”的境地而不能自拔。

Continue reading 我个人比较受用的一些习惯

怎样翻译更地道:and不是“和”

生硬地“对接”两种语言,尤其是“条件反射”式地对照,是翻译中的大忌——一方面,译文因此变得僵硬难读;另一方面,在不同场合,词语的意义也有不同,自然也不能用同样的办法来翻译。今天讲的就是常见单词and的翻译。

英文单词and,一般译者都翻译为“和”:

you and me 你和我
China and America 中国和美国
peace and development 和平与发展

(Update:图灵的刘江老师指出,地道中文许多场合不用“和”,确实如此,上述例句的“和”也可去掉,类似的还有“油盐酱醋”、“东南西北”、“男女老幼”等;就我个人的经验,不用“和”时一般使用单字名词,结合多字名词用“和”则显得比较洋气)

在这些场合,如此翻译并没有错:连接两个对等主体的连词,正是中文所说的“和”。

Continue reading 怎样翻译更地道:and不是“和”

怎样翻译更地道:最高级的翻译

英文中形容词有比较级、最高级两种形式,遇到最高级,条件反射式的做法就是以“最”来翻译:best就是“最好”,worst就是“最糟”,highest就是“最高”,lowest就是“最低”……万变不离其宗,总之离不开“最”字。
这种现象正常吗?就我所知,著名翻译家思果先生曾提出,最高级不一定都要翻译成“最xx”,因为中文里“最”往往是唯一,而英文的最高级则可以加one of…之类的限定,“最xx之一”的说法,多少有点名不正、言不顺。
思果先生的做法,我有保留地赞成:最高级不一定都要翻译成“最xx”,但我的理由,并不是从“之一”出发的。

就我所知,英文里的最高级,是存在绝对最高级(absolute superlative)和相对最高级(relative superlative)之分的,前者通常不加冠词the,用来表示很高的程度(a high degree),大致等于very, very…,表达的并非“首屈一指”、“登峰造极”的意思,只是表示程度很高;后者则多加冠词,表示我们常说的“最高”、“最好”的本意。正因为最高级有这两种形式,翻译时一律采用“最xx”的译法,就不太妥当了。试看下面三个句子:

The scenery here is the most picturesque in this area.
The view from the mountain top was most picturesque.
It was a most picturesque scenery.

第一句的最高级是相对最高级,而后两句的最高级都是绝对最高级,所以,应当分别翻译为:

此处的风景是附近最漂亮的。
从山顶看到的风景非常美。
那是一片非常美丽的风景。

另外要补充一点,即便使用相对最高级,也可能遇到需要增强/减弱的情况,此处列出增强/减弱用法的中英文对应:

增强:
much/by far
He is much the brightest boy in our class.
他的确是我们班最聪明的学生。

减弱:
about/practically
He is practically the brightest boy in our class.
他可算我们班最优秀的学生。