20120329

测试快门线

.

20120327

回忆我的英语老师们

回忆我的英语老师们

英语四级,我是在大四那年过的,当时工作已经找完了。大家对我能通过都很惊
讶。大哥说:"现在就咱俩,你就实说了吧,到底怎么过的?"我确实想过作弊,
但是不敢。抄同学的话,连累别人的后果很严重;拿萝卜扣章的话,可能有期徒
刑两年。我就是那么答过去的。这之前,我一直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嗓子
的论点啊,真是没有更弱智的了。

尤其很多同学学习外语是为了跟外国人交朋友。或者反过来?

我跟牛老师谈起过自己对英语的这种态度,他纠正我的看法。

我说:我不想跟外国人交朋友。

他说:你能只跟他们谈计算机,别的啥也不说么。

我说:是啊,深入的交流不可能。平常的交流,除了谈专业,还有啥好说的。

他给我讲了段他的经历。有个老外问他,北京有桥么。他说,有啊。老外说,我
不是问过河的那种桥,是架起来,下面也通车的。就是立交桥。牛老师说,有
啊,有几百座吧。

牛老师说:如果你英语不好,就什么也不能跟他说。鬼子不会觉得你英语不好,
他只会觉得你啥也懂,然后觉得中国人啥也不懂。

于是我努力学习。在芬兰和后来接待外国老师们期间,有不少人提到过:杨啥都
懂,对欧洲,你懂得比我还多。

我不想做一个令老师丢脸的学生。我尽力做到。当然,如上所述,其实我做得是
多么糟烂。如果,我把那些扯淡和享受青春感受人生的时间用来努力,也许现在
可以问心无愧地说一句"我比老师期待得做得更好",那种感觉会非常不同吧。

20120325

pics

.

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

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

经常看到新闻,有人旁听大学的课程,甚有所得。经常在网上看到同学们褒贬自
己的或旁听课程的老师,还经常看到有人提到读了某本名著,兴奋莫明。

些时,我们不得不注意到一个问题,他们大多数旁听和阅读的,都是人文类课程
或者名篇。没几个人为理工课程或者知识兴奋一下,甚至假装表现一下兴奋的都
少见。

昨天听到封同学提到"他们文科",我们哈哈大笑,他话气里的渺视之情表露无疑。
很多人习惯了,而为什么很多人觉得这种渺视是理所当然的呢?

因为有些文科,是在做着每个人都能做的工作,那就是欣赏。而欣赏表演,技术
含量太低,当你拿出来炫的时候,就免不了受人蹊落。

盖因我国人民习惯于"子曰诗云"的引用,似乎牛人说过就表明那是支持自己了。
所以,"我听牛人如是说"就成了一种炫耀的手段而非仅仅表达自己求知渴望的交
流。有时,这种说法表达的是"嗨,我可是个爱学习的好少年"。

孩子和猴子最擅长的是模仿,孩子还会献宝。他们都很可爱,如果他们尚未长大
为成年人或进化为人类的话。不幸的是,所有的大学生和旁听大学课程的,都是
成年人类。只是,有时经常被别人称为"孩子",就真的以为自己是孩子了。却不
知,被人称为孩子是一种奇耻大辱,除非对方是你尊重的长辈。

有几种情况会称一个人为孩子。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有个人在等着时刻开船。等这个家伙万一哪
一天遇刺的时候从这里逃跑。

因为这个备份系统代价是生命,所以它如此可靠一直可靠。我们备份失败的代
价,其实也是生命。备份失败的代价是时间,恢复数据的时间。而时间,正是生
命中最不可恢复的部分,而且不可备份。

20120322

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条原则,我有一个不良习惯。我往往最后才检查最简单的或最
可能的,尤其是年轻的时候。当时是希望借此积累经验。现在,我更希望把那些
用于积累经验的实验,放到解决问题以后。当然,问题解决以后,可能就没有情
致再去积累经验了。

相对于经历本身,我们原始的渴望直接想得到的,往往是终结那一刻的快乐。所
以,我们可以经常向心中的小兽投食:你看,又一个可能的原因排除了,又一个。
这些小奶酪,安慰我们,使脆弱的我们可以坚持走完全程。

虽然,那些都不是原因也不是结果,但是那些一路伴随我们的,该记录下来。在
最终审判以前,我们任谁都不知道哪个才是正解。如果没有记录的话,当那一刻
到来,你却早就忘记了如何走到这里。

