回忆我的英语老师们

回忆我的英语老师们英语四级,我是在大四那年过的,当时工作已经找完了。大家对我能通过都很惊
讶。大哥说:"现在就咱俩,你就实说了吧,到底怎么过的?"我确实想过作弊,
但是不敢。抄同学的话,连累别人的后果很严重;拿萝卜扣章的话,可能有期徒
刑两年。我就是那么答过去的。这之前,我一直50多分,据说这和60多分的区别
不大。只好用运气来解释。第一次出成绩的时候,睢同学说看到我过了。我说:"那天理不容啊。"果然没
过,如是者三四五六。所以,回忆我的英语老师们。1.小学前文提过,我小学是培养贵族的。所以,作为70后,我们小学毕业以后加开了英
语培训班。当时跟现在不一样,似乎没有小学学英语的。我们的培训班就只学音标,记得挺累腮帮子。老师的名字是郭荣灏 (音),似乎
是退休或资深的老师。还记得大口花a,说发音的时候要塞进四个手指头。我到
现在也没有做到。课间休息的时候,由我去叫大家回来上课。我当时穿一件黑风衣,我爸30块钱买
的。我忽忽跑到操场上去喊他们"上课啦",他们喊我黑乌鸦。我们的小学同学有一部分,就是跟我一个学区的那些,后来上的初中不怎么好。
前文提过,山上片。山上片都是贫民或平民后代,前文提过山上片好几个学区物
理和数学竞赛能够一个也取不上。可见我们有多么差。结果小学的这些同学因为
音标学得太好,对初中老师的发音产生了很大的抵触情绪。记得有个同学提到
过,他们班的老师纠正他,"那是'恩',不是n",让他很郁闷。2.小猫然后就是初中老师了。我们初中的教材不是谁谁和谁谁谈恋爱那个,没那么浪漫。第一课是 face bag
bee bed, 然后是 rose desk。因为很多同学没学过音标,有人在it上标上音 爱
它。课文是 Ling ling, super is ready. Hurry. I am coming. 最后是 help
yourself to some fish。这家人吃饭真客气。有个英语老师绰号叫小猫。她的脸长得有点像小猫,大家这么叫也没多大恶意。
因为大家觉得英语太难了,我们曾经开过一次班会,把她请来了。同学们好一顿
抱怨,我因为能跟上课程,所以颇多不屑。同学觉得讲得太快了。小猫说:"这是教学大纲要求的。"我挺不以为然,就站起来说,"是我们学,还是教学大纲学。"后来我想小猫对我应该挺失望的吧,可能想不到我会插这么一嘴。3.我试过了小猫后来不教我们了,换了一个胖胖的老师。这老师教我们的时间更长,我跟她
也更熟,还请她帮我听草帽歌 (日本片《人证》)的歌词,但是偏偏就是想不起来
她姓什么了。我们毕业的时候,她正怀孕,说是拍照片对孩子不好,所以毕业照上也没有她。她教我们的时候,也很多人说跟不上,太累了。课堂上也吵闹过。同学喊,"太累啦,受不了啦。"她说,"这都没啥。"我说,"你试试就知道了。"她说,"我试过了啊。"老师当时的表情我不记得了,不过当时她也正年轻,估计心里充满小得意呢吧。
她显然已经读完了初中,而且成为了初中教师,显然在我们这个年龄学得不差啊。我于是就词穷了。这位老师经常和几位女同事去市里看电影,当时我们这个羡慕啊,真有时间。班
主任黄晓萍老师教育我们,"你们现在好好学,以后有的是时间看电影有的是时
间玩。"当时有同学说:但是她再也不能在十几岁的时候玩了。后来高中的时候,初中同
学聚在一起,没有人再提到这个话头。不知道,如果现在一聚,大家是因为当年
恣意欢乐而庆幸呢,还是因为现在看不起电影而懊悔。如果问我,说实话,我也不知道。4.林老师林老师是我高中第一位英语老师,她的名字我忘了。不是因为印象不深,而是因
为后面有另一位林老师印象太深刻,一想起名字就后一位。林老师温文尔雅,好像长得有点像朱老师,气质也差不多。不过我脸盲,所以我
说的也算不得数。我当时去她办公室,见到了一个新鲜设备,英文打字机。当时跟刘YU (真没找到
这个字啊,或字加两撇)同学一起缠着林老师跟她学打字。我们打出的第一句,不
约而同地是"what is your name."跟林老师学了打字,所以后来才有机会参加信息学竞赛,才有机会见到和热爱计
算机,才选错了专业学了电子。当时自己找到计算机老师,想参加比赛,老师第
一句问我,"你键盘还熟吧。"我说,"熟,我用过英文打字机。"所以,十多年以后,我打字的时候仍然把键盘敲得山响,因为英文打字机是机械
的,要非常用力才能按下去。大学毕业以后,我还在东北师大见到了林老师。因为当时旁边有陈军同学,所以
由她认出了林老师,换了地点,我连猜都猜不到那是我的老师。林老师当时来进
修,似乎还请了我们吃饭?她说,那以后,再也没有老师教过学生打字,现在觉
得当时太年轻,胆子太大了。当时在林老师办公室,经常见到另一位老师打字。和我们这些小样的比,他打字
太飞快了。而且节奏贼好,不管打什么都是 哒哒哒,哒哒哒,哒哒哒哒哒哒哒
这个样子。很流畅地就打下去,根本不会出现哪个键子想不起来位置,还要看一
看想一想。他就是我高中第三位英语老师,在后面讲。5.李铁钢高中第二位英语老师一来上课就给我们一个下马威。不是严厉。他说英语,全堂
英语,没有汉语。姜军同学几年前跟我说,他刚上高中的时候非常不习惯英语课,因为太简单了。
他在十三中的时候,老师都是满堂英语,而高一,老师居然主要用汉语讲。估计如果当时李铁钢老师教他们,姜军同学应该满意。李老师先自我介绍,说他的名字是 Lee Iron Steel,不是 Steal。也许说到第
五遍我才明白,别的同学,尤其铁路系统上来的,早笑开花了。我当时因为英语不好挺痛苦的,找李老师谈过。他建议我不要在语法上下太多的
功夫,够好了,努力也不会有太大起色,尽管我比刘YU同学的语法的分数差很多。
李老师建议我多读。我问:读啥?他借给我他大学的课外读物,让我看。并且告诉我,如果看不懂的词,不要查词
典。如果这个词对理解很重要,他会再出现再出现,几次以后,你就猜出来了;
如果这个词不再出现,它对理解文章帮助估计也不大。实在重要的,且只出现一
次,几页以后你再查它。用这种办法,我猜出了雪茄的意思。有个坏蛋老是拿出来点上,还冒烟。记得读了弗兰肯斯坦缩写的小册子,一共三五本吧。后来还在图书室借《新编循
序渐进美国英语》系列,里面全是故事。我在这个系列里学到了恐龙这个词。很
多很多年以后,在应化所的聚会上显摆过这个词。宋继霞同学问恐龙怎么说,我
说是啥啥。我英语太差了,她根本不信,问美国朋友 (就是六个月汉语非常流利
那个语言天才) ,然后说,"哈,师兄,你真知道啊。"我说,"off couse"。其实说实话,心里挺难受的,觉得非常愧对李铁钢老师。老师教的那么好,而这
么多年过去了,如果老师站在我的面前问"杨贵福,你英语学得怎么样啦?"我想
我会哭出来吧。对不起,老师。李老师后来调转去了通化师范学院,从高中到大学工作了。6.原来学俄语的高三的英语老师原来是学俄语的,就是打字飞快的那位牛人。这位老师名兰攻
修,可能是文革其实改的名字?据说通化一中以前有田代数宋几何 (姓氏我可能
记错了),文革的时候都不幸了,兰老师改名可能也有不得已的故事吧。兰老师有通化口音。没听过的同学,通化口音与吉林省大部分地区都不一样,属
于辽东方言,跟丹东差不多,尾音会拐弯的。兰老师就通化口音给我们讲过一个笑话。他说在学俄语的时候读课文,读到"南京
",他就带着通化口音读出来了,他的同学都嘲笑他。他当时在课堂模仿通化口音
的英语,全班大笑。他学过电影里一个角色被树砸住大腿,高呼救命的时候喊"HELP"。他声音哄亮,
把我们全都吓一哆嗦。忘了是哪位老师,因为B和D选项听起来太像了,要我们把D读成K。我们换老师的
时候,被后一位老师改了,似乎改成b-boy,d-dog。哪个读法是哪位老师,我已
经不记得了。7.周老师大学的第一位老师是周树琴老师,她教得认真而且层次分明。我也只能听出这
些,不然四级也不会最后一年才过。我们后来换了另一位老师,只记得是男性,名字忘了。上课的时候比较喜欢讲故
事,但又偏偏是我们不喜欢听的。那位老师教我们美音,而不是英音。印象深刻
的第一个词是 pass。现在仍然觉得美音真是难听死了。后来那位老师被大家投诉了。周老师是系主任吧,来了解情况。我们同学提到一
些问题,她说"这些是系里统一要求的"什么的。我说,"周老师,我们为什么不
投诉你呢。"学生烦一个老师的时候,真的是有点没道理可言了。周老师到是挺招我们喜欢,不过如我,英语仍然没有学好。后来我在人事处助学
的时候,正修打印机,周老师进来。我腾地一下站起来,郝运笑着说,"这学生
见到老师什么时候都是老师。"周老师根本不记得我了。她说,"你四级那么晚才过,是基础不好吧。"老师,你不用替我找借口给脸面了。基础挺好的,是学生不用功,惭愧。其实,
不敢见老师。8.牛老师牛老师是我的博士导师,他没有教我过英语,但是对我的英语学习有至关重要的
影响。我一向对英语学那玩意不耻。除了环保啊温情小故事啊,讨论一下没屁GELE嗓子
的论点啊,真是没有更弱智的了。尤其很多同学学习外语是为了跟外国人交朋友。或者反过来?我跟牛老师谈起过自己对英语的这种态度,他纠正我的看法。我说:我不想跟外国人交朋友。他说:你能只跟他们谈计算机,别的啥也不说么。我说:是啊,深入的交流不可能。平常的交流,除了谈专业,还有啥好说的。他给我讲了段他的经历。有个老外问他,北京有桥么。他说,有啊。老外说,我
不是问过河的那种桥,是架起来,下面也通车的。就是立交桥。牛老师说,有
啊,有几百座吧。牛老师说:如果你英语不好,就什么也不能跟他说。鬼子不会觉得你英语不好,
他只会觉得你啥也懂,然后觉得中国人啥也不懂。于是我努力学习。在芬兰和后来接待外国老师们期间,有不少人提到过:杨啥都
懂,对欧洲,你懂得比我还多。我不想做一个令老师丢脸的学生。我尽力做到。当然,如上所述,其实我做得是
多么糟烂。如果,我把那些扯淡和享受青春感受人生的时间用来努力,也许现在
可以问心无愧地说一句"我比老师期待得做得更好",那种感觉会非常不同吧。

