按:这个问题是我长久以来都有希望想明白的,最近和徐宥同学讨论,终于稍微理清了思路,写在这里给有兴趣的朋友参考。认真的讨论,真是帮自己厘清思路的好办法。 有一类事情,我小时候就遇到过:好不容易有了个不错的主意或发明,不久却发现早就有人想到过了,于是陷入沮丧;如果我能早点出生,说不定记入历史书的就是自己的名字呢。 这种事情遇到的多了,我便开始想,我们要读那么多书,要记忆那么多先贤的名字,但是,他们真的比我们更聪明吗?或许仅仅是因为他们出生更早,“抢先”想到了那些问题,所以更聪明,这太不公平了。尤其是不断听到“从古人/老祖宗那里学习智慧”的说辞,就更加不服气了:他们真的比我们更聪明吗?而且我相信,有这种想法的人不在少数,我也见到不少人宣称自己“不逊于古人”,原因就是他们有一些“独立”的发明或发现。 可是,见识稍微多了些之后,我却逐渐相信,这样的“独立”发明和发现,并不能说明我们“不逊于古人”。要知道,发明和发现,并不是凭空产生的,有机遇的成分,更有知识储备、认知背景的因素;如果苹果不是掉在牛顿身上,发现万有引力定律的时间可能还要推迟。因此,所谓“独立”的发明和发现,也不能脱离文明发展水平而独立存在。举个例子:在现代,随处都可以见到火,摩擦生热也是生活的常识,所以哪怕现代有人“独立发明”了钻木取火,难度也远逊于茹毛饮血的时代。故而我们可以说,现代人即便有独立的发明和发现,也未必比古人更聪明。 那么,古人真的更聪明吗?我们随处可以看到“从古人/老祖宗那里寻找智慧”的说法,也听惯了“古人早就讲过…”的言辞,但是细细推敲一番,就发现这些说法似乎也不成立。 举个最简单的例子吧,许多人都知道一句名言:“人是政治的动物”,这是希腊大哲人亚里士多德的名言。读过他原著的人都知道,亚里士多德说的“政治”,并不是“权术”,而指公共空间(或者说“共同体”)中的言行,也就是说,人必然需要参与公共事务,每个人都不可能脱离社群而单独存在。但是,现代许多人引用这句话时,却有意无意忽视了“政治”的变化,甚至直接把“政治”等同于“权术”。如此一来,许多怪异甚至恶劣事情就“师出有名”了,更可以借此“教训”其他人:这可是古人的智慧,深刻的洞见。 这类现象,在我国尤其明显,因为我国历来缺乏解释学的传统,缺乏复现原文语境、辨别真义的持续探索和努力,古人留下的只言片语,就更容易“与时俱进”,不断附会出新的意义,久而久之,就愈发像“真理”了。然而,无法复原语境,无法确知语言的真正含义,其实根本谈不上什么“深刻洞见”的。 再退一步说,即便我们能确认古人说话的语境与现代的语境差别不大,古人做的“正确”判断,也不足够证明“古人更聪明”:我们都知道,要真正解决一个问题,必须经过若干个步骤(一般来说,越到现代要解决的问题更加复杂),但是,刚开始的几步基本是不变的,即便后来要反复试错,也难以全部推倒重来过。古人的许多话也是如此,限于当时的认知水平和文明发展程度,他们更多是做一些“原初”的判断,远不如今天的判断精密严格:没有准确的限定,也没有可证实或证伪的结论。比如,我们都知道有句老话叫“物极必反”,但针对一个具体的复杂问题,什么是“极”,“反”了之后会成什么样,估计没多少人弄得清楚:往一个方向走了一百步发生了甲变化,可以说是“物极必反”,往另一个方向走了一千步发生了乙变化,也可以说是“物极必反”……结果就好像《爱丽丝梦游奇境》里柴郡猫所说的“只要你走的足够远,总能找到些东西”,也就是说“物极”总是可以找到“必反”。诚然,我们不必否定“物极必反”,但在当今社会,面对更复杂更精密的问题,仍然只知道“物极必反”,就是我们不够聪明:社会进步了,文明发展了,认识却没有深化。因此,现代人除了要知道概略的“物极必反”,更应该知道在什么情况下,会发生什么样的变化——虽然这样的知识很可能出错,而“无极必反”却从不会错,如果做不到这一点,倒真是证明了“古人比我们更聪明”。 所以,我的看法是,古人是不是比我们更聪明,这个问题很复杂,我们固然不宜因为自己的发明发现就否认古人的艰苦努力,但也不宜还没全面了解就把古人的话奉为金科玉律,更不宜把给笼统的判断戴上“本质/普遍规律”的高帽子来膜拜;对古人的话,应当努力理解语境,弄清它的本来意义,把握好分寸(比如:它到底是个定性的概略判断,还是个定量的具体判断),才能得到自己的客观判断。也正是因为如此,胡适先生才告诫年轻学子:不假思考地引用古人的话当论据,其实是非常要不得的习惯。当然,胡适先生的这句话,我们同样要多加思考、妥善运用。
我刚刚上政治课的时候,总是不明白“形而上学”是什么东西,课本总是语焉不详,又大加挞伐;后来,我从《现代汉语词典》里查到了“形而上学”的概念,把它工工整整地抄在扉页上,现在还大致记得内容:一种哲学观点……强调用静止、孤立、片面的眼光看待世界…… 到后来终于有机会看点哲学原著,才知道“形而上学”并不仅仅是“一种”哲学观点,而是在哲学乃至人类文明中占有相当地位(至少是曾经)的知识门类。再学了点英文,知道“形而上学”的原文是metaphysics,meta表示“之后/之上”,physics的希腊原文φυσικά(physiká)则表示“自然,自然的产物”;照字面意思,不妨翻译为“自然现象之后”,也可以这么说:形而上学就研究的是自然现象背后内容的学问。这背后的内容,你可以叫它“本质”(所以形而上学才会与“本体论”联系起来),也可以认为它是理念、规律;无论怎么称呼,它总是代表了人类不满足于现象本身,而要探究其幕后景象的渴望。可以说,也正是因为这种不满足和渴望,人才有动力超越自身经验的局限,逐渐摸索出规律和原理,把不同的现象联系起来,拓展对世界的认识,也才有今天庞大而复杂的知识结构。 形而上学固然有过这样的好处,但这种超越(脱离)感知,更多借助理性和推演的做法,却不见得容易认同。举我自己的例子吧,小时候父母希望培养我读书的爱好,但开始并非全给我讲有趣的故事,而是花了很多精力让我学习查字典,当时我很不理解,因为相对看有意思的书,学习查字典实在是很无聊的工作,而且查字典与看书并没有特别紧密的联系,一个字在字典里有很多解释,但看书时其实只要用到一种,为什么要费力走那些弯路呢;另一个例子是父母带我去认各种生物(主要是植物和昆虫),回来之后必然要我去查百科全书,了解一样生物的分类、习性、分布等等知识,很长时间里我也不了解这样做的意义,分类、习性、分布等等,知道了固然没什么坏处,但这些知识,完全不能对接上我的感觉经验,用现在许多人的话来说:搞那么复杂,何必呢? 同样的看法,我保持了许多年,直到后来才逐渐改变:查字典看似与读书没有直接的关系,但在普通阅读时,我们接触到的都只是字词的某个方面,而要妥善运用这些字词(比如翻译时就很需要),就得把握它的“实质”,就必须做些脱离现实的工作,了解这个词的起源、词性、应用场合;查百科全书也是如此,它让我知道了生物与生物之间存在哪些奇妙的联系,而且知道已经有了某些完善的工具来分析和描述看到的现象,即便这些知识暂时“没有用”,将来也多半能有用得着的地方(比如判断某种说法的可信度)。 不过,最重要的收获是:我逐渐发现,这些“脱离实际”、去追求“知识背后的知识”的做法,帮我养成了“不满足”的习惯——遇到什么,都不大甘心止步于最基本最简单的现象,而希望更进一步,到更深入、更广泛、“脱离实际更远”的世界(虽然可能仅仅是“理念世界”)看待它;或者可以这么说:我看到一个世界,不光要想去认知这个世界中的一切,还要想想我是怎样看到这个世界的——是在怎样的条件下,借助怎样的光线看到的——如果这些条件变化了,我看到的世界还会是这样吗…… 当然,有人不屑地说这是“玩套路”或“太麻烦”,但我自己确实能从中受益。比如读书,我读书的速度其实不够快,只是花了些时间学习如何阅读一本书,于是遇到好书,总愿意花时间了解作者的身份和流派,全书核心观点的渊源,在相关领域/学科的地位和批评,我觉得,这样才算真正掂量准了这本书的分量,才能够做真正的评判和取舍、有所收获,一个例证是:与人谈起来,自己的理解更可信、更稳定(当然不是为辩论而辩论的稳定);再比如专业技术的学习,我也愿意多花点时间,培养、积累对新技术的理解和判断能力:几乎每一门新技术,都对应了一类问题,背后都有一道渊流,我们学习的时候,如果能突破技术本身(许多时候就是相关书籍)的局限,梳理清楚它产生的原因、它擅长解决的问题、它合适应用的场景、还有大家对它的批评,真正解决起问题来,把握感和驾驭感都会大大增加,生产效率也随之上升。 更重要的是,人类的行为是严重受到知识影响的,许多时候,不去努力学习一点“知识背后的知识”,很快就把一条路走到头,而陷入无解的局面:比如如今流行的一个说法是“现代社会知识大爆炸,让人根本无从选择”。的确,在之前很长的时代里,我们都处于知识匮乏的状态,于是遇到信息总希望吸收,遇到知识总希望掌握,但是现在这样做已经行不通了。这看似是一个无解的问题。但是,如果不止满足于“学习知识”,还愿意认知原理(也就是“关于学习知识的知识”),这问题就迎刃而解了:像海绵一样,看到知识就学,看到信息就吸取,这是信息匮乏年代的模式;在信息丰富的年代,我们需要走一条不同的道路了:把自己的大脑锻炼成有效的筛子(这种训练和锻炼也是有章可循的,虽然它们似乎更加“脱离实际”),像淘金一样,只留下最有价值的内容,放任那些无价值的信息流过。与此类似的“无解”问题还有许多,但并非都真正“无解”,如果你愿意多掌握一些“知识背后的知识”,多半能看到全新的解决办法。 学过中学物理的人都知道磁场和磁力线,它们看不见、摸不着,但可以想象、归纳,也在人类生活中发挥了巨大作用(比如,在没有树木、没有阳光的地方,也可以指引方向);从某种程度来说,“知识背后的知识”也是如此,它们看不见、摸不着,可是一经掌握,你就能获得全新的视角,看到很多全新的办法——比如,许多人常常一面学习,一面苦恼,于是有了“知识越多越烦恼”的说法,但是如果你愿意花些时间掌握“究竟要学习什么”的知识,愿意了解人在生命的每个阶段会遇到哪些问题、应当为下一阶段做哪些准备,所谓“知识越多越烦恼”的说法,也就变成了“知识越多越坦然”、“知识越多越有节奏感”。
我的一位朋友曾在意大利求学,某次他坐飞机回国,遇到旅游返程的同胞,便聊起天来。原来这位同胞在国内某垄断企业任职,这一趟去意大利,资金当然不是问题,不仅买了不少皮具,还游览了不少经典。在飞机上,他得意地拿出相机展示看那些“到此一游”的照片,不料,我的朋友看到每个景点,都能把典故娓娓道来。开始这位同胞还听得饶有兴趣,后来却露出失落的神情,他说“唉,原来有这么多讲究,之前根本不知道,比起来,这趟真是太亏了。” 听到这个故事的时候,我想,如果换了我,我也会失落甚至懊悔——我们且不论购物和浏览的关系,不争的事实却是,游览时不了解背景知识,同样时间、同样的线路,所得也极为有限;或者说,如果知识更多一些,在同样的时间里,完全可以多几点收获。 这一点,其实不仅仅限于游览,对日常生活的世界,也是如此。近年来我业余时间着意读了不少关于湖南历史、地理、经济方面的文本,原本只是出于兴趣,希望梳理自己的感觉经验,结果却出乎意料:虽然回家的时间不多,每次回家的感觉却远远比在离家读书之前来得丰富和深厚:看到作为特产的蜜橘,会想到它其实是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.…
英文中的否定句,大致可分为两种,一种是对单词的否定,也就是“特殊否定”(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…
It is…that…的句型,在英文中非常常见,大家都知道,这表示强调,理解的时候,要把that后面的部分放到前面来,比如: It is no wonder that she is so ill. 她病得这么厉害,并不奇怪。 It is strange that she should have failed…
这两天,我的同事丁宇(@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])』,显得很累赘,所以优选第二种方法。 好了,四条要求已经分别解决完毕,现在我们把它们组合起来。…
很多人都对外国的教材颇有微词:一个简单的东西,翻来覆去地讲,生怕不明白,很麻烦。没错,这样确实很罗嗦,但罗嗦并非没有意义,这是因为作者为广大读者(而不是某一个读者)考虑,多走了好几步,这样才能照顾到大部分读者,真正传授知识。 同样的道理也适用于翻译,译者相比读者,也一定要多走一步,这个道理最明显的体现就是典故的翻译。 所谓典故,就是文章中引用的古代故事或者有来历的词语。译者对典故的处理,需要照顾两方面:一方面要能够识别、准确理解原文中的典故,这需要语感、知识积累和运用搜索引擎的能力;另一方面,也要能把典故的意蕴传递给读者,毕竟,原文与译文是不同的语言,存在于不同的文化之中,不能奢求读者理解原作文化中的典故。 (more…)
1.长期的任务,要尽早开始 一般来说,长期任务总是比较烦人,也有难度,而人心里总有逃避困难的趋势,最后的结果或者是最后干脆放弃,或者是剩下一点点时间手忙脚乱地赶工;我自己之前也有这样的教训,自欺欺人地说“要轻松生活,抛开烦扰”,到最后几天才着急办理,搞得狼狈不堪。 后来,我发现这做法其实是事与愿违的,如果调整好心理状态,尽早了解情况并不必然带来的心理压力,反而因为时间充裕,有信心把握进度,即便中间遇到突发的问题,也留有时间解决;更重要的是,尽早着手,可以充分利用边角余料的时间:比如说,接到一份文档,需要在三天后给出意见,我一定会在当天大致浏览一遍,下面的三天里,就能在坐车、走路等等零碎的时间来思考,而且效果不错,如果没有尽早了解,这些时间就浪费了,什么有意义的事情也没干(阿基米德若不是之前遇到了问题,在澡盆里泡一万年也想不出办法检测皇冠的真伪)。 电子邮件的情况也是如此,我常看到有人讨论电子邮件是马上回好还是过一段再回好,我的经验是,收了电子邮件要尽快看,至少了解邮件里说了什么,如果不是着急的,等想清楚了再回。 2.时常想清楚自己正在做的事情 一般来说,我们做的工作总是有一个目的和意义的,但工作的形式又是非常具体的,忙起来往往就钻到死胡同里,忘记了真正的目的和意义,“想不清楚”自己真正要做什么了。前几天,我需要搭建一个演示环境,手上有两套方案A和B,方案A估计要半小时,方案B估计要一小时,于是我选择了方案A,可是动手之后才发现服务器缺乏一个必要的组件,于是先费劲添加好这个组件,再编译自己需要用到的软件,又发现在64位环境下会编译出错(以前我只在32位机器上编译过),上网查发现需要打一个补丁,于是又四处去寻找这个补丁……此时已经用掉一个多小时了,下面还不知道会有多少问题;我忽然想到,自己真正要做的无非是演示程序,解决打补丁、找软件之类的问题虽然很有意思,但其实从任务的角度考虑,是浪费时间,于是果断选择方案B,一小时后就顺利解决了。 据我观察,很多技术人员都热衷解决纯技术问题,温伯格称之为“hacking (神游)”;神游很好玩,容易上瘾,但我们都不是不食人间烟火的神人,要想真正做点事情,就不能放任神游。 关于这一条,还要补充一点:哪怕忙得昏天黑地,也不能没有头绪。工作的压力很大,忙得焦头烂额是常有的事情,许多人就在这种忙碌中失去了方向,往往忙了整天,下班了都不知道自己今天到底干了什么,有什么意义。我的经验是,越是这种时候,越要打起精神想想(虽然这样很难):自己究竟要干什么,目前的安排是不是可以做些调整……持续的思考,才会产生感悟,才能有改观,否则,有可能一直陷入“瞎忙”的境地而不能自拔。 (more…)