正是那些最简单的所有伴随我们的事件形成了我们,当你开始忘记,你就失去了
自己。

20120321

2小时行走12公里

2小时行走12公里

开了1小时45分钟的会,定下来一个框架,有三位同学分别去写代码了,明天看进
度如何再做定夺。虽然只是定框架之类的工作,很累。

我想,我老了。

我常跟朋友们开这样的玩笑,你老啦,你也老啦,你们跟不上时代啦。心里,有
时还会加上一句老gada的话,不雅,就不复述在这里了。他人在伦敦,过着美日
子,可能早就忘了当年的理想之一,在师大二舍建XX集团了吧。如果老gada看到
这段话,楼已经有了,两座塔楼,足够大。

你老了。其实这是一句夸奖的话,意思是,你超脱了这个时代,不再跟随流俗,
开始有了自己的见解。但是,我老了,这不是夸奖。频频梦到看不清楚东西,在
梦里一个人弯着腰伸出手探寻着,我有多么恐惧。

今天开会的显示器离桌缘够远,我只好抻着脖子贴过去看。这种姿势,难以保持
编码十分钟吧。更多的时间,我靠在沙发里,眼睛什么也没看,嗓音沙哑,谨慎
地讨论各种方案,先想到各种失败的可能。用笔,用纸,画些乱七八糟的图。

我看到代码在里面流动,可是自己却不能亲手去写。

这1小时45分会议以后,我出发,徒步2小时行走12公里。我看到满地的冰。各种
各样,雪化成水然后凝结的坚硬致密的,铁黑色;表面一层冰下面是空洞踩上去
卡卡响的,苍白的。我看到西边的落日,有时昏黄,有时暗红,有时是在凛冽的
风里飘摇的灰白。

2公里,我累了。世纪广场,没有一辆车在斑马线上减速。所有的司机,都没有学
习过交通规则,或者,他们都忘记了。下次我应该捡几块砖头,把凡是不停车的
风挡都砸碎。我犹豫了,这次最终放弃了。我想了很多,甚至想到昨天看到介绍
抑郁症的文章里提到唐缺先生的话,即使非常小的事情,也会焦虑。最后我断
言,能够想这么多最后却没有砸,我一定是老了。

某次路过这里,是和李记者同行。那一次,我们徒步了整10公里。然后他说什么
也要减速,剩下的不到2公里,我们走了似乎1个小时。然后,是烧烤。最近常常
出现什么名字到嘴边,却想不起来,比如烧烤店的名字。这是以前没有过的。你
知道我要说什么,我不说了。恩,我没老,我想起来了,是大韩食代。不是大
唐,也不是高丽。如果我错了,请不要告诉我吧。

然后,似乎是转瞬间的事,李记者就去了天津,在那等我去喝酒了。等我去看他
喝酒,不对,他糖尿病也不能喝了,我们两个人只好看马利喝酒。他在长春的时
候,我们也会经年而不相聚。现在也没有什么不同,似乎。

这条路,我一共和三个人一起走过,如李记者一样,此刻都各在艰难时代,也如
同我一样。所以,你可以想像,我们都在努力求生。我徒步2小时,也正是为了能
有精力继续别的。这就像打帝国的时候,我只喜欢打仗,喜欢骑兵攻城掠地,喜
欢投石器吱嘎嘎绞起火球然后忽地甩出去,我不喜欢农民种地,不喜欢采矿也不
喜欢挖石头。可是,为了能尽兴打仗,不得不做这些枯燥的事。作弊弄到钱,也
一样能造出骑兵推平敌人,可是却没了滋味。如果作弊能得到快乐,我们不开机
敌人甚至都没有生出来,岂不是更妙?

沿着卫星路继续,没有一个斑马线能让我通过。最终,我发现前面没有路了,两
条车道斜着并在一起,没有斑马线,更没有红绿灯。原来这就是这些路的两侧没
有人行道的原因,设计师根本没有打算行人通过。

这时我想的是,如果被车撞飞了,司机会不会以高度近视立体视觉较差为借口而
少赔我钱。到时候谁来替我砍他?