在大学旁听时,我们应该听些什么

在大学旁听时,我们应该听些什么经常看到新闻,有人旁听大学的课程,甚有所得。经常在网上看到同学们褒贬自
己的或旁听课程的老师,还经常看到有人提到读了某本名著,兴奋莫明。些时,我们不得不注意到一个问题,他们大多数旁听和阅读的,都是人文类课程
或者名篇。没几个人为理工课程或者知识兴奋一下,甚至假装表现一下兴奋的都
少见。昨天听到封同学提到"他们文科",我们哈哈大笑,他话气里的渺视之情表露无疑。
很多人习惯了,而为什么很多人觉得这种渺视是理所当然的呢?因为有些文科,是在做着每个人都能做的工作,那就是欣赏。而欣赏表演,技术
含量太低,当你拿出来炫的时候,就免不了受人蹊落。盖因我国人民习惯于"子曰诗云"的引用,似乎牛人说过就表明那是支持自己了。
所以,"我听牛人如是说"就成了一种炫耀的手段而非仅仅表达自己求知渴望的交
流。有时,这种说法表达的是"嗨,我可是个爱学习的好少年"。孩子和猴子最擅长的是模仿,孩子还会献宝。他们都很可爱,如果他们尚未长大
为成年人或进化为人类的话。不幸的是,所有的大学生和旁听大学课程的,都是
成年人类。只是,有时经常被别人称为"孩子",就真的以为自己是孩子了。却不
知,被人称为孩子是一种奇耻大辱,除非对方是你尊重的长辈。有几种情况会称一个人为孩子。1.例如"这些孩子干活可真勤快","这孩子不错"。
说话的人想表达,你真可爱。同时表达,我可是成年人哟。因此,按东方文化,
你是下位者,我是上位者,特别的,你是服从管理的下位者。此时,一般孩子会
顾做可爱状。2.例如"这是下边孩子做的","我让下面的孩子去做"。注意,此时
孩子的前面通常会加上"下面""下边"。说话的人通常是想表达自己是处于上面的,
(1) 有权力不必做这些事, (2)不应为这些事承担责任。所以,不要自甘下贱被人称为孩子。所以,不要轻易胆敢称别人为孩子,善意地
称别人为孩子,需要特别慎重。所以,不要把自己真地当成孩子,做些幼稚的事。什么样的行为是像孩子或猴子一样单纯地模仿而显得可笑呢?比如,我今天听老师讲瓦尔登湖啦。太美啦。真深刻啊。诸如此类的。重复别人
的观点,有个好记性就行。记性不好,会用google就行。不会用goolge,随便找
本小资喜欢的书照着念两遍就行。问题是,我也觉得瓦尔登湖好。那么,我们是在做什么?交流我们大家都知道的
信息,重复传唱几遍,以前表明我们是同一个战壕里的?还是显得你不低级,与
大家一样高级,或者更高级?我们的对话一共有下述三种可能。可能1。你说:你看过瓦尔登湖么?我说:看过啊。你说:噢。对话就此停止,因为没有更深入的信息可以交流。可能2。你说:你看过瓦尔登湖么?我说:我看过净月潭。你说:没文化。对话就此停止,因为没有更深入的信息可以交流。可能3。你说:你看过瓦尔登湖么?我说:看过啊。它如何如何,我可以背下来其中几段,如何如何,它对当前有如
何如何深入的意义,对未来如何如何。从它的写作手法和思想立意中,我们如何
如何。你说:啊?对话就此停止,因为没有更深入的信息可以交流。最后一种是不可能的,因为我没有读过。那可能是你与别人的对话。所以,当你读过瓦尔登湖,你在日常生活中表现出的思想境界提高了么,或者当
你看到别的水泡子的时候能够更好地描述了么。感叹别人的感叹,就像听郭德纲相声,然后说,"哈哈哈哈哈哈哈哈,太好笑了。
"我也同意郭德纲相声太好笑了,这是你和我有相同的态度,而不是我们的观点。
观点,要有论据支持,否则就单纯是论断而已,甚至只是个人的态度。而个人的
态度,除非在父母面前献宝的时候,大抵没有多大的意义。甚至更恶劣。对郭的相声大笑,但是不把站出来炫的,因为知道大家都赞同。而
看完听完瓦尔登湖出来炫,则大有人在,因为并非大有人在地读过。这种胡吹,
与赞叹相声好笑的真实情感的区别在于,它更像是买书柜然后贴上书脊花纹的墙
纸。不买书,买了不看,看了直接拿出来炫,本质上区别也不大。能听懂笑话的人比比皆是,能像小丁老师一样学了之后也能把人逗笑的不多。能
听歌的人比比皆是,听了以后一顿剖析讲出为什么好听的人不多。如果同学们真的想旁听些课程来炫的话,有些建议。去听这些课程:高等数学,
大学物理 (普通物理) ,还有逻辑类的,比如C语言。理由1。沈佳宜说:因为难,所以学会的人才历害啊。这些课程让你完全不同于
别的文科小资,一跃成为理科小资。理科小资可不是只知道些"知识",而是还会
运用,因此有很多"办法"。理由2。这些东西,除非会用,否则没法拿来吹牛。所以,为了吹牛,你只能学到
超出照搬的程度,否则跟没学过一样。你总不能说,C语言里有个main函数,这非
常感人。但是你却可以说,C语言也可以不用main函数作为入口,只要这样编
译...甚至可以没有入口。理由3。这些课堂不拥挤。理由4。学会这些东西,思想感情会受到净化,情绪更加稳定和容易受控。因此有
利于你表现得像个成年人,跟你的实际年龄更为接近。理由5。人文类学科的动机之一是理解人类社会。我得告诉你一个事实,常被大家
忽略的,上述课程是人类社会的重要组成部分,因为有相当一部分人,他们熟悉
这此知识,并用它们建设你生活的这个社会。如果你不了解这些知识的皮毛,也
就不能了解他们。当然,这对你的影响并不是很大,因为他们也不屑于和你交谈。理由6。听人说,某人一抬头,发现他女朋友正卷着袖子修宝马 (夏利?永
久?),那场景是很迷人的。理由7。被人骂是文科傻妞或傻男 (似乎不这么骂,而是直接辱蔑质疑其性别) 的
时候,可以刷地拿出一卷子高数题或ACM题,七里kacha解完,然后推过去请对方
解一遍。理由8。可以像我上面这样吹牛。如果你真的想旁听一门理工类课程,强烈建议你听计算机系的。与其他理工类课
程不同,那些课程中所提到的牛人们,大多还活着,有的还挺年轻的。

