卡尔波普曾说:“生活就是解决问题”。确实,在生活中,我们时时、处处都在解决问题——吃饭问题、睡觉问题、学习问题、工作问题……于是,“解决问题”本身也成了需要解决并且极有价值的问题。迪特里希·德尔纳的《失败的逻辑》,就是论述“如何解决问题”的一本小书;这本书虽薄,然而“麻雀虽小、五脏俱全”,详细介绍了解决问题的通用步骤,以下结合我的个人经验来谈谈。
解决问题的第一步,是认识问题。这一步往往容易被人忽视,认为是多此一举,因为“问题就摆在那里”,所以许多人上来就跳过这一步,直接动手解决,结果大都收效不佳;究其原因,往往忽略了认识问题。比如听到有人说“要求更高的生活质量”,首先应该提问,“更高的生活质量”是什么?是交通状况更好,还是娱乐设施更多,还是商业更繁荣,学校更普及?到现在为止,这些问题并没有明确的答案,唯一清楚的是,现状不尽如人意。这时候要做的,是在了解清楚情况的基础上明确地设定一个目标。这道理看起来简单,真正做起来却并非如此,许多人并不愿意去寻找真正的答案,反而相对随意地“找”了一个目标:面对“更高生活质量”的要求,有些人会根据自己的经验,想当然地认为这是教育资源不够,所以花大力气整顿教育——其实,这么做的人并没有解决真正需要解决的问题,仅仅是依照自己的能力,解决了自己最熟悉、最顺手的问题,并且“以为”这就是真正的问题。
解决问题的第二步,是认清问题。认清问题与认识问题的区别在于,认识问题只是准确地看到一个点,认清问题是从这个点发散开去,联系到更全面、更深刻的内容。比如某人挨了老板的骂,心里不爽,于是他很清楚问题是“心里不爽”,第一步已经做到了。要解决这个问题,可以找朋友出去大吃一顿,排遣郁闷;也可以好好反思一下,到底为什么挨老板的骂,想通了也就舒坦了。两种办法,都可以解决“心里不爽”的问题,长期的效果却大不相同。还有些时候,我们需要认识到,自己是在一个复杂的系统里解决问题,只解决一个点上的问题,很可能导致其它方面的问题,因为许多因素是此消彼长的——比如为了解决旱灾或者发展需要,大量抽取地下水,初看是保证了用水,但这样做下去,会导致地表沉降等一系列其它问题。所以,仅仅认识问题是不够的,还要能发散、联系四方,认清问题。
解决问题的第三步,是了解信息,制定计划,也就是找到可行的、抵达目标的路径,并将它拆分为若干小部分。在这一步,我们并不能保证自己面对的都是已经已经解决过的问题,可以拿出胸有成竹的方案,所以抽象思维能力非常重要——所谓抽象,就是把具体的问题提升到比较模糊但是通用的形态,经由此关联到已有的知识。一个人或许没有制造手表的经验,也不知道如何制造手表,但他在卷烟厂工作过,所以知道需要原料,按照一定的工序,还需要工人和能量。看来,制造手表也需要采购原料,按照一定的工序组装,并且需要有专业经验的人,并且需要能源支持。在这个例子里,他通过抽象,将手表制作提炼到“原料、工序、人员、能源”的形态,嫁接上了自己之前的经验。
解决问题的第四步,是估量时间序列。一般认为,我们生活在三维空间,所以我们对于空间问题,往往有强烈的直觉;然而,时间同样在我们的生活中扮演着重要的角色,可是我们经常忽略时间结构,即便在时间方面进行了考虑,直觉也非常有限。多个实验和大量事实已经反复证明,人的直觉,在估量时间序列时往往有很大的偏差,即便我们知道疾病的发病率,还是会低估感染者的人数,即便我们知道复利的利率,还是不愿意存钱,因为觉得收益太少。准确地说,普通人往往根据线性模型来进行时间推演,专业人员则清楚,增长函数有宽得多的范围,所以他们往往能选择最合适的函数模型,而不是盲目地根据“感觉”或“直觉”来做判断,所以能做出更准确的预测和规划。
或许有人说,这样做是简单问题复杂化了,把事情“机械化”到这种程度是没有意义的,但是我不这么看,做这种细细的分解,正是为了更有效率、更有效果地解决问题。
《战争论》的作者克劳塞维茨曾说:“战争,从他的最高角度来看,不是由大同小异的无数细小事件构成,而是由需要分别处理的,具有决定意义的各个重大事件构成。战争不像长满庄稼的田地,收割时不需要考虑每颗作物的形状;战争更像长满大树的土地,在砍伐每一颗树时,都需要注意到它的形状和方向”。同样,每天我们都需要解决大量的问题,这些问题各不相同,解法也不能千篇一律。如果非要有什么“以不变应万变”的秘诀,只能是针对每个问题,都能做到认识问题、认清问题、制定规划、估量时间序列这写步骤,并把它们养成习惯,内化到每一次行动当中,才可以做到有所针对地“砍伐大树”而不是简单机械地“收割庄稼”,真正解决“如何解决问题”的问题——随着信息技术的飞速发展,计算机已经承担了越来越多的“收割庄稼”的工作,这时候,能够“砍伐大树”才最能体现人类的价值。
我刚接触计算机的时候,总是为它强大的计算能力所折服,又有些不服气:计算机不就是靠“傻算”取胜嘛——简单重复操作,人类无论怎么锻炼,速度都不可能提升太多,芯片的处理能力却可以按照摩尔定律持续增长。换句话说,计算机算得比人快,“无它,手快尔”。
可是后来,我逐渐发现,用计算机解决许多问题,依靠的并不是“傻算”加上生搬硬套生活中的直观方法,而是“别开天地、自成一体”。我曾经遇到过一个每日运营数据分析的程序,需要10小时才能计算出结果(在当时的业务环境下,这速度完全不可接受),其思维就是生活中的直观方法。我花了一天时间来改进算法,最后只需要5分钟。这个例子我记忆犹新,它充分说明:强大的计算能力,并不能直接带来充沛的解决问题的能力;用计算机解决复杂问题,必须懂得计算机的“玩法”,理解计算机的逻辑,然后才谈得上妥善运用计算能力。
怎样才算懂得计算机的“玩法”,理解计算机的逻辑呢?可以举个排序的例子来说明。
排序,这几乎是我们每时每刻要遇到的问题,对普通人来说,排序就是把一堆东西按大小顺序组织起来;对应的,许多变成语言提供了现成的sort函数,对某些程序员来说,排序就是查找语言文档,调用这种函数即可。但是,事情真的这么简单吗?
为进行排序,需要定义一种关系R用来比较任意两个元素,以常见的小于(<)关系为例,a < b 可以表示为 a R b;现在要做的是,对于排序结果中的任意两个元素Xi, Xj,如果i < j(也就是说Xi在Xj之前),必然存在关系Xi R Xj。
这段话看起来繁杂,意义却很重要。常见的数值类型”天然“就可以进行小于计算,所以对不少程序员来说,a < b中的 <,和返回true或者false的布尔运算符没有区别。这样“凑合”确实可以解决简单问题,却无法处理复杂对象的排序,把人按照身高排序,把货物按照发送的远近排序,把向量按照夹角排序;因为这些时候,排序的对象并不是身高、距离、夹角的度数,而是人、货物、向量。还有些人,大概了解关系的概念,但没有考虑“对排序结果中的任意两个元素,关系都成立”,所以排序结果经常出现“局部有序,全局无序”的情况。
用计算机解决排序问题,必须首先定义“关系”的概念,它在编程语言中存在对应物——常见的数值类型往往会提供默认的排序关系,也可以由用户指定排序关系,比如Java中的Comparator类,Python中的cmp函数,都对应着关系的概念。
以上两点都了解清楚之后,就可以开始选择排序算法。请注意,排序算法与排序关系是彼此独立的——不同的排序关系,可以采用同样的排序算法;同样的排序关系,可以应用到不同的排序算法(这里体现的,是计算机科学中的“责任分隔”、“低耦合”的原则)。
学过算法的人大都记得,常用的排序算法有几种:插入排序、快速排序、归并排序等等。编程语言一般会提供通用的sort函数,确保排序的结果是正确的,所以是不是就不需要了解排序算法了呢?
一般来讲,如果排序的规模比较小(小于千),插入排序是足够快的,也足够简单,同时只需要O(1)的额外空间;如果排序的规模较大,那么选择快速排序比较合适,只是它需要O(log n)的额外空间;如果排序的规模更大,内排序已经不合适,则应当选择归并排序之类的外部排序(External Sorting)算法。
对应到实际开发中,经常会遇到各种场景,比如资源非常有限(典型的就是移动开发),或者运算量非常大(海量数据的处理),这些时候需要程序员理解各种排序算法之后的原理,如果不分青红皂白,只管随意抓一个sort函数来用,结果很可能不只是计算缓慢,而是根本无法实行。所以说,要用计算机高效地解决真正的问题,必须懂得计算机的“玩法”,理解计算机的逻辑。
亨利·福特曾说:“人们需要的是汽车,而不是更快的马”。相应的,汽车时代有汽车时代的规矩和逻辑,同样是赶路,已经不可能再用骑马的规矩和逻辑进行。计算机也是如此,我的经验是,“基本上,计算机可以无限延伸人的能力,前提是懂得计算机的逻辑”,如果在高速增长的计算能力面前还只能延续手工时代的直观方法和简单逻辑,充其量,也只是骑高铁的马夫。
几经周折,《正则指引》终于要截稿了,将目录列在这里,有兴趣的读者可以留言申请试读感兴趣的部分(试读条件:申请试读的读者必须有自己的blog,每人最多试读2章(附录分3章),且须在试读一周内提供试读报告)。
第一部分
第1章 字符组
1.1 普通字符组
1.2 关于Python的基础知识
1.3 普通字符组(续)
1.4 元字符与转义
1.5 排除型字符组
1.6 字符组简记法
1.7 字符组运算
1.8 POSIX字符组
第2章 量词
2.1 一般形式
2.2 常用量词
2.3 数据提取
2.4 点号
2.5 滥用点号的问题
2.6 忽略优先量词
2.7 转义
第3章 括号
3.1 分组
3.2 多选结构
3.3 引用分组
3.4 非捕获分组
3.5 补充
第4章 断言
4.1 单词边界
4.2 行起始/结束位置
4.3 环视
4.4 补充
曾经有个流传甚广的问题:前些年程序员都想去做项目经理,现在都想去做产品经理了,这是为什么呢?我看到的一个答案是:因为程序员都被产品经理折磨疯了。
这是一个许多人都赞同的答案,而且从此细想开去,可以发现很多问题:早先的程序员,并不是不会被产品经理折磨,而是几乎根本没有产品经理来折磨。在开发还主要服务于具体问题,以定期发布一版软件为主要形态的阶段,功能的有与无是最大的问题;而在开发深入到生活的细节领域,计算机用来解决各种问题,持续发布成为常态,竞争又日趋激烈的情势下,产品的重要性才日渐凸显出来——我们都习惯了不仔细翻阅说明书,凭直觉使用各种功能,我们也习惯了在系统的各种“提示”下直抵问题的核心。这些便利,很大程度上是赖产品经理所赐。也正因为如此,越来越多的人投身于产品经理,在这种爆发性增长的阶段,鱼龙混杂,难免苦了在一线开发的程序员。与其忍气吞声,不如取而代之,产品经理由是成了许多程序员的选择。
然而就我所见,许多人不是产品经理时苦不堪言,真正坐上了位子却左支右绌,这种例子并不少。究其原因,或许还是经验太过片面,细节计较太多,内心没有棋局。产品经理的工作重点是什么?属于哪个部门?职责边界在哪里?需要着力培养哪些方面的素质?应当与哪些部门沟通,如何沟通?这些关于产品经理本身问题看似有些“虚”,但若回答不好就去做产品经理,却绝难说是称职的。
要回答这些问题,国内已经有不少优秀的产品经理原创作品可以参考,我愿意同时推荐的,是Marty Cagan写的《启示录:打造用户喜爱的产品》。作者是eBay的高级产品经理,在这一领域着力多年,这本书却绝非巨细靡遗的大部头,而是论述产品经理若干核心问题和经验的精当小册子——实际上,我是在火车上花两小时看完的,但深深记住了产品经理职责的三方面:人员,指负责定义和开发产品的团队人员的角色和职责;流程,指探索和开发产品时,反复应用的步骤和成功的实践经验;产品,指富有创意的产品应具有的鲜明特征。
相应的,这本书也分为三个部分,针对每一个方面细致列出若干主题,比如在“人员”部分,就总结了产品经理的职责,与相关职位的差别及边界,产品经理应具备的素质,工作中应当注意的问题等等。这是我非常喜欢的编排方式,看过Effective C++/Java的人都知道,这种编排方式确实是Effective(有效)的;难能可贵的是,作者并没有止步于这些“务虚的探讨”,还根据经验分析了常见各种选择的优劣,比如将产品团队归入技术部门,往往会埋没于细节之间,归入市场部门,又混淆了产品营销和产品管理的职责;再比如产品经理太听信客户或者太过干涉设计细节,往往容易被“怎么做”迷惑,忽略了“做什么”。如果靠自己提炼这些知识,恐怕得有足够多的经理,吃过足够多的亏,经过足够多的反思;不过有了Marty的书,有志从事产品工作的人,肯定可以少走很多弯路。
当然,也正如书名所说,是“启示”而不是“操作手册”,它并没有提供繁复全面的指引。读完第一遍,我收获了很多启示,要完善正确的产品意识,甚至成长为称职的产品经理,还有很长的路要走;不过我想,我会时常翻一翻《启示录》,带着经验来看它,是常看常新的。
算起来,我也算有一些翻译经验的人了,最近接连做了两次关于翻译的分享,发现很多人都对翻译有兴趣,索性将分享中关于翻译的经验做个总结。
我是在2003年接触翻译的,当时美国对伊拉克动武,国内的报道非常奇怪,为了在论坛上争论,加上自己还在读书,时间比较多,就开始翻译一些外国媒体的报道,发在论坛里。初做翻译的最大感受是堵得慌,从来没想过要把意思表达明白会这样困难,就好像要说话,却发现舌头不受自己控制。所以一千字左右的译文,需要花费四到五个小时,而且完成之后大汗淋漓,心力交瘁。在这段时间,我陆续“义务”翻译了十万字左右的资料,因为是“兴趣所在”,所以不但不觉得累,还愿意花心思去琢磨。另外要特别感谢秋风先生和林猛先生,他们愿意花精力修改我刚入门的译文,指出各种问题,并且指明了很好的学习书籍和词典。回想这段经历,我最大的收获是,许多有意义也值得做的事情,一开始不可能带来明显的回报,甚至都看不到有什么明显的回报,但这不是拒绝投入的理由;另外,精当的指点也是非常重要的,这样自己可以少走弯路,迅速提高(也正因为如此,我不太赞同译言网之类的翻译社区里互相夸赞安慰的风气,没有批评和挑错,译者很难进步)。
但这些还只是开始,我自己翻译最大的收获,还数翻译《精通正则表达式》(第3版)。当时接这本书的翻译,也是有点不知天高地厚,70万字,500页的书往桌上一放,才感觉苦上心头。等到煎熬过去,真正完成,才发现最大的收获并非来自文字本身——技术书籍的语言比较简单,而且,今天看来这本书的译文还有很多可以改进的地方;也并非来自经济收入——《精通正则表达式》2007年面世以来,重印7次,我拿到的版税其实非常有限。让我意想不到的最大的收获在于,如何面对庞杂的任务,鞭策自己日复一日地去执行,最终实现自己的目标。
Continue reading 闲谈翻译
题记:今天看到吴晓波先生的《中国工人阶级的忧伤》,有感而发。对苏东改革有兴趣的读者,可以去看秦晖、金雁两位关于苏东改革的专著,逻辑严密,数据扎实,值得阅读。
2011年7月17日早上,我在上海正大广场星美影院看《钢的琴》;下午,父母在株洲千金电影院看《钢的琴》——若我在家,一般会三人同去观影,若不在,一般是异地协同。之后我问他们,感觉如何。答曰:片子不错。
《钢的琴》确实是近年来我感觉比较满意的国产电影,写实,有现实关怀,完整,构成周全抓人的故事;它不像那些豪华巨制让人感觉莫名其妙,又没有《疯狂的石头》系列那么戏谑超脱,也没有贾樟柯系列电影灰暗沉重的压抑,只是讲了一个现实、正常的故事:陈桂林是东北一家钢厂的下岗职工,老婆跟卖假药的人跑了,离婚判决带走女儿,女儿的态度是,谁给买钢琴就跟谁走,明知买不起钢琴的他,纠集昔日工友,铸造了一架钢的琴。
真正的钢琴有八千多个零件,所以故事稍有点超现实色彩,片中也确实有一些超现实的片段(比如雪夜下的独奏),但并不影响观众入戏,至少我感觉是如此。空旷的厂房,褪色的口号,零落的标牌,破败的生活区,都是记忆中准确的样子——株洲是交通枢纽,也是重工业集中的城市,我从小在这样的环境中成长,亲戚朋友也多分布于各个厂区,集中居住的生活区,各形各色的工人,厂办幼儿园、子弟小学、子弟中学……现在似乎只需要用“大而全”几个字就可以轻描淡写,也只需要喊喊“甩包袱”的口号,它们便一家又一家地破产、倒闭。
我记得那些朝夕相处的形象:有人是老中专生,说话做事认真得紧;有人兴致高雅,业余将我们一帮小孩子叫去他家教授书画;食堂的两位师傅,一位红案一位白案,手艺不错,却为“天师”的诨名而争风斗气……忽然间单位便破败了,大家如鸟兽散,自谋活路;爱好琴棋书画的那位,几无活路;稍好一点的,一把年纪还要当联防队员,忍着酷暑寒冬,赚生活费。
这种境遇,该怪谁呢?怪他们不是生活的强者?可是工人很长时间内分明一直是社会的“中坚力量”啊。怪他们没有早做准备?可是他们年轻的时候,谁敢设想工厂会一夜巨变,真敢的话,估计没有人会坦然接受“低收入高福利”“低收入高积累”政策。怪苏联带了坏头?可是苏联不说对工人,对农民都有良好的保障,工业发展之后主动“反哺”农民,完善了农村福利和医疗体制。
当然,最流行的说法是,这就是改革必要的成本,也是工人应该接受的命运?持这种论调的人很多,我倒觉得这堪称最荒谬的结论了——常有人对比中俄,可是不要忘了,东欧各国大都(比如波兰、捷克、匈牙利)度过了转轨的阵痛,维护了公正,也恢复了经济;俄罗斯若不是搞半截子休克疗法,也不应该有这么长期的衰退。在我看来,许多“必要成本论”者甚至连“休克疗法”有什么具体举措都不知道。作为官员,他们可以完全漠视公正,作为学者,他们只醉心于研究假问题,得出假结论。但是,他们把持了这个社会,把持了那么多人的命运。
而且我猜,这些人甚至把持了更多的内容——我与父母之间,除去对电影的印象比较一致,观影的环境也一致,放映厅里都只有寥寥落落的几个人。问问周围的人,对这段历史,没经历过的人不感兴趣,经历过的人,不知道也不太相信有这样的电影。没有禁播,没有禁言,但在生活的压力下,在虚假叙事的重复之下,在似是而非的论证下,记忆会“自然”地枯萎、褪色、消逝。
题记:完成正则表达式的书稿,对许多事情不再麻木,慢慢恢复写点东西的意识。虽然对网络没太多钻研,但从97年至今,自己上网的历史也有十多年了。在我眼里,这些年来网络呈现出两个趋势:从同步到异步,从匿名到实名,所以写了这篇散记。
先说从同步到异步(这里借用了计算机专业中的两个术语,有必要为不熟悉的读者做一点解释:异步是一种松散的通讯模式,一方发送消息之后,不需要等待对方回复,即可以接续处理,电子邮件就是最常见的异步通讯模式;同步则是较为紧密的通讯模式,一方发送消息之后,需要等到对方回复,才可以接续处理)。长期以来,以QQ为代表的同步通讯是主流方式,它的主要特点是,双方关系紧密到一定程度,必须同时在线,交流非常密集。相对传统的异步通讯方式(比如邮件)来说,它更加可靠,之前邮件往往容易丢失;更及时,邮件发送之后往往不知对方何时才能收到;也更亲切,比较容易打发当代人的无聊和孤独。但是,它只擅长维系关系紧密的网络,许多时候你会觉得,添加某个人为好友,长时间没什么话说,不添加,又联系不上。这其实是由交流的性质决定的:同步性越强,关系就越紧密。观察电话(最强)、IM(次之)、邮件(再次)、SNS网站(需要双向确认)、微博(单向确认即可)可以印证。
但是互联网上,人与人之间并非只有紧密的联系,还有大量的松散联系,这是IM软件(同步交流)力所不及的,倒是异步交流形式非常适合这种关系,所以近些年来,异步通讯重新抬头,在我自己和周围朋友的生活中,IM的使用比例在不断下降,邮件/微博的使用比例在不断上升。究其原因,一方面是网络基础设施已经大大发展,邮件不再容易丢失,而且移动终端保证了随时在线,收到消息可以迅速发出提示,把人从“轮询”的状态下解放出来,放心自由地去做自己的事情;另一方面,也是因为“松散”的交际范围远远大于“亲密”的交际范围,而异步交流方式非常适合维系”不亲密“关系。以微博为例,仔细观察就会发现,一般人的微博关注人数(非僵尸粉),远远大于IM好友人数;而且因为不需要及时回复,这种交流完全不会对使用者造成困扰。也就是说,微博提供了一种大范围、松散、但可控的联系方式。而且,它已经够用了,以前大家交流到最后或许要互换QQ号码,现在则只需要保持微博关注即可,相比SNS网站,甚至不需要对方确认。
再说从匿名到实名。网络实名制已经喊了很多年,大家的看法各不相同,我的看法是,实名制或许没有必要,但网络使用实名却是有意义的,其比例也的确在不断提高。
早期的互联网的热点在于体育、娱乐,与现实的联系并不紧密,大家也习惯取一些别致的网名;后来网民逐渐开始在互联网上论政、撰写时评,到现在,互联网已经深入到民生有关的各个细节。网民可以发表言论、讨论的领域在不断增加,对现实的影响也在增加,为保证言论的份量和质量,对信誉的要求也在不断增加,在这一点上,匿名显然不如实名。
而且,今天的互联网已经不再是之前各个网站自成封闭体系的格局,但帐号积累的信誉和影响力多还局限于各个孤立的网站,无法转移——即便同样主题同样领域的两个网站,信誉的迁徙都非常困难,更不用说全网范围了。但使用实名,却可以解决这类问题,实名的好处是大家认同的不再是这个id而是个人,尤其是在有中国特色的大量转载中,实名更会带来巨大的好处——读者记住的作者不再是某论坛某id,而是某个人。在有了微博之后,就更是如此——微博几乎没有任何话题限制,你可以对所有领域,随意发言,而这些各类发言累积的影响和信誉都会归化到帐号,如果是实名,则会反馈到真实的个人,带来收益。
如果这两点没错,自然的结论就是,无论是同步到异步,还是从匿名到实名,微博符合这种趋势,是在合适阶段出现的合适形式,这或许可以从一方面解释微博为什么这么火。
实际上,我觉得微博就应该是这个玩法,它应该更像一个松散的平台,不会IM化或者SNS化成小圈子而限制了交际的范围;另一方面,它也应该是一个开放的平台,不对信息设任何门槛和限制,这样才更容易吸引大家实名参加,积攒信誉的同时,提供更有份量更高质量的信息。
或许未来的微博更像一种基础设施,一条消息总线,消息可以很方便地发布,而没有太多私密性(真正私密的信息价值往往不大),也可以很方便地追溯到人,又可以很方便地从这个人的历史发言,做出评价。至于在此之上,如何按照不同的维度(时间、话题、人物),整理、归纳各种消息,这就是各种应用该做的事情了。
正则表达式的书稿终于结束了(暂定名《正则导引》),关上电脑细细思考,写完这三十万字,最深刻的感受是什么?我的回答是:后悔。
从2009年初我打算写这本书,到2011年年中正式写完,一共花费了两年多时间,期间虽然经历了许多变故,有些事情也无可避免,但其实不用花费这么长时间——最初是在周筠老师的鼓励下决定动笔,当时是有想法,没规划。之后在徐定翔编辑和卢鸫翔编辑的配合下,尝试写了几章,又遇到困难停住。多亏李笑来老师说“暂时解决不了的问题,先绕过去,接着写后来的部分”,于是零零散散地继续写下去。到2010年末潘爱民老师对我说:这个状态可不行,这么随意地写,就算写出来,也不会是好书,不如不要写了。明知潘老师是在用激将法,我还是心甘情愿地上了套,为争一口气,日复一日地写,半年左右,终于完成。
回头看这段时间,却感到一丝荒谬:其实真正“笔耕不辍”也只有半年的时间,之前两年在干什么呢,这两年里,我心理总惦念这这本书,因此放弃了太多其它,然而其实并没有真正做什么事情。况且,翻看日记,真正笔耕不辍的时间,其实并不到半年::3月12日,状态不好,早点休息…3月20日,要办的事情太多,又没有规划好,书稿明天再写…4月16日,做了好几张图,做到有排斥情绪,看电影… 这类情景比比皆是。套用《少有人走的路》中的分析方式,这类因果关系其实都经不起推敲。认真分析起来,状态不好时,专注做一些事情,是可以让自己状态慢慢好起来的;要办的事情太多,没有规划好,完全是因为“没有规划”而不是“意外太多”;做图做到有排斥情绪,是因为把几张图集中在一天做,其实分几天完成并没有问题……虽然每次写日记发现自己浪费了时间,都提醒自己要从明天开始认真,但往往坚持不了几天,又因为各种理由松懈下来。我想来想去,原因就在于,我总以为“认真”是一种态度,从不认真到认真,只要端正态度就可以,然而认真其实是一种能力,如果你不具备,即便想施展,也未必施展得出来。
关于“能力”,我曾与一个朋友深入讨论过,结论是:只有当你能施展出来的时候,才真正具有这种能力,否则其实就是没有——你的思维很犀利,却没见真正解决过什么问题,其实就是思维不犀利;你的英语很好,却没有真正用英语学习过其它知识或与外国人交流过,其实英语就是不好;你理解能力很强,但不去真正学一点东西,其实就是没什么理解能力。这个道理,在书稿的写作上也是这样:我曾经信心满满地认为自己做事态度足够认真,所以有能力坚持写完这样一本书,即便有所懈怠,也可以迅速回到正轨;然而真相却是,依靠着各位师友的指点,并且在很多次想要放弃的边缘挣扎着坚持下来,才真正完成。所以,“认真”其实不是种态度,而是种能力;这种能力,自己其实还比较欠缺。
后来认真读了点心理学,才明白惰性更类似某种本能,是“野火烧不尽”的,会从生活的各个角落顽固地冒出来,滋生繁衍,这或许是种本能,只能依靠日复一日地贯彻“认真”来扫除它;惰性侵入的区域越多,“认真”的能力就越弱,就越难做到“认真”。可惜的是,这个道理,大多数人未必明白,我(或许也可以说“我们”)时常安慰自己说,某某事情不是不去做,也不是不认真去做,只是觉得没有必要罢了,实质是把能力问题错认作态度问题。在一两件事情上这样做或许无可厚非,长此以往的结果却是“认真”能力退化,惰性张扬。对我自己来说,日常生活中欠缺较真的细节,造成的恶果在需要“认真”写作时集中爆发——意志薄弱,时常找些借口自我放松;心神散漫,写一段又要看看邮件,上上twitter;缺乏规划,不能合理划分任务,照顾自己的情绪……所以才会在完稿时后悔不迭:我本可以早些完成的。
另一方面,我也体会到,在值得认真的地方认真,培养“认真”这种能力,是可以辐射到其它许多方面,让自己受益的。比如为了确认Unicode编码的某个细节(其实这仅仅是书中的一个脚注),我认真阅读了Unicode编码的长篇文档,终于弄清了这个问题。这样做看似不值得,却在其它方面带来了意想不到的好处——比如,我再也不会厌烦为弄清细节而查证长篇文档了,在这之前却会因为厌烦而抵触。这种“厌烦”,看似是态度问题,说到底还是能力问题,没有能力把认真贯彻下去(至少,依照自己现有的英语水平和理解能力,没有足够“认真”到克服厌烦心理)。
平心而论,自己和许多人一样,希望过上“有意义的生活”,可究竟什么是“有意义”呢?太过随意的生活,“意义”总是要打折扣的,真正有价值的“意义”,总是是长期努力追求的结果。而认真的能力,就是这种长期努力追求的必要因素。
Update:感谢豆瓣的朋友Clyde.L向我推荐了这篇文章,Gumption Traps and Gumptionology,我也向大家推荐。老外的文章往往更讲究方法论,也更细致,他把Gumption Trap分了三类,并给出了对应的解决办法,值得一读。
许多年前,我第一次读到《第三次浪潮》,里面有一句话非常激励人:在第三次浪潮面前,知识已经取代了资本,变为生产力提升的最重要因素。我读到这个观点,总觉得平添了无穷的力量,它比从小就耳熟能详的“知识就是力量”更加有说服力,更令人向往。
而且,我逐渐发现,知识与资本相比,其实是一种更独特,也更坦诚更健康的力量:资本的力量往往是独属于个人,或某个小团体的,固守起来,价值并不会贬低,知识却不是如此,知识的价值和增值,更多体现在交流与分享之中,“保守秘密“的做法,反而得不偿失。
举个自己经历的例子吧:上中学的时候,有一些同学对自己使用的复习资料守口如瓶,似乎这样就可以保住自己的名次和优势,我当时觉得这类做法有点奇怪,但也有朴素的味道,可以理解。
到了大学才发现天外有天,更深刻觉得这种做法真是不太好。一来因为大学里能人太多了,在中学觉得很“了不起”的东西,在大学显得非常稀松平常,往日那些“绝学”立刻显得很苍白了;二来大家都住校,基本没什么秘密可言,你看什么书,花多少精力学习,旁人不可能完全不知道。“固守自己绝技”或许能建立一些的优势,但总的来看,还是不如心态开放、愿意交流和分享的同学,尤其是,不少愿意分享的同学本身也学的很不错。
毕业以后工作了,逐渐发现自己经常在某些方面浪费了很多时间:比如非常简单的技术问题,因为不熟悉,或者没有想明白,总是“不得其门而入”,若有人点拨,往往很快就能解决了。但许多时候,人家“就是不告诉你”,甚至自己就“觉得”人家不会告诉,因而都不好意思去问。
2007年,我翻译了《精通正则表达式》,此后常常遇到各路朋友关于正则表达式的问题。平心而论,我也只是用过一点正则表达式,多一点经验而已,而且正则表达式,实在不是什么高深的技术。但是,我却发现不少朋友乃至技术高手所问的,往往多是这类看来比较简单的问题,只是没有遇到过,或者不熟悉而已,所以他们也“不得其门而入”。换位思考,我逐渐体会到,简单的问题,解决起来未必简单,其实是因为“术业有专攻”而已。没有人能做到面面俱到,即便是某个领域的行家,在不熟悉的领域,也难免被简单问题困住——我问他人的问题是如此,他人问我的问题,也是如此。
或许,也正是因为有这样的情境,“固守自己绝技”的做法,才体现出价值?我不知道。
可是再后来,见的再多一点,读的书再多一点,我却越来越否定“固守自己绝技”的做法了,因为无论从个人,还是从社会来说,其实都是得不偿失的。
从个人来说,长期来看,我们的脑细胞一直在不断减少,但智力却没有明显的下降,甚至会上升。这是因为,通过不断的学习和思考,脑细胞的突触会增加,脑的结构也会不断变化,知识体系的索引结构也在不断优化。所以,质量的提升取代了数量的下降(可以参考Richar Restark博士的Think Smart)。而固守自己绝招,不愿与人交流的人,大都满足于守住自己的一亩三分地,却忽略了不断的学习和思考。这样的生活,或许过得确实“不错”,无可厚非;但我相信,在另一个平行宇宙中,很可能有一个同样的人,却更善于学习新知识、思考新问题,他的生活,或许“更不错”。我想做的,是那个“更不错”的人。
从社会来说,一个社会要想运转正常,让成员生活幸福,必须是一个足够有效率的社会。分属熟悉不同领域的人,通过交流知识,节省了彼此的时间,这就是为社会的效率做出了贡献。也就是说,作为社会的一分子,我们所能利用的他人的知识越多,这些知识的质量越高,利用的难度越低,我们自己工作生活的效率就越高,他人为我们提供服务的效率也就越高。伟大的经济哲学家哈耶克早就发现,社会中除了存在劳动的分工,还存在知识的分工,社会发展、达致均衡的过程,就是把分散在个人之间的知识顺利协调起来的过程。
就我对中文技术资料的了解,哈耶克的观点真是伟大的洞见——网上的中文技术资料,细心整理的很少,“无责任转载”居多,即便有交流,许多也局限于小圈子的彼此欣赏。其直接后果,就是大家时常为了一个简单的问题费尽周折,也导致论坛里总是出现重复的问题……中文开发世界的整体水准不尽如人意,缺乏高质量的知识协作,肯定是原因之一。
故而,我时常为自己没有能迅速发现和利用其它知识,浪费了时间而惋惜,同时也为被正则表达式困扰的朋友而惋惜;基于此,就更加感激坦诚贡献自己的知识,指点、帮助我解决不熟悉领域问题的朋友。所以,我要把自己关于正则表达式的经验悉数总结出来,整理好,写成一本书。它或许比不上《精通正则表达式》,但终归是自己的知识总结,除去讲解了功能,还点出了自己学习时犯过的错误,更提供了常见开发问题的解决方案:正则表达式问题的分类和解决步骤、URL转发的规则、中英文混排文本的处理、正则表达式中使用Unicode的细节……
其实,这也是我长久以来的梦想:我不希望看到更多的朋友同仁,为了这类已经有现成答案的问题,再浪费时间和精力,尤其是在大家生活压力都很大的今天。我可以尽力为大家写各种表达式;但我更希望这本书能成为“木牛流马”,跨越时空的距离,为更多的人送去便利。当然,其中也有一点私心——如果这本书真的能帮到大家,它也可以分担我亲自帮各位同仁解决正则表达式问题的压力;这样,我也有更多的时间,再学点新知识,再思考点新问题罢。
在很长的时间里,我都认为真正要做一点事情,只能来自日复一日的钻研,如“水滴石穿”那样,心无旁骛地持续做下去,才可能成功。可是,这样的生活必然又很枯燥乏味,许多人看来甚至不可理喻——那么,那些既能把事情做成做好,生活又充满趣味的人,他们到底是怎样生活的?除去运气,他们还有怎样神秘的力量?这些问题我想了很久,也实践、反思了很长时间,后来逐渐得到的一个结论:仅仅日复一日的钻研,苦行僧的做法,其实是不够的,更重要的因素,恐怕是自我管理。
“自我管理”听起来是个大词,细说起来,却并不难。古话说,没有规矩,不成方圆。那意思是,无论形态如何,总是要有一定的规则和模式。任何一个组织:学校、公司、单位、社会,总需要这样或那样,硬性或柔性的规则来约束,才能维系,才不会散架;但是个人的生活,往往在这方面有所缺乏,所谓“自我管理”,可以理解为,认识、培养、建立、维护自己生活的规则和模式,然后才能让自己的生活变成某种样子(恐怕没有人希望自己的生活是一盘散沙,毫无章法可言)。
以我的经验来说,“自我管理”主要包括以下三个方面:
一,自我认识。认识自己,需要培养“旁观”能力,建立看待自己的全新视角。我们都有感觉,自己有时会“莫名其妙”做一些事情。许多人把这类行为归结为“感性”,但这并不正确。许多“莫名其妙”的行为,其实是自己的理性未能充分发挥的结果。我自己就有很多经历:明明可以准备周全再动手的事情,却“稀里糊涂”就开工了,结果多费许多时间精力;再比如,犯困了就认为自己休息太少,而没有认真想过提高休息质量,增加体育锻炼,其实也可以保证精力。这类事情发生在人家身上,我们可能很容易看出是“不够理性”,但发生在自己身上,就往往找出各种理由。可是,自己的情况到底是怎样,自己其实是最有可能认识清楚的,所以,学会旁观自己,加深对自己的认识,生活就可以少走许多弯路。
而且,即便是“感性”的行为,也可能是有章可循,可以认识的。仍然拿我自己做例子:生活中,情绪会起伏,有时开心,有时失落。以前我总觉得,这些是无可避免的,“坦然面对”就好。但后来我尝试去思考,遇到什么样的事情,我会开心;遇到什么样的事情,我会失落。这些事情,到底值不值得我开心或失落?为什么有时候听了其他人几句话,自己的情绪就会大不一样,我能不能自己想到这些话,这样就不用再借人家的口说出来?必须承认,思考这样的问题确实有些困难,可是一旦你认识了自己情绪的规律,许多问题就迎刃而解了,想放松的时候可以更尽兴(不用背着包袱去开心),生活的负担也减少了很多(大可以“清醒”地装糊涂,忽略许多事情)。
二,自我克制。认识自己到一定程度之后,我们就摸清了自己生活的特点和边界。与自己期望的生活对比,就容易看出有多少重复,哪些地方要扩展,哪些地方要收敛。一般来说,扩展的难度并不大——是你真正想做的事情,总会有动力去做的;收敛的难度却大得多,许多东西,我们已经“习惯成自然”了,改变习惯,不是容易的事情;更重要的是,社会上,诱惑总在不断地冒出来;生活中,惰性总在不断地渗透出来。这时候,自我克制的重要性就体现出来了:诱惑也好,惰性也好,往往并不是我们真正期望的,必须把它们拒之门外。
而且,自我认识更深刻,自我克制的力量也就更强。比如说,长假的前几天,往往是工作和学习最松懈的时候,大家都“无心”,更多地在消磨时间。但是我仔细想想,自己正处在怎样的阶段,还有哪些事情要做(即便近期手头的事情做完了,也可以提早开工长期的、以后的计划),如果发现“无心”地消磨这些时间,自己其实并没有太多收获,反而可能需要将来多花更多时间来弥补,就更能克制自己——不仅仅是意志的力量,还有理智的力量。
三,自我提醒/监督。必须承认,我们都是固执的,习惯的养成,生活的改变,都不是一蹴而就的。有些问题,即便我们能认识清楚,也足够克制,仍然不能迅速解决,这时候就需要对自己的提醒和监督了。它们可以提供持续不断的反馈,在反复的刺激下,习惯才能养成,生活才可能改变。
自我提醒/监督的有效办法是要不断地反思、总结。我刚开始开车的时候,“自然不自然”地喜欢急加速、路口抢红灯,虽然能想明白这样并不好,也有足够的克制力,但还是有时候“无意识”地做这类事情。为了戒除这不好的习惯,我每次熄火下车,都要想想自己这一路有没有急加速,有没有抢红灯,如果有的话,一定要再三提醒自己,以后不能这么干。这样过了一段时间,我确实能够“自然”地、心平气和地开车了。再比如,我时常会给自己制定一些专业书的阅读计划,预计是每天都要看,但往往因为各种原因中间有空隙、间隔。为了避免这种情况,如果昨天坚持阅读了,我会在当天的日记里给自己一些积极的反馈,否则就要说明理由,提醒自己今天绝不能空缺。这样持续地提醒/监督下来,即便计划中有错漏,有变故,也不会影响整个局面(要补充的是,写日记确实是非常好的提醒/监督手段,这是我的亲身体会)。
看到这里,有人可能会说,即使做到上面这三方面,能够自我管理,生活不是同样枯燥乏味吗?答案却是否定的。前面说过,没有规矩,不成方圆。大多数人都希望自己的生活能变成理想的样子(即便做不到,也要接近),这样内心才更舒服,更满足。身为成年人,你基本不能指望依赖他人来约束和管控自己——即便有人愿意这么做,你也未必会舒服。这时候,自我管理的重要性才体现出来。
而且,自我管理也不等于苦行僧式的生活。有个笑话说:程序员为什么要在床边放两个杯子,一个有水,一个没有水?因为他不知道自己夜里是要喝水,还是不要喝水。从另一个侧面来看,它也说明一个道理:不管要不要喝水,至少要有个杯子。同样,生活可以很随意很闲适,也可以很充实很匆忙,无论它是什么样子,你至少要能如愿管理自己的生活——该放松的时候要能放得开,该收拢的时候要能收得拢。而这,正是自我管理的意义所在。