我只好在那里过马路。呵呵,很害怕,非常害怕。从结果上看,既然我还活着,
司机们一定很好地把握了安全距离,而我只好相信他们,把性命交给陌生人。货
车飞快,毫不减速,我担心车掀起的风能把我抓到车轮下。出了一身汗,终于通
过四五处双实线到达对岸。以后出行,得必须先确实哪里有红绿灯了。

前路漫漫。

之后,我穿过一个建在高压线下的公园,穿过灰尘扬起的街道,我路过干涸的人
工湖和拦腰截断的河。我看到高压塔旁的老人蹒跚着走过,像走在3D建模未完工
的城堡之下,我看到楼群间的落日被立交桥分割,在城市蒸腾的热气中抖动着,
像远处的海水泛着金红的光茫。

这一路,真的很美,感动得令人流泪。

20120318

果然,C语言就不贱嗖嗖的:以realloc为例

果然,C语言就不贱嗖嗖的:以realloc为例

贱嗖嗖,也许是东北方言?它的意思大致是别人不需要你做的事情,你偏要替别
人做了,甚至可能还起到了负面的效果。比如网上有张照片的笑话,说是保姆看
小资的单反镜头太脏了,全泡肥皂水里刷了一遍。大致吧,这个时候小资心里的
看法大致就是你怎么这么贱嗖嗖的。

据说计算机程序是牛人设计出来,给傻子用的。既然是给傻子用的,就一定要考
虑得非常周到才行。所以,作为傻子之一,我就常有这样的感慨:你怎么这么贱
嗖嗖的。

前两天跟包师弟、关同学、孙同学一起写驱动,用了windows7操作系统。整个下
午诸多不顺,原因,我总结的一条就是一众软件都贱嗖嗖的。比如,win7下拖动
文件图标,它跳出来问你,你是要复制啊还是要搬移,还是要怎么的。难道我的
操作指令还不够明确,或者win7的用户比winxp的用户更弱智了,所以它觉得不
得不提醒一下?

我想起了当年玩光荣公司的三国志英杰传,每当退出的时候,它都会三番五次地
跟你确认"你真的是要退出了么""你的确是要退出了么""退出游戏可就不能玩了啊
",大致这样的意思。终于客气完了,界面就要回到操作系统之前,它又跳出来
说,"您辛苦啦。"

周到,真是周到。看日本小巷里老头老太太不断地相互鞠躬道别,也不过如此。
转过街角,还要回头再哈一下腰吧。周道则周道矣,效率却奇差无比。

我要退出就是要退出的意思,你一遍一遍地跟我确认,真是伤害我的自尊,好像
不如此关照不足以彰显我是个弱智儿童。你能悄没声地干活,少跳出来提醒我么。
同样的道理也适用于QQ、360等非要在启动的时候弹出个窗口,提醒我现在有哪
些国家大事。还有windows窗口右上角那个血红的叉子,我想退出的时候能找得
到,不用这么明显地一直一直提醒我你存在。

这么贴心 (还有某处方言,窝心)地关照,总让我担心里面包藏祸心。

马利老师前两天博客提到,他如何教导了刺头同学。他作为男老师的这种干脆
劲,该罚罚该讲道理讲道理,令人耳目一心。作为对比,我不由得想起当年教过
我的一些女性老师。柔则柔矣,有些确实有阴的痕迹。盖阴柔二字组成一词不是
没有道理的。

编排老师不是我等学生应该做的事,所以某些女老师的做法估且跳过。编排另一
位,女医生。N年前我看牙的时候,那位牙医是位女士。当时我做的是根管治疗,
就是拿一根特细的小铁丝往里面捅啊捅,然后钻两圈。我很快就全身温透了。她
总是阴柔地说"快了快了"。此时我想,反正快了,可以再忍一下。但是,仍然没
有"快"结束。如是者三,我就明白了,她在骗我,"快了"二字就再也起不到任何
作用了。再后来,她说其实如果实在受不了,是可以用麻药的。虽然道理上似乎
对,但是我却再也不相信她,一定要封上不治了。

"快了"不是一个她预见到可能发生的事件,而是用来安慰病人的一组声音而已。
而它起作用的前提,是病人相信这组声音的意义。当这组声音失去意义的时候,
信任也一同失去了。

类似的引导性的关照,你是不是在你的女老师身上也发现过?