14条原则 (3) 一定要备份服务器

14条原则 (3) 一定要备份服务器这条原则的全文不是如标题所示。它的全文是:一定要备份服务器,一定要备份
服务器,一定要备份服务器,然后还要验证备份正确与否。其他的原则我都记不清全文,唯独这一条例外。太多故事反复验证这一条的重要
性。我的博士导师牛老师。一次我提到数据很重要,而硬盘很贵。他老人家教导我,
数据比硬盘宝贵。他有很多块硬盘,有些数据备份了不止一份。他的学生发表论
文的时候,要求把凡与此论文相关的实验数据全刻一张光盘上,然后他还要把这
些数据备份到硬盘里。有一些文献,在不同的项目或领域中都需要用到,他不是
做快捷方式键接过去,而是再复制一份。他说:数据比硬盘宝贵。所以,我从那以后更坚定地实施版本控制。当时还没有
git和cvs,我把每一版本起个这样的名字,xxx.20050315.221034.zip,全保存起
来。尽管如此,我还是丢过东西。丢东西有时仅仅是没有找到,而我那次比这个严
重,最后也没有找到。因为我备份了错误的东西。一段时间,因为要频繁地实
验,与电化学设备连接在线调试程序,而连设备的那台机器上不能安装编译环
境,所以我也备份可执行程序。结果,某个可执行程序终于验证是正确的了,但
是我却不知道它对应哪个源代码版本。我试图编译所有的源代码版本,把编译结果与验证了的版本进行二进制比对,这
时才深刻地直观感受,VC每一次编译的结果都是打了时间标记的,所以全都不一
样,每次编译都不一样。只好重新编译,重复所有的验证实验,直到找到某个源代码的编译结果与要求完
全相同。也即,把那些实验重做了N次。时间,青春,我感叹。所以,在程序设计中,应该备份且只备份源代码,因为二进制是可以随时编译出
来的。丢失二进制,需要花费的时间不过是编译的时间;如果多一个二进制版
本,就要回归测试了。在备份代码比较大的时候,备份不利丢些东西还有情可缘。比如鲁迅先生 (还是
他的弟子?) 就遗憾地提到他因为搬家遗失了重要的书信、书籍。我当时奇怪
过,那么重要的东西为什么不随身携带,贴心口窝放好?后来才知道,重要的东
西太多了,心口窝那块地方不太够。而那个时代,备份挺困难的,抄书费时间,
想留存手迹却没有数码相机。但是时代不同了,现在备份容易多了。带来的一个副作用是,大家以为容易的东
西就不值钱了。张老师有一次中毒,硬盘里的文件夹全变成隐藏的那种病毒。她说,"我这硬盘里
的东西真的很重要。"我说,"不重要。不然你怎么会把硬盘插在别人的机器上呢?""可是,我要给别人拷东西啊。"那就只能让他把硬盘插在你的机器上,而且,还要事先关闭U盘自动播放,还要不
使用资源管理器,而使用TotalCommander之类的文件管理器。不要相信任何人告
诉你说他的机器没有毒。因为你相信他的同时意味着两件事情,你相信他的人品
不会有意骗你,还相信了他的技术。详见此系列后文"永远不要相信你的用户"。就用一次硬盘没问题吧?其实病毒感染跟狂犬病差不多,感染率有多高不好说,
可能还挺低,但是致死率几乎百分之百。有位仁兄说过,"侥幸是悲催之母",回
答的就是这个问题。有个著名的墨菲法则,说的也是这个。它说,如果蛋糕掉到地上,一定是有奶油
那面朝下。为了避免这种情况,计算机的电源插座设计成D型,反了的话,就插不
进去;计算机的显示器、硬盘、PS/2口、USB口统统设计成了这种形式,反了,就
插不过去。因为如果设计成反了也能插进去,那就一定会有人这么干。Intel
586还是486就能转90度插进去,效果是烧掉。我烧过一个,非常烫手,还没等反
应出来就直接扔出去了。凡可能出错的,必然出错。我们所应该做的,不是做好准备承受出错的后果,而
避免出错。备份就是避免出错的一种有效手段。我有师妹曾经希望我帮助她恢复NTFS中的数据,那是她孩子的照片。我当时没有
找到解决之道。这些数据的宝贵之处在于,她的孩子不会再来一次这段年龄,那
种微笑和大哭永远不会有机会记录。程序员的代码丢了而没有备份,他对老板说,我的代码被猫吃了。一位出租车司
机师傅告诉我,他的手机丢了,通信录也就没了,所有电话一个也没记住。这些
只是小事。图书馆借书数据如果坏了而没有备份,就意味着同学们还书就要靠自
觉了,尤其是大四学生马上就要毕业的时候。教务处选课系统的数据如果没有备
份,同学们就只好跑上来重选,花上一两个小时。这些事情都发生过。有的数据
后来找回来了,有的,就没有那么幸运。一定要备份服务器,一定要备份服务器,一定要备份服务器,然后还要验证备份
正确与否。备份的介质多种多样,取决于你希望留存多久,数据量有多大。我们
用磁带增量备份,用光盘,用移动硬盘,用U盘,用网盘。有这样几条原则。1.多次备份,不同的介质。光盘是会老化的,有一天可能就读
不出来了,或者没有光驱可用;2.除非写保护,否则不允许读。移动硬盘或U盘,
如果没有写保护,除非只在你的机器上用,而且你是个小心谨慎的人,否则感染
病毒以后跟你把所有数据都写到/dev/null上没有什么一个样,纯粹是浪费感
情;3.本地,你自己随时可以访问。网盘,除非有对商家的惩罚条款,否则你怎
么能指望他像你一样重视你的数据。硬盘的价格在数据面前,不值一提;硬盘的投入在人的素质面前也是一样。中日
甲午海战的时候,双方用的舰船据说没有时代的差别,而我们又听说中国海军的
士兵会在炮管上晾被子。你就是买了世界上最贵的服务器又怎么样,如果没有会使用它的技术人员。那不
过就是金属和塑料的组合。没有了人的眼睛,天空的颜色不过就是一种波长,又
有何美感可言。可叹很多领导仍然停留在以设备指标的年代,虽然,他们比把机
器都装库房里怕用坏了的那些要好上很多。不过,他们似乎并不太明白,没有
AK47的战士是低杀伤力的战士,没有战士的AK47却一点杀伤力也没有。同一把枪,甚至不同级别的枪,不同的人使用,区别甚大。相信打CS的同学对此
都深有体会。备份的要考虑的因素:丢失数据损失的时间 (恢复,下载,重写) 和机会成本,
保存的代价。所以,在写东西的时候,我每个段落保存一次,有时备份当天的所
有文档。因为我比较脆弱,不能承受一代段落几十个字的损失,虽然我打字并不
慢。备份应该有多可靠?参见攀岩。保护措施,要一直持续地做,而且要一直可靠。
备份的系统要跟正在运行的系统一样可靠,甚至更可靠,而且一天也不能停止备
份。备份无效而却在它的身上托付终身,比没有备份可危险。顺便说一句,"备份"的另一个含义是"后援"。古龙讲过一个故事,贯彻了极佳的备份原则。在某人的床下有个竖直的洞,洞下
是一条水道,上面有条船,船里24X7有个人在等着时刻开船。等这个家伙万一哪
一天遇刺的时候从这里逃跑。因为这个备份系统代价是生命,所以它如此可靠一直可靠。我们备份失败的代
价,其实也是生命。备份失败的代价是时间,恢复数据的时间。而时间,正是生
命中最不可恢复的部分,而且不可备份。

