没有比较,难有收获
读大学的时候去考了托福,成绩出来,自己都不敢相信,作文竟然有5.5分。当时托福作文的满分是6分,5.5分的Rank似乎是95%,也就是说在所有考生中排名前5%。之前我没有上过新东方,也没有参加过任何培训班,所做的复习就是与同学结对写作,互相修改了大概20篇作文。这个办法是很多考生都在用的,却只有我拿到了这个分数,朋友们也觉得很惊讶,问我有什么诀窍。我仔细想想,如果真的有什么要诀,那就是复习时看过俞敏洪的一次演讲。
演讲的全文我已经不记得了,只记得其中的一个问答。有人问他:在没有老师指导的情况下如何练习作文?俞敏洪的回答是:拿到题目,先不要看范文,先想想自己要怎么写,然后写出来,再对比范文,看看人家为什么写得好,有哪些地方可以向范文学习。
恰好,我就是在没有老师指导的情况下练习作文的,而且手上确实有30篇范文做参考。所以对于每一篇范文,我都是先看题目,仔细想想要如何动笔,再写出来,然后再看范文,认真揣摩差异。这样看了十来篇作文,就大概掌握了托福作文的写法,30篇作文看完,已经颇有些把握了。这时候再看论坛上一些朋友写的作文,总觉得不得法,没有掌握门道。和同学互相修改作文时,得到的反馈是:“你的作文风格和其他人的完全不一样,但似乎很对路呢”。从最终的考试结果来看,确实还算对路。
这次托福考试的成绩虽然最终没用上,我却因此掌握了一种有效的学习方法,明白了比较对于学习的重要性。很多东西需要经过自己的思考和摸索来找到答案,哪怕答案已经存在;即便一开始能看到最终答案,也应该认真想一想:如果我不知道答案,会采用什么办法。再和最终答案对比,看看究竟有哪些需要学习和改进的地方。
顺着这种思路,很多东西在我看来就不是“现成”的,解决问题时也不是“想当然”:以前很多网站都没有验证码,后来忽然出现了验证码,我于是有兴趣去想想,为什么会出现验证码,它要解决什么问题,是如何实现的,验证码有哪些缺点,我还能想出什么其它的办法?再比如短网址服务,是随着微博类应用出现的,为什么有这样的需求,它是如何实现,是如何起作用的?(结果我发现,在纸版书里用短网址方便很多,可惜很多作者、编辑并没有这样的意识)关于这类问题, 酷壳上有一篇文章 《挑战无所不在》,说得更到位。
我必须承认,在现成的答案面前,再花时间设想解法确实有点“耽误功夫”,而且自己的解法往往不能跟现成答案对比,有时候甚至要差很多。这当然让人有点难为情,但是持续的比较和思考给我的收获,远比“拿现成的来用”的收获要大。我印象深刻的例子是,前几年我们曾经基于Lucene开发了一套实时的全文索引系统,不久Twitter也公布了自己的实时索引方案,竟然和我们的方案基本相同。如果之前没有持续的比较和思考,我们大概只能等网络上有人公布了方案,或者提供了现成的类库,才可以提供实时索引的服务。不但动作上要慢一拍,更主要的是,如果第一拍没有打响,我这一拍永远也不会打响。
前几天我问刚开始工作的小伙子,为什么计算机里通常用的小数叫“浮点数”?却没有人能答上来。我不由得想起了自己的经历。在了解到浮点数既能表示整数部分又能表示小数部分时,我觉得非常好奇,怎样的数据结构能既保持整数的精读,又保持小数的精度,而且两者的比例竟然不需要事先设定的?顺着这个问题下去,我才真正了解了浮点数的存储,也理解了“浮点”的意思,由此也明白了若干关于“柔性设计”的讲究。这些收获,应该不是仅仅知道“要用浮点数表示小数”就能取得的。
以前,有则寓言我印象很深。一个人问智者:“怎样才能获得幸福?” 智者答:“做正确的事情。” 那个人接着问:“怎样才能做正确的事情呢?”,智者答:“通过做错误的事情。” 如今,互联网的发展似乎让我们不费吹灰之力就能“做正确的事情”,所以很多人不屑于“做错误的事情”,在有现成答案时这样确实很快,没有现成答案就无能为力了。然而很多时候,解决新鲜问题的本领,恰恰来自对“正确的事情”和“错误的事情”的比较和思考。