孙子兵法说,不要告诉士兵行军的目标;使用士兵,要如驱羊群。这种观点据说
现代还有些争议,即是否要发挥人民群众的力量、人民群众到底是不是主人、主
人价值如何体驱啥的。这些观点都太高深了,我完全无法理解。我能理解的是:
君视民如草芥,民视君如寇仇。如果你骗我,利用我,驱使我,认为我是弱智,
我没有理由表现很聪明的样子啊。

当软件把用户当成襁褓里的婴儿,这样呵护下成长起来的用户还有能力做些什么
呢?同样,凡事都由老师安排好了的学生,一旦失去或离开老师,会有什么样的
能力呢?据说某些初中学校的教学方法就是让学生做题做题做题,学生们做题做
伤了,到了高中大学就没有后劲了。我倒更乐意相信,那是因为老师在学习方法
上把学生照顾得太无微不致了,学生没有获得 (而不是失去)了主动性和独立性。

独立地判断,正是人类区别于动物的一个特征。独立于感受,运用理性;独立于
他人,保持自我。

也有个别的程序,知道尊重用户,或者说,把用户当成与它同等聪明和具有判断
力的"人类"。

袁小康同学来信问我,C/C++中的realloc函数的事。他说:realloc重新为一个
指针指向的内存分配空间。如果剩余的空间够大,内存地址不变,空间向后延
伸;如果内存空间不够大,那么,系统为这一指针指向的内存重新分配一块空
间,把原来空间里的东西都复制过来。他的问题的:如果还有其他的指针指向同
一空间,那些指针怎么办呢?

如果不进行任何处理,那些指针就成了野指针。

我回信,猜系统会更新那些指针的地址。而且建议他做实验验证一下。

没多一会儿,袁同学回信来,其余的指针的地址并未更新。我猜错了。

查了一下资料。C/C++的realloc就是没有更新那些指针的地址,它只是把新的
(或旧的)地址作为返回值了。判断地址是否换了,是程序员,而不是编译器或运
行时库的责任。

表面上看,C/C++对程序员关照得并不充分细致。但是,考虑到并非每次realloc
都会导致内存地址改变,如果每次realloc都更新所有指针,会导致效率下降。
这些并非必要的工作,C/C++交由程序员处理,而不是事无巨细,万帮代办。

C/C++相信和要求它的程序员是睿智的人类,因此,它的使用者,或者说能够驾驭
它的,也一定是睿智的人类。请注意,是驾驭C/C++的,而不是被C/C++驾驭的。
那些细心为你考虑所有问题,希望你连思考都不必的,一定是希望驾驭你。

尊重的特征,是真诚。

与工具的交流是这样,与人的交流也没有区别。

如果我们交流,我要知道所有发生的事情,我可以选择放弃知道,你也可以选择
拒绝告知。但是,欺骗、隐瞒、诱导、强迫、暗示并考验,都是对我故意冒犯和
挑战,此时,我就不得不以反击证明我的智商比你估计的要高一些。

或者,你明确地告诉我,在这件事中,我是工具,因此不必负有人类的责任。然
后,我来告诉你我是否愿意。

pics.

.

20120316

3月16日,纪念日

3月16日,纪念日

2005年3月16日,中国最大的BBS水木清华转为只供校内使用。此前后,北大的一
塌糊涂站、南大的小百合站等纷纷转为校内使用。转为校内使用的意思就是,一
个你每天可以见到的站点,那些熟悉的面孔,瞬间从这个世界上消失,永远也没
有再见到的机会。你甚至没有机会说声再见。

很多人慢慢淡忘了3月16日,于是一年又一年过去了。于是人们原谅了QQ,原谅
了360,也原谅了关闭BBS的那些人。

2012年3月16日,微博实名制。

同样的原因,我永不使用QQ。是以为记。

pics

.

20120315

14条原则 (0) & (1)

14条原则 (0)

引言

这是一个系列博客,源于调试计算机网络的14条原则,适合于广泛得多的领域。
这些原则来自一本并不太著名的书,讲Novell的,这14条原则是"故障诊断和排除
的基本原则"部分。

那本书是[美]Logan G. Harbaugh 著《Netware系统故障诊断与排队》。可能是
Harbaugh, L.G., Novell's problem-solving guide for NetWare
systems. The Inside story. 1993, San Jose: Novell Press ;. xii, 459
p. 或者是 Harbaugh, L.G., Troubleshooting NetWare systems. 2nd
ed. 1996, San Francisco: Network Press ;. xxv, 532 p.