14条原则 (2) 首先检查最简单的:例如,MFC播放avi的时候在上面画东西

14条原则 (2) 首先检查最简单的:例如,MFC播放avi的时候在上面画东西我见过不少小孩撞了头以后,一边哭一边踹柱子。你一定也见过不少程序编译未
通过,或者逻辑错误,或者在游戏里被PK死了,然后摔鼠标砸键盘的。还有程序出了问题以后,大骂微软这垃圾编译器,或者操作系统的,断言,一定
是"这垃圾的XX有问题。"第二条原则是,首先最简单的。也就是,先检查最容易检查的。如果你病了,大
夫看了一眼,然后就断言,一定是某某病,回去吃某某药吧。你可能根本不敢相
信,虽然他要求你一圈检查,你又觉得他是有意让你多查以便赚钱。马上断言
的,大多是扯淡,只有一项一项排除的,才更可信一些。一项一项排除,从哪里开始呢?从最简单的。一个故事。一次,我在吉林大学某机器上,刚好主人不在,同时授权我使用。我
打开机器,看到了登录界面,用户名已有,要求口令。我开始试各种弱口令。姓
名缩写,电话号码,房间号,我甚至试了空格,无一命中。终于主人回来,告诉我,口令是:没有口令。只需回车,就会登录上去。但是这
最简单的可能,我没有试。另一个故事。当年还是novell网络横行时候,组一个游戏网。novell公司的
netware有个特性,可能是承袭自unix,登录的时候敲的键不会有任何回显,不
像微软会显示"*",你敲一个键,微软就显示一个"*"。所以有人开玩笑,你的密
码都被我看光啦,不就是星星星星星星星么。novell连个星号也不显示。当时我组一个网络,用一般用户什么的都登录正常了,就差用管理员,我记得是
叫admin还是supervisor登录,设置各种权限。就在这时,我卡住了。我登录不
上去。这种活经常干,按说不应该哪里出错。我开始排查,翻过来倒过去,就差
把整个网络重做了。半个小时还是两个小时,时间太久远,我记不清了,终于我想到了一种可能--键
盘上有个键坏掉了。而那个键,正好就在我的密码当中。所以,在系统看来,我
的密码总是错的。问题一旦找到,解决就容易至极,换个键盘。我没有试最简单的可能,有各种原因。阻止我想到那是最简单的可能的一个关键
因素是,我认为那是不可能的原因。很多年以后,有同学跟我说:老师,我编程序什么都觉得还顺利,就是建VC工程
太慢了,老是记不住。我答:那你就只建空工程,连续建20次。然后就记住了。对于那些被视作简单的练习,我都是这样回答的。如果你认为这个练习非常简
单,它一定花不了你多少时间,那么做一次也不费事;如果你认为这个练习太花
费时间了,那么,这一定是一个足够复杂的练习,非常值得一做。那些我们以为最简单的练习或者检查,如果花费的时间不多,为什么不执行一次
呢?断定一个程序正确的最佳方法,不是趴显示器上看两个小时,而是跑一遍。
跑一遍并不能断定它是正确的,但是如果跑不出正确结果,我们却可以飞快地证
实,它是错的。所以,如果程序不是特别大,你可以不停地编译,每隔一小段时间。让编译器保
证你始终走在正确的或尚可挽回的局面中。类似的,有同学问我,WORD写文章的时候,应该多长时间保存一次呢?答案不是
几分钟几小时,而是"你能够承受损失之前"。如果你一分钟能打个百八十字,而
且你不在乎损失这一分钟,那么这时你不必存盘,如果你一分钟只能打个二三十
字,而万一这时断电你会非常难过,你可以十秒钟就存盘一次。文章是由一次次
存盘构成的,而不是一个键入的字构成的,因为只有存盘的结果才能呈现与人。
不然,你就只能吹:我已经有了一个巨完美的证明,只是没有存盘。每次存盘,是可见的微小进步。那些微小的,应该引起我们最大的重视。有的同学可能会问:为什么要先检查最容易检查的,而不是先检查最可能的故障。
因为除非有十足的证据,仅凭猜测,你无法断言"最可能"的是什么。而获取更多
证据的方法,就是检查。如果你假设故障来自某个原因,准备开始检查,这检查
已经变成了一个新的实验,这时,你也应该首先检查一新实验中最容易的一项。当撞到柱子上,先检查完柱子没有移动过来主动攻击你,这几乎瞬间甚至我们没
有觉察就已经完成了;编译失败,逻辑错误,先检查自己的程序,而不是先假设
编译器有毛病,因为你假设编译器有毛病太困难了,通常超出了大多数同学的水
平。关于断言编译器有毛病,参见此系列后面的对比法。大骂微软编译器垃圾,十有八九最终发现垃圾的是自己。也许它的确很垃圾,但
我们编程的时候,肤浅到通常远未触及到它垃圾的部分。又一个故事,雷锋修车。传说雷锋修车的时候有个螺丝找不到了,找了半天也不
见踪影。战友说,算了吧。雷锋说,不行,万一掉到汽车里的某某地方,汽车就
要出大故障了。然后他们又找了很久,终于在就是那个某某地方找到了那个螺丝。这个故事原意说的是雷锋是个认真的好青年。我当时一直不明白,他们为什么不
先找那个某某地方呢?现在想想,如果这个故事是真的,也许他们有找螺丝的程序,先找最容易的,然
后步步向下。虽然过程漫长,但是最终总能解决问题。从最简单的开始检查,其实对应着一种非东方的科学思考方法。相关笑话一个。
说中国老太太和德国老太太把针掉到地上以后的反应。中国老太太会根据针掉的
方向,大致去看看,然后就找到了。德国老太太会把地板画上方格,然后一个格
子一个格子找,凌晨之前也许能找到。表面上看,中国老太太很有灵感,非常聪明。不过,德国老太太的方法的优势在
于,她一定能解决问题。她从某处开始找,可能就是最容易找的格子--虽然这个
格子并非最可能的方向,但是遍历之后,针必然在某个格子中。我们排除故障的时候,可以准备一个checklist (检查表?),把所有的可能原因
列上,然后开始排查。从简单到复杂,当表格扩展到某一位置的时候,问题就显
现出来了。这也是我们为什么要训练写作实验报告的一个原因。有经验的网络工程师检查故障的时候,不是凭直觉,而是先检查下三层,比如用
ping。如果下三层正常,再去检查DNS什么的。为什么先用ping,最主要的原因恐
怕正是因为这个工具用起来简单快速。显示器不亮,最先要排除的原因是什么?不是主板不是操作系统不是厂商的人
品,而是,先确定通电了。尤其是远程诊断的时候,尤其远程的用户并非熟练技
术人员的时候,并参见此系列后面的"永远不要相信你的用户"。编程的时候,我们通常正确的路线开始,用最朴素的方法。当然,什么方法才是
朴素的,是需要时间训练和一定的知识结构的。不是你最熟悉或唯一熟悉的方法
就是朴素的。然后,很多同学会犯一个错误。那就是,如果这个朴素的方法最开始的时候没有
工作,很多同学就放弃这个方法,转向另一个,如果那个方法也不好使,就再转
向一个新的。当你尝试某种技术路线的时候,一定要确保这种技术路线是不能用的。确保它不
能用的方法是,或者1.你了解到它不适合这个项目的缺陷,2.你有充分的实验证
明它不适合,然后你还需要保留证据。这些证据就是你实验报告的内容,用以自
己备忘或吵架用。昨天,帮一个同学改MFC的程序。目标是用CAnimate控件播放avi文件的同时,在
上面画点东西。解决的步骤如下。1. 该同学说,他在OnPaint事件响应中写了画线,但是这线不显示。我请他演示,线确实不显示。我猜他没有发送OnPaint消息,所以响应函数没有
调用。他说他在OnPaint里写了弹出了一个MessagBox,验证这一点。我说,那你
应该看到好几百个MessageBox,如果OnPaint消息一直发送的话。他说,是的,
他看到了。我们没有看到那么多MessageBox。事实上,只在程序载入的时候弹出一个。所
以,OnPaint消息响应里的那些东西都没有一次次被执行。关于上述这一点,并非适用首先检查最简单的这一原则,而是适用"永远不要相
信你的用户",请见后文。2. 我们改了程序,OnPaint源源不断发来,也能画线了。但是线被CAnimate的控
件挡住了。我考虑到的方法: (1)在控件的上面放一个窗口,设置为透明,在那个窗口的工
作区里画东西; (2)网上查到的,设置控件为透明; (3)修改工作区所在窗口的
Z坐标,把它放到控件的顶上。头脑不清醒,有的我还走了几步。反正都不怎么好。 方法(1)这个方法太复杂,
感觉上这样的任务不应该太复杂,尤其是rush一个粗糙原型,不然VC太弱了,违
背了一般较完善系统功能的规律。方法 (2)失败了,原因不明,现象没有任何变
化。方法(3)简单太笨了,当时真的可能没有带大脑,那样控件就会被工作区遮
住,avi的播放就看不到了。然后我想到了一个方法,因为简单,所以马上试了试。简单,可能有效,是我们
选择一个方法的重要理由。我们发现CAnimate派生于CWnd,而CWnd::GetDC()可以取得CDC设备上下文,而
CDC上面是可以画东西的。事情就这样成了。在这个方案之前,还走了一小段弯路。我试图从控件的指针构造CDC。在控件没
有播放avi的时候,画的东西在控件上,当avi播放,画的东西消失了。我们猜
测,当avi播放的时候,CDC或者控件的指针不再安全地关联了。瞎猜的。MSDN中
对于handle,对象的指针,有一大堆文档,没有一一去读。这个原型能跑了,虽然很粗糙,一个劲闪烁。不过简单的,能快速有点效果的,
不停的小恩小惠,正是人类所追求的。其实,相对于这第2条原则,我有一个不良习惯。我往往最后才检查最简单的或最
可能的,尤其是年轻的时候。当时是希望借此积累经验。现在,我更希望把那些
用于积累经验的实验,放到解决问题以后。当然,问题解决以后,可能就没有情
致再去积累经验了。相对于经历本身,我们原始的渴望直接想得到的,往往是终结那一刻的快乐。所
以,我们可以经常向心中的小兽投食:你看,又一个可能的原因排除了,又一个。
这些小奶酪,安慰我们,使脆弱的我们可以坚持走完全程。虽然,那些都不是原因也不是结果,但是那些一路伴随我们的,该记录下来。在
最终审判以前,我们任谁都不知道哪个才是正解。如果没有记录的话,当那一刻
到来,你却早就忘记了如何走到这里。正是那些最简单的所有伴随我们的事件形成了我们,当你开始忘记,你就失去了
自己。