1996年前后,我看了这本书,这些原则带给我很大帮助。而且越是经过长时间的
考验,越显示出它们的用途。

我在某计算机生产商给工程师的维修手册上看到了类似的原则;我在理工科实验
中看到了类似的原则;从本科开始,每个教导我工程和实验方法的老师,他们都
贯彻了类似的原则。

希望也能帮助你。

14条原则 (1) 不要怕实验,但一定要确保能返回开始试验时的设置。

前面提过,我小学诸多学校之一,看起来是个专门培养贵族的学校。大约小学毕
业10多年以后,我才意识到,小学同学中很多人跟我根本不是一个阶级的。比如
我住在半农村半郊区的平房里,他们中的好多人那个时候就住在楼房中。我1994
年大学入学开始长期住在楼房中,所以虽然屋子中间桌子上的水也能结冰,我也
没有觉得有多么异常。说远了,我小学有个邱同学,她的家也住楼,似乎家长之
一或者全部是医生。提她的父母职业的意思是,她的阶级挺高的。

邱同学给我印象较深刻的一件事情,是她姥姥去世的时候,她带到学校两样好东
西。一件是一本小册子,比现身份证大一圈,一寸厚,针灸的书。所以后来的某
些同学,我能跟你们扯上一些穴位任督二脉啥的,还真不是从金庸那学的。

这本小册子后来归我了,我用一本作文选换的。这本作文选,似乎是用一张林彪
提词邮票换的。

邱同学那个时候还带来一件好东西,包括你在内的很多同学也会同意那是好东西。

那是一块钻石。有我现在的小手指甲那么大的面积,阳光下那真是光茫四射。托
子是白金或者黄金的,具体颜色我确实不记得了,但是邱同学一定记得我--因为
那上面现在应该还有我的牙印。

我说:是真金的?

她说:肯定啊。

我就用牙咬了一口。狠狠咬的,参考电视上坏人咬黄金时的那个表情。牙印深而
大,真是真金呐。

我当时还出过一个主意。据说,金刚石是石墨的同素异形体,用放大镜聚光可以
烤着。这个提议被她拒绝了。我至今也未能验证金刚石和石墨是否同素异形体。

我还提议用很多不错的东西跟她换这块金刚石,当然,也被拒绝了。而如你所
知,如果我换来了,这块金刚石一定第一时间被我放在放大镜的光斑下。

你现在相信那是培养贵族的学校了吧。

"不要怕实验,但一定要确保能返回开始试验时的设置。"

这涉及到两个问题。一,不要怕实验,二,要确保能返回开始试验时的设置。

上面这个故事告诉我们,万一,只要存在这样的可能,实验的后果都可能是非常
糟糕的。

当我们在一个工程中,不能确定某种技术是否应该这样用,比如一个API的参数,
其执行后果,某种特别的算法,或者进程线程同步的用法。这时,我们不应该在
工程中测试这项技术,而是应该再单独建立一个小的原型工程,它是干净的,唯
一的目的就在于测试这项技术。

不在复杂的环境下测试,而创造一个相对理想的环境,原因之一就在于,复杂的
环境可能不容易恢复。

在实验前,要考试后果,所以尽可能备份。以便失败以后可以再来。

我小时候做过三个实验。

一个实验是为了验证人自己憋气能不能憋死。我站在立柜的大镜子前面,看着自
己,不呼吸,然后发现越来越暗,最后眼前一黑。当然,你容易猜到,我的实验
失败了,否则你看到我的文字挺超自然的。眼前一黑以后,我撞在镜子上,然后
恢复了呼吸。

这大约是小学四五年级时候的事。

大约2年内,我才知道,人不能自主地憋死自己,会在失去意识的瞬间恢复呼吸。
我很庆幸,当时不知道另一件事:咬舌自尽成功的人,是由于流出的血液堵塞了
呼吸道而未能及时清除。可以想像,如果当时我就知道,这个实验可能会成功。

小时候的另一个实验,是测试我姥家一把小刀是否锋利。用的测试用例是我的手
指。我把小刀按下去,没出血,再使劲,还是不行。结论,这把小刀不够快。但
是它能削铅笔啊。啊,我突然想起来,刀不是这么用的,应该"拉"。于是我按如
上操作,成功了。手指的血刷一下就出来了,止了半天。