2小时行走12公里

2小时行走12公里开了1小时45分钟的会,定下来一个框架,有三位同学分别去写代码了,明天看进
度如何再做定夺。虽然只是定框架之类的工作,很累。我想,我老了。我常跟朋友们开这样的玩笑,你老啦,你也老啦,你们跟不上时代啦。心里,有
时还会加上一句老gada的话,不雅,就不复述在这里了。他人在伦敦,过着美日
子,可能早就忘了当年的理想之一,在师大二舍建XX集团了吧。如果老gada看到
这段话,楼已经有了,两座塔楼,足够大。你老了。其实这是一句夸奖的话,意思是,你超脱了这个时代,不再跟随流俗,
开始有了自己的见解。但是,我老了,这不是夸奖。频频梦到看不清楚东西,在
梦里一个人弯着腰伸出手探寻着,我有多么恐惧。今天开会的显示器离桌缘够远,我只好抻着脖子贴过去看。这种姿势,难以保持
编码十分钟吧。更多的时间,我靠在沙发里,眼睛什么也没看,嗓音沙哑,谨慎
地讨论各种方案,先想到各种失败的可能。用笔,用纸,画些乱七八糟的图。我看到代码在里面流动,可是自己却不能亲手去写。这1小时45分会议以后,我出发,徒步2小时行走12公里。我看到满地的冰。各种
各样,雪化成水然后凝结的坚硬致密的,铁黑色;表面一层冰下面是空洞踩上去
卡卡响的,苍白的。我看到西边的落日,有时昏黄,有时暗红,有时是在凛冽的
风里飘摇的灰白。2公里,我累了。世纪广场,没有一辆车在斑马线上减速。所有的司机,都没有学
习过交通规则,或者,他们都忘记了。下次我应该捡几块砖头,把凡是不停车的
风挡都砸碎。我犹豫了,这次最终放弃了。我想了很多,甚至想到昨天看到介绍
抑郁症的文章里提到唐缺先生的话,即使非常小的事情,也会焦虑。最后我断
言,能够想这么多最后却没有砸,我一定是老了。某次路过这里,是和李记者同行。那一次,我们徒步了整10公里。然后他说什么
也要减速,剩下的不到2公里,我们走了似乎1个小时。然后,是烧烤。最近常常
出现什么名字到嘴边,却想不起来,比如烧烤店的名字。这是以前没有过的。你
知道我要说什么,我不说了。恩,我没老,我想起来了,是大韩食代。不是大
唐,也不是高丽。如果我错了,请不要告诉我吧。然后,似乎是转瞬间的事,李记者就去了天津,在那等我去喝酒了。等我去看他
喝酒,不对,他糖尿病也不能喝了,我们两个人只好看马利喝酒。他在长春的时
候,我们也会经年而不相聚。现在也没有什么不同,似乎。这条路,我一共和三个人一起走过,如李记者一样,此刻都各在艰难时代,也如
同我一样。所以,你可以想像,我们都在努力求生。我徒步2小时,也正是为了能
有精力继续别的。这就像打帝国的时候,我只喜欢打仗,喜欢骑兵攻城掠地,喜
欢投石器吱嘎嘎绞起火球然后忽地甩出去,我不喜欢农民种地,不喜欢采矿也不
喜欢挖石头。可是,为了能尽兴打仗,不得不做这些枯燥的事。作弊弄到钱,也
一样能造出骑兵推平敌人,可是却没了滋味。如果作弊能得到快乐,我们不开机
敌人甚至都没有生出来,岂不是更妙?沿着卫星路继续,没有一个斑马线能让我通过。最终,我发现前面没有路了,两
条车道斜着并在一起,没有斑马线,更没有红绿灯。原来这就是这些路的两侧没
有人行道的原因,设计师根本没有打算行人通过。这时我想的是,如果被车撞飞了,司机会不会以高度近视立体视觉较差为借口而
少赔我钱。到时候谁来替我砍他?我只好在那里过马路。呵呵,很害怕,非常害怕。从结果上看,既然我还活着,
司机们一定很好地把握了安全距离,而我只好相信他们,把性命交给陌生人。货
车飞快,毫不减速,我担心车掀起的风能把我抓到车轮下。出了一身汗,终于通
过四五处双实线到达对岸。以后出行,得必须先确实哪里有红绿灯了。前路漫漫。之后,我穿过一个建在高压线下的公园,穿过灰尘扬起的街道,我路过干涸的人
工湖和拦腰截断的河。我看到高压塔旁的老人蹒跚着走过,像走在3D建模未完工
的城堡之下,我看到楼群间的落日被立交桥分割,在城市蒸腾的热气中抖动着,
像远处的海水泛着金红的光茫。这一路,真的很美,感动得令人流泪。