实验之前,我只想到实验的技术路线是否合理,而没有想到实验万一成功了的后
果。

这大约是五六岁时候的事。

小学的时候,就是在那个培养贵族的学校,我有一块手表,丹东产的机械表。那
个时候,这也算个不错的东西了,在我心里估计跟现在的ipad3有得一拼。

问题来了,那块表是防震的。所以,我测试了。我用压腿的那种一格一格的器械
作为参照,每次抬高一格,把表扔下去,而且我注意到了是自由落体,不要用向
用力。很多次,我都失败了,也就是说,表都没有任何问题。真的是防震的啊。

当然,你猜到了,后来表终于摔坏了,表蒙子裂了,表也不走了。实验,成功了。

同上,我只设计了技术路线,没有考虑实验后果。

那是小学五年级前后的事。

当我们做任何破坏性实验的时候,我们应该想想当年那个傻小子,智商不能比他
更低。当我们想要检测某个变量的值的时候,我们也同样应该想想他,考虑无损
的检测手段。

以上,是问题的二个方面,一定要确保实验是安全的,既要预计实验成功的后
果,也要考虑实验失败的后果。同时,还要考虑,是否有我们没有考虑到的程序
走向,它的后果是什么。

这也是我们为什么要写实验报告的一个原因,因为可能的实验后果太多太复杂,
不能凭空想像。有的同学可能会说,现在我做的实验都非常非常简单,那么,写
实验报告的原因是:写实验报告是一种能力,它需要先通过简单的实验来训练,
然后你才能把这种能力应用在复杂的实验上。

当确保实验是安全的时候,我们回到问题的第一个方面,要敢于实验,不要害怕。

当你还什么也不是的时候,当你对一个系统还不怎么了解的时候,能设计实验整
坏它是非常困难的。更不用说摧毁它。黑客还是什么英雄找到系统的某个弱点,
然后爆炸啊什么的酷场景,只存在于科幻片当中,发生在你身边那台计算机中的
可能性微乎其微到可以忽略。

对于一个强健的系统,只有真正了解它的人,才能摧毁它。就像,只有你真正爱
着的人,才能伤害你。而那些你陌生的没有任何期待的人,你又怎么会因为他们
做的任何事情而伤心。这个故事告诉我们:当我们是别人的陌生人的时候,可以
可着劲地折腾,但是当你走入一个人的内心,一举一动就都要小心。我还记得马
越同学文章里写到的她知道妈妈在目送她上学:我走得小心翼翼,因为我走在妈妈
的目光上面。

不过计算机,强健得多了。因为它一般地,不会对你产生感情。只要你不使用机
械工具,比如榔头,你的计算机在你初学时是安全的。你不熟悉原理的工具,很
难用它解决问题,当然,也很难用它制造问题。所以,你可以大胆实验。

有同学可能会说,我经常"正常"用着用着啪一下机器就不好使了。

这可能勉强算大胆,但这不是实验。实验,必须有记录。这也是为什么航海家们
要记航海日记的原因--即使我们挂了,也要让后来人知道发生了什么。

实验时,你必须记录你每一个动作。详细到你的同学可以根据你的记录重复你的
实验--这时,通常也可能重复出你造成问题的动作来。如果他按你的记录操作却
没有产生相同的问题,请参照后面的原则"对比法"。

也有的同学说:我也不知道我做了什么,我不记得我做了什么,反正毛病就出了。

那么你有记录么?如果有记录,那么分析记录,重复实验吧。人类区别于动物的
一个重要方面,就是能从大量的现象中猜测出原因或者瞎编出原因来。如果你没
有记录,那么重复实验并做记录吧。

这种重复,不仅带给你如何解决这一个问题的知识;同时,它带给你更重要的,
实验的技能,这些技能也适合于以后更多的实验。

以前我读到过《读者》故事里印弟安还是什么老人的,对要走出大山的年轻人
说,人生前三个字是"不要怕"。这和咱们的原则是一致的。后来这个年轻人历尽
沧桑回到山里,老人去世了,给他留了另外三个字,"不要悔"。咱们的原则是,
要确保能恢复到实验前的设置。

为什么我们的原则不同于人生呢?因为我们工作在虚拟的世界中,所以,回到过
去真是易如反掌。前提是,你得记着过去是什么样的。

你真的还记得过去么,比如你为什么走到此你,比如你曾经